zoukankan      html  css  js  c++  java
  • 入门Docker

    Docker简介(构建、安装、运行、任何应用在任何地点)
    是什么
      解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
      Docker三要素:仓库Docker Hub存放镜像、镜像、容器
    能干嘛
      有了容器,就可以将软件运行所需的资源环境打包到一个隔离的容器中
      容器内没有自己的内核,而且也没有进行硬件虚拟,因此容器要比传统虚拟机更轻便
      缩小版浓缩版Linux系统
      虚拟机的缺点:资源占用多、冗余步骤多、启动慢,
      Linux容器不是模拟一个完整操作系统,而是对进程进行隔离,
    去哪下

    Docker安装
      前提条件:运行在CentOS-7上,要求系统为64位,系统内核版本为3.10以上 查看版本:uname -r
      运行在CentOS-6.5或更高的版本上,要求系统为64,内核版本为2.6.32-431或更高版本
    Docker架构
      Client Containers / Images Registry(阿里云、网易云)
      docker build 容器Redis 镜像含 仓库中含
      docker pull 容器Nginx Redis、Nginx Redis、Nging
      docker run 容器Rs+Nx 镜像
    镜像/容器/仓库
      镜像就是一个只读的模板,镜像可以创建多个Docker容器,如:类和对象/容器好比是镜像的一个个实例
      容器可以看做简易版Linux环境(中包括root用户权限、进程空间、用户空间、网络空间)和运行在其中的应用程序;Docker版CentOS仅为170M,只用了Linux内核
      仓库分为公开库和私有库两种形式,国内公开库一般使用阿里云和网易云
      有镜像才能创建容器,这是根本
    安装步骤(CentOS-6.8)
      yum install -y epel-release
      yum install -y docker-io
      安装后的配置文件:/etc/sysconfig/docker
      启动Docker后台服务:service docker start
      验证:docker version

    安装步骤(CentOS-7)

      HelloWorld官方提供的测试用!
      阿里云镜像加速:配置步骤 (CentOS-6.8)
      登录阿里云淘宝号即可
      获得加速器地址链接
      配置本地Docker运行镜像:/etc/sysconfig/docker
      重新启动Docker服务:service docker restart
      Linux系统下检查配置是否生效:ps -ef|grep docker

    配置步骤 (CentOS-7)
      vim /etc/docker/daemon.json
      "registry"-mirrors":["https://aa25jngu.mirror.aliyuncs.com"]
      systemctl daemon-reload
      systemctl restart docker
      网易云镜像加速:和阿里云类似

      docker run hello-world运行后会提示:Pulling from hello-world表示:本地没有改镜像,会自动下载hello-world镜像并在容器内运行。

    Docker是怎么工作的?
      Docker是Client-Server结构的,Docker守护进程运行在主机上,
      通过Socket连接从客户端访问守护进程,接收命令并管理运行在主机上的容器

    为什么Docker运行比vm快?
      镜像较大 镜像小
      面向硬件的 面向软件的
      虚拟机是分钟级的,Docker是秒级的不需要硬件虚拟,而不像vm需要处理cpu/内存消耗

    Docker常用命令
      技术都是想通的、万变不离其宗
      命令分类:镜像命令、容器命令、帮助命令
    帮助命令:
      docker version 版本
      docker info 版本描述
      docker --help 帮助命令
      (Linux:man帮助、marik创建目录、touch创建文件、pwd当前位置)
    镜像命令(好几层!,分层)
      docker images 列出本地所有镜像:REPOSITORY:标识镜像的仓库源,TAG镜像的标签,IMAGEID镜像ID,CREATED镜像创建时间,SIZE:镜像大小
      -a 列出本地所有镜像的(中间层)
      -q 只显示镜像ID
      --digests
      --no-trunc、

      docker search 某个xxx镜像名称:如tomcat
      -s 30 tomcat 过滤列出超过点赞数量的
      docker pull tomcat 下载下来
      docker rmi -f hello-world:3.2 (-f:强制删除)
      docker rmi -f hello-world nginx (-f:删除多个)
    容器命令
      docker run -it centos 新建并启动交互式容器
        --name mycentos0115 centos 容器别名
        -i 以交互模式运行容器
        -t 为容器分配终端, 通常和-i同时使用
        -d 后台运行容器,返回容器ID,即为守护式容器
        -P 随机端口映射
        -p 指定端口映射,有以下四种格式
          ip:hostPort:containerPort
          ip::containerPort
          hostPort:containerPort
          containerPort
      docker ps 查看已启动的容器
        -a 历史运行记录
        -l 上一次运行的
        -n 3 上3次运行的
        -q 只显示容器编号

      exit 容器退出停止
      Ctrl+P+Q 容器退出不停止

      docker start 容器ID编号, 启动容器

      docker restart 容器ID编号,重启容器

      docker stop 容器ID编号,关闭容器
      docker kill 容器ID编号,强制关闭容器

      docker rm 容器ID编号,删除容器

    重点   docker run -d centos 启动容器守护进程 (有些需要运行后台或前台,Docker容器后台运行,必须有一个前台进程)

        docker run -d centos /bin/sh -c"while true;do echo hello zzyy;sleep 2;done"
        docker logs -t -f --tail 3 容器ID编号, 查看容器日志

        docker top 容器ID编号,查看容器内运行的进程

        docker inspct 容器ID编号,查看容器内部细节

        docker attach 容器ID编号,进入正在运行的容器并以命令行交互
        exec -t 容器ID编号,ls /../.. 在外边操作容器
        docker cp 容器ID编号:/tmp/yum.log /root,从容器内拷贝文件到主机上(容器中数据持久化)
    Docker镜像(轻量级,可独立运行的软件包)
        UnionFS(联合文件系统)(花卷)
        Docker镜像加载原理
        docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS
        在Docker镜像的最底层是bootfs,
        分层的镜像
        分层特点:资源共享(下载多次得以体现)

    Docker镜像commit操作
        docker run -it -p 8888:8080 tomcat
        docker run -it iP tomcat

        docker commit提交容器副本使之成为一个新的镜像
        docker commit -a="作者" -m="提交的描述信息" 容器ID 要创建的目标镜像名:[标签名 ]
        docker commit -a="zzyy" -m="del tomcat docs" 容器iD编号 atguigu/mytomcat:1.2

    Docker容器数据卷(-v 添加容器卷)
        做持久化,容器间的共享数据,类似rdb,aof
      特点:
        数据卷可在容器之间共享或重用数据
        卷中的更改可以直接生效
        数据卷中的更改不会包含在镜像的更新中
        数据卷的生命周期一直持续到没有容器使用它为止
        容器内添加
      命令:
        1.docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
        docker run -it -v /myDataVolume:/dataVolumeContainer centos
        2.查看数据卷是否挂载成功
        docker inspect 容器ID编号
        3.容器和宿主机之间数据共享
        vi host.txt,同步(容器)也会创建
        4.容器停止退出后,主机修改后数据是否同步
        exit
        vi host1.txt
        是同步
    5.命令(带权限)
      docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
      docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos:只允许容器读,不可写


      JavaEE Hello.java ==> Hello.class
      Docker images ==> DockerFile


    DockerFile方式 添加 容器数据卷
      1.根目录下新建mydocker文件夹进入
      2.可在Dockerfile中使用"VOLUME指令"来给镜像添加一个或多个数据卷

      3.DockerFile构建
        # volume test
        FROM centos
        VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
        CMD echo "finished,----------success1" 打印
        CMD /bin/bash
      4.build后生成镜像
        docker build -f /mydocker/Dockerfile -t zzyy/centos .
        docker images
      5.run容器
        docker run -it zzyy/centos
        (通过DockerFile方式没有指定宿主机目录也会默认有)
        docker ps
        docker inspect 容器ID编号
        vi host1.txt
    数据卷容器(容器间传递共享--volumes-from)
      容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止!

      docker run -it --name dc01 zzyy/centos(//zzyy/centos自己的新建的容器)

      docker run -it --name dc02 --volumes-from dc01 zzyy/centos

      docker run -it --name dc03 --volumes-from dc01 zzyy/centos

      docker attach dc01
      pwd
      ll
      父到子容器,子到父容器都可共享

      删除父容器子容器不受影响



    DockerFile解析
      DockerFile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本。
      构建三步骤:编写DockerFile文件、Docker buile构建、docker run运行

      FROM scratch //元镜像、祖先镜像
      MAINTAINER The CentOS Project <cloud-ops@centos.org>//作者邮箱
      ADD c68-docker.tar.xz / //压缩
      LABEL name="CentOS Base Image" //说明
      vendor = "CentOS"
      license = "GPLv2"
      build-date = "2016-06-02"
      #
      CMD ["/bin/bash"]//
    Dockerfile面向开发、Docker镜像为交付标准、Docker容器则涉及部署与运维,缺一不可,Docker体系基石

    DockerFile体系结构(保留字指令)
      FROM 继承、当前镜像基于那个镜像
      MAINTAINER 描述
      RUN 容器构建时需要运行的命令,如要需下载的命令
      EXPOSE 容器对外暴露的端口
      WORKDIR 启动时容器时的根目录,默认是:/ 根目录(pwd)
      ENV 设置环境变量
      ADD 拷贝压缩文件
      COPY 拷贝
      VOLUME 创建容器数据卷、用于数据保存/持久化工作
      CMD 容器启动时运行的命令(可有多个、但只最后一个生效)
      ENTRYPOINT 和CMD类似、CMD在人工写了时候会被覆盖、ENTRYPOINT会追加并不覆盖
      ONBUILD 类似于触发器
      自定义镜像(案例)
      编写 from centos
      MAINTAINER 王路凯 18303051935@163.com

      ENV mypath /tmp
      Workdir $mypath

      RUN yum -y install vim
      RUN yum -y install net-tools

      Expose 80
      CMD "bin/bash"
      build
      docker build -f /mydocker/Dockerfile2 -t mycentos:1.3
      docker images
      run
      docker run -it mycentos:1.3
      -ls (会覆盖CMD)

    查看镜像生成时变更历史:
      docker history 容器ID编号

    案例定义tomcat9镜像

      留给自己将来的作业!!!
      --privileged=true//写软权限不够的话加

      docker exec 容器ID编号 java -version

      主机中改了项目,容器中的web项目也改(通过容器卷)

      push 没讲呢(发布阿里云用)

    Docker常用安装

      自己安装Tomcat
      自己安装Mysql
      自己安装Redis

    本地镜像发布到阿里云

      创建镜像两种方式:Dockerfile ,commit
      找脑图!

    ------------------------------------------------------------------------------

      

  • 相关阅读:
    Distinctive Image Features from ScaleInvariant
    Natural Language Toolkit
    Regression analysis
    泌尿系统 Excretory system
    file_get_contents preg_match php nameisboy
    wWAITING
    instructionset architecture Processor Architecture
    improve performance whilemaintaining the functionality of a simpler and more abstract model design of processor hardware
    cluster analysis in data mining
    Maximum Likelihood
  • 原文地址:https://www.cnblogs.com/Bkxk/p/9389458.html
Copyright © 2011-2022 走看看