Docker定制容器镜像(利用Dockerfile文件)
Posted vijayfly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Docker定制容器镜像(利用Dockerfile文件)的主要内容,如果未能解决你的问题,请参考以下文章