Docker定製容器鏡像(利用Dockerfile文件)

1.建立Dockerfile文件html

新建一個目錄,在裏面新建一個dockerfile文件(新建一個的目錄,主要是爲了和以防和其它dockerfile混亂 )nginx

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

建立dockerfile文件(vim Dockerfile)docker

# 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 常見的命令組合。開頭帶#號的爲註釋vim

文件解釋:
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 建立鏡像centos

使用docker build命令來建立鏡像ssh

[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 文件所在目錄。socket

3.查看鏡像列表,並建立容器tcp

[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.htmlui

相關文章
相關標籤/搜索