LOADING

Follow me

Docker基础(二)【zoues.com】
六月 10, 2017|DockerPaaS

Docker基础(二)【zoues.com】

Docker基础(二)【zoues.com】

一.创建镜像

  1.手工创建新镜像
     1、基于centos启动容器
         [root@vh01 ~]# docker run -it centos bash
      2、在容器中配置yum并安装网络管理工具
         [root@84ba9248ced0 /]# rm -f /etc/yum.repos.d/*
         [root@84ba9248ced0 /]# yum-config-manager –add ftp://192.168.4.254/rhel7.2
         [root@84ba9248ced0 /]# echo ‘gpgcheck=0’ >> /etc/yum.repos.d/192.168.4.254_rhel7.2.repo
         [root@84ba9248ced0 /]# yum install -y net-tools iproute
      3、将修改后的容器保存为镜像
         先按ctrl+p+q退出容器。84ba是容器ID,centos:net是新镜像名和tag
         [root@vh01 ~]#  docker commit 84ba centos:net
      4、查看镜像
         [root@vh01 ~]# docker images
         [root@vh01 ~]# history cb35  # cb35是新镜像的ID
      5、通过新镜像生成容器
         [root@vh01 ~]# docker run -it centos:net bash
         [root@4cdad189417a /]# yum install -y vim-enhanced

  2.通过Dockerfile创建镜像
         1、最基础实现
           1、创建工作目录
            [root@vh01 ~]# mkdir -p /tmp/docker/simple
            [root@vh01 ~]# cd /tmp/docker/simple
         2、制作Dockerfile
            [root@vh01 simple]# vim Dockerfile
              FROM centos:latest          # 指定基础镜像
              ENTRYPOINT [“/bin/echo”]   
         3、生成镜像
              [root@vh01 simple]# docker build .
          4、查看镜像
             [root@vh01 simple]# docker images   查看所有的镜像
                   查看centos:latest镜像层次
            [root@vh01 simple]# docker history  centos:latest
             查看新镜像层次
             [root@vh01 simple]# docker history 17df
         5、创建容器
           [root@vh01 simple]# docker run 17df hello world
            hello world

      2、使用CMD
            通过ENTRYPOINT可以指定容器启动时执行的命令,但是只能运行ENTRYPOINT指定的命令,如果需要指定命令,可以使用CMD来构建镜像
           1、新建工作目录
            [root@vh01 simple]# mkdir /tmp/docker/simple2
             [root@vh01 simple]# cd /tmp/docker/simple2
           2、编写Docerfile
             [root@vh01 simple2]# vim Dockerfile
             FROM centos:latest
             CMD [“/bin/echo”, “Hello World”]
           3、生成镜像
             [root@vh01 simple2]# docker build .
           4、启动容器
             直接启动容器,将运行CMD指定的命令
             [root@vh01 simple2]# docker run 528f
            指定运行bash程序,覆盖CMD指定的命令
            [root@vh01 simple2]# docker run -it 528f bash
  3、使用RUN
           基于原始镜像执行相关命令,执行命令的结果在新镜像中生效
         1、新建工作目录
            [root@vh01 simple]# mkdir /tmp/docker/simple3
            [root@vh01 simple]# cd /tmp/docker/simple3
          2、编写Docerfile
             FROM centos:latest
             RUN rm -f /etc/yum.repos.d/*.repo
             RUN yum-config-manager –add ftp://192.168.4.254/rhel7.2
              RUN echo ‘gpgcheck=0’ >> /etc/yum.repos.d/192.168.4.254_rhel7.2.repo
             RUN yum install -y net-tools
             CMD [“/bin/echo”, “Hello World”]
          3、生成镜像
             [root@vh01 simple3]# docker build  .
          4、运行容器
            [root@vh01 simple3]# docker run 8b86
            [root@vh01 simple3]# docker run 8b86 ifconfig

 4、使用EXPOSE
        EXPOSE用于开放端口
         1、新建工作目录
          [root@vh01 simple]# mkdir /tmp/docker/simple4
          [root@vh01 simple]# cd /tmp/docker/simple4
         2、编写Docerfile
          [root@vh01 simple4]# vim Dockerfile
           FROM centos:latest
          RUN rm -f /etc/yum.repos.d/*.repo
           RUN yum-config-manager –add ftp://192.168.4.254/rhel7.2
           RUN echo ‘gpgcheck=0’ >> /etc/yum.repos./192.16

8.4.254_rhel7.2.repo
           RUN yum install -y net-tools httpd
           EXPOSE 80
           CMD [“/usr/sbin/httpd”, “-DFOREGROUND”]
          3、生成镜像
             [root@vh01 simple4]# docker build .
           4、运行容器
            [root@vh01 simple4]# docker run -d -p 8080:80 d7171c700983
           5、访问httpd
           在物理主机上访问容器服务 firefox http://192.168.4.1:8080 &
             192.168.4.1是安装容器的宿主机

  5、使用add
         1、新建工作目录
           [root@vh01 simple]# mkdir /tmp/docker/simple5
           [root@vh01 simple]# cd /tmp/docker/simple5
          2、编写Docerfile
            [root@vh01 simple4]# vim Dockerfile
            FROM centos:latest
           RUN rm -f /etc/yum.repos.d/*.repo
            RUN yum-config-manager –add ftp://192.168.4.254/rhel7.2
            RUN echo ‘gpgcheck=0’ >> /etc/yum.repos.d/192.168.4.254_rhel7.2.repo
            RUN yum install -y net-tools httpd
            ADD index.html /var/www/html/index.html
            EXPOSE 80
            CMD [“/usr/sbin/httpd”, “-DFOREGROUND”]
           3、生成镜像
             [root@vh01 simple5]# echo ‘docker httpd web site test’ > index.html
             [root@vh01 simple4]# docker build .
           4、运行容器
            [root@vh01 simple5]# docker run -p 8081:80 -d 5b4270b95dbf
           5、访问httpd
             在物理主机上访问容器服务 firefox http://192.168.4.1:8081 &
                192.168.4.1是安装容器的宿主机


二.镜像优化:
            1、每个容器只运行一个进程
            2、不要假定容器能够久远保持启动状态
            3、使用.dockerignore文件将不需析文件进行排除。
            4、不要完全自己制作镜像,应该使用官方提供的镜像
            5、尽量减少镜像的层数。如不要运行多个RUN,而是将多个命令放到一个RUN中执行

三.私有仓库
            1、实现私有仓库的方法是使用registry镜像
            2、清理所有的容器
            [root@vh01 simple]# docker rm $(docker ps -aq)
            3、清理镜像
            [root@vh01 simple]# docker rmi 23be79a4dd13 5b4270b95dbf
            4、导入registry镜像
            [root@vh01 simple]# docker load < /opt/docker/docker_images/registry.tar
            [root@vh01 simple]# docker tag  c9bd19d022f6 registry:v2
            5、测试registry镜像
            [root@vh01 simple]# docker run -d -p 5000:5000 registry:v2
            [root@vh01 simple]# curl -i http://localhost:5000
            6、修改docker.service
            [root@vh01 simple]# vim /usr/lib/systemd/system/docker.service
            ExecStart=/usr/bin/dockerd –insecure-registry=192.168.4.1:5000
            7、重启docker服务
            [root@vh01 simple]# systemctl daemon-reload
            [root@vh01 simple]# systemctl restart docker.service
            8、启动docker registry容器
            [root@vh01 simple]# docker run -id -p 5000:5000 registry:v2
            9、修改镜像名,镜像名必须包含仓库名,才能把镜像上传到私有仓库
            [root@vh01 simple]# docker tag centos 192.168.4.1:5000/centos
     10、上传镜像
       [root@vh01 simple]# docker push 192.168.4.1:5000/centos
     11、测试
    (1)创建另一台虚拟机,安装docker
     2)修改docker.service
       [root@vh01 simple]# vim /usr/lib/systemd/system/docker.service
         ExecStart=/usr/bin/dockerd –insecure-registry=192.168.4.1:5000
      3)重启docer服务
        [root@vh02 ~]# systemctl daemon-reload
        [root@vh02 ~]# systemctl start docker.service
        sys[root@vh02 ~]# systemctl enable docker.service
      4)下载镜像
        [root@vh02 ~]# docker pull 192.168.4.1:5000/centos

四.存储数据

  一.使用卷实现永久存储

    1、准备宿主机目录
     [root@vh01 docker]# mkdir /webroot
     [root@vh01 docker]# echo ‘hello world’ > /webroot/index.html
    2、启动容器,并挂载卷
     [root@vh01 docker]# docker run -v /webroot/:/data -it centos bash
     [root@214cabf0eb60 /]# cat data/index.html
     [root@214cabf0eb60 /]# echo ‘new data’ > /data/mytest.txt
     [root@vh01 docker]# ls /webroot/
    3、练习
    基于centos生成新镜像,新镜像运行后,自动启动httpd。web主页位于宿主机的/webroot
    [root@vh01 simple7]# vim Dockerfile
    FROM centos:latest
    RUN rm -f /etc/yum.repos.d/*.repo && yum-config-manager –add ftp://192.168.4.254/rhel7.2 && echo ‘gpgcheck=0’ >> /etc/yum.repos.d/192.168.4.254_rhel7.2.repo && yum install -y net-tools httpd
    EXPOSE 80
    CMD [“/usr/sbin/httpd”, “-DFOREGROUND”]
    [root@vh01 simple7]# docker build -t 192.168.4.1:5000/centos:httpd .
    [root@vh01 simple7]# docker push 192.168.4.1:5000/centos:httpd
    [root@vh02 ~]# mkdir /webroot
    [root@vh02 ~]# echo ‘httpd web site test’ > /webroot/index.html
    [root@vh02 ~]# docker run -d -v /webroot/:/var/www/html/ -p 8080:80 192.168.4.1:5000/centos:httpd
    [root@room9pc16 ~]# firefox http://192.168.4.2:8080 &

二.创建共享存储

    1、配置vh02为NFS服务器
    [root@vh02 ~]# yum install -y nfs-utils
    [root@vh02 ~]# mkdir -m 777 -p /nfsshare/vh01
    [root@vh02 ~]# vim /etc/exports
    /nfsshare/vh01  192.168.4.*(rw,sync)
    [root@vh02 ~]# systemctl enable nfs-server.service
    [root@vh02 ~]# systemctl start nfs-server
    [root@vh02 ~]# systemctl start nfs
    2、配置vh01为NFS客户端
    [root@vh01 simple7]# yum install -y nfs-utils
    [root@vh01 simple7]# systemctl start nfs
    [root@vh01 simple7]# mkdir /docker_vol
    [root@vh01 simple7]# mount 192.168.4.2:/nfsshare/vh01 /docker_vol/
    [root@vh01 simple7]# cp -r /webroot/ /docker_vol/
    [root@vh01 simple7]# docker run -d -v /docker_vol/webroot/:/var/www/html -p 8088:80 192.168.4.1:5000/centos:httpd 

五.docker网络

    1.容器间通信

        1、启动一个名字为web1的容器
        [root@vh01 simple7]# docker run -itd –name web1 centos
        2、启动一个字字为lb的容器,与web1关联
        [root@vh01 simple7]# docker run –link web1:web1 –name lb -it centos
        [root@e4929b02e94c /]# ping web1
        [root@e4929b02e94c /]# cat /etc/hosts

 

   2.跨主机通信

        1、将vh02的docker0 ip地址改为172.18.0.1/16
        [root@vh02 ~]# vim /usr/lib/systemd/system/docker.service
        ExecStart=/usr/bin/dockerd –insecure-registry=192.168.4.1:5000 –bip=17
        2.18.0.1/16
        [root@vh02 ~]# systemctl daemon-reload
        [root@vh02 ~]# systemctl restart docker.service
        [root@vh02 ~]# ifconfig docker0
        2、在两台宿主机上配置静态路由
        [root@vh01 simple7]# route add -net 172.18.0.0 netmask 255.255.0.0 gw 192.168.4.2
        [root@vh02 ~]# route add -net 172.17.0.0 netmask 255.255.0.0 gw 192.168.4.1
        3、在两台宿主机上启动容器测试网络连通性
        [root@vh02 ~]# docker run -it 192.168.4.1:5000/centos bash
        [root@vh01 ~]# docker run -it centos bash
        [root@vh02 ~]# docker run -it 192.168.4.1:5000/centos bash
        [root@1b3aa8ff4602 /]# ping 172.18.0.2

no comments
Share

发表评论