• Docker定制容器镜像(利用Dockerfile文件)


    1.创建Dockerfile文件

    新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 )

    [root@docker01 myfiles]# mkdir centos6.8_dockerfile
    [root@docker01 myfiles]# 
    [root@docker01 myfiles]# cd centos6.8_dockerfile/

    创建dockerfile文件(vim Dockerfile)

    # The dockerfile has Change add sshd services on Centos7.0
    #centos7:latest image
    FROM centos:6.8
    
    
    MAINTAINER xxx,http://www.cnblogs.com/xxx
    
    #Install sshd net-tools
    RUN yum install openssh-server net-tools -y
    RUN mkdir /var/run/sshd
    
    #Set password for root
    RUN echo 'root:xxxxxxx' | chpasswd
    RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
    
    #Set history record
    ENV HISTTIMEFORMAT "%F %T "
    
    #Fix sshd service:Read from socket failed: Connection reset by peer?
    RUN ssh-keygen -A
    
    #Change timezone CST
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    #Open 22 port
    EXPOSE 22
    
    #Auto running sshd service
    CMD ["/usr/sbin/sshd","-D"]

    上述文件内容就是一个dockerfile 常见的命令组合。开头带#号的为注释

    文件解释:
    FROM: 必不可少的命令,从某个镜像作为基。如 FROM <image_name> ,或者 FROM <image_name>:<tag>. 如果不加tag,默认为latest。先从本地镜像仓库去搜索基镜像,如过本地没有,在去网上docker registry去寻找。
    MAINTAINER:标明该Dockerfile作者及联系方式,可忽略不写
    RUN:建立新的镜像时,可以执行在系统里的命令,如安装特定的软件以及设置环境变量。
    ENV:设置系统环境变量(注意:写在/etc/profile里的命令在dockerfile这里会不生效,所以为改成ENV的方式)
    EXPOSE:开放容器内的端口,但不和宿主机进行映射。方便在宿主机上进行开发测试。(如需映射到宿主机端口,可在运行容器时使用 -p host_port:container_port)
    CMD:设置执行的命令,经常用于容器启动时指定的某个操作。如执行自定义脚本服务,或者是执行系统命令。CMD 只能存在一条,如在Dockerfile中有多条CMD的话,只有最后一条CMD生效!

    2.执行build 创建镜像

    使用docker build命令来创建镜像

    [root@docker01 centos6.8_dockerfile]# docker build -t centos_ssh_1_6.8 .
    Sending build context to Docker daemon 15.36 kB
    Step 1/10 : FROM centos:6.8
     ---> 0cd976dc0a98
    Step 2/10 : MAINTAINER xxx,http://www.cnblogs.com/xxx
     ---> Using cache
     ---> 025bdf5382de
    Step 3/10 : RUN yum install openssh-server net-tools -y
     ---> Using cache
     ---> f970cedf0dc6
    Step 4/10 : RUN mkdir /var/run/sshd
     ---> Using cache
     ---> 620754832e8c
    Step 5/10 : RUN echo 'root:xxxxxxx' | chpasswd
     ---> Using cache
     ---> 8bcd6f4ae32b
    Step 6/10 : RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
     ---> Using cache
     ---> b46214833685
    Step 7/10 : ENV HISTTIMEFORMAT "%F %T "
     ---> Using cache
     ---> c18c2102a92e
    Step 8/10 : RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
     ---> Running in 77698b6cfce0
     ---> 0e755b7f8c4a
    Removing intermediate container 77698b6cfce0
    Step 9/10 : EXPOSE 22
     ---> Running in 29ab858378f7
     ---> 3c8c969057c4
    Removing intermediate container 29ab858378f7
    Step 10/10 : CMD /usr/sbin/sshd -D
     ---> Running in 8ebd12375b64
     ---> ff004247b678
    Removing intermediate container 8ebd12375b64
    Successfully built ff004247b678
    [root@docker01 centos6.8_dockerfile]#

    -t 选项来docker build新的镜像以便于标记构建的镜像,. 表示当前目录,也可以指定dockerfile 文件所在目录。

    3.查看镜像列表,并创建容器

    [root@docker01 centos6.8_dockerfile]# docker images
    REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
    centos_ssh_1_6.8               latest              ff004247b678        About a minute ago   291 MB
    nginx_diy                      latest              e24d0b283207        About an hour ago    109 MB
    nginx                          latest              34678a414b84        About an hour ago    109 MB
    docker01.lo:5000/nginx         latest              958a7ae9e569        3 weeks ago          109 MB
    nginx                          <none>              958a7ae9e569        3 weeks ago          109 MB
    registry                       latest              9d0c4eabab4d        6 weeks ago          33.2 MB
    swarm                          latest              36b1e23becab        5 months ago         15.9 MB
    centos                         6.8                 0cd976dc0a98        9 months ago         195 MB

    4.创建和查看容器

    [root@docker01 centos6.8_dockerfile]# docker run -d -it --name mycentos centos_ssh_1_6.8
    813171a387c2cc2a2c91ce96815e300c70bf1d42b6bd9e5c83f2d4608a2a2e6b
    [root@docker01 centos6.8_dockerfile]# docker exec mycentos hostname -I
    172.17.0.3 
    [root@docker01 centos6.8_dockerfile]# ssh root@172.17.0.3 date
    Read from socket failed: Connection reset by peer
    [root@docker01 centos6.8_dockerfile]# docker exec mycentos netstat -ntpl
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1/sshd              
    tcp        0      0 :::22                       :::*                        LISTEN      1/sshd  

    原文链接:http://www.cnblogs.com/hanyifeng/p/6116067.html

  • 相关阅读:
    C博客作业00—我的第一篇博客
    C语言博客作业03函数
    C语言博客作业05指针
    快速分页:jsp标签pagertaglib
    JSP与Servlet的编解码
    初探Hibernate3源码读取配置文件
    截取图片的某个部分(C#源代码)
    使用MATLAB获取视频中每一帧的图像
    Windows下较为精确的计时方法
    [转]向Windows Phone 7手机部署应用程序
  • 原文地址:https://www.cnblogs.com/vijayfly/p/7071217.html
Copyright © 2020-2023  润新知