Docker:dockerfile自動構建鏡像 [六]

1、手動docker鏡像的缺點

相對於手動製做的docker鏡像,使用dockerfile構建的鏡像有如下優勢:docker


一、dockerfile只有幾kb,便於傳輸centos

二、使用dockerfile構建出來的鏡像,在運行容器的時候,不用指定容器的初始命令bash

三、支持更多的自定義操做ssh

2、dockerfile經常使用指令

一、dockerfile經常使用指令:

FROM 這個鏡像的媽媽是誰?(指定基礎鏡像)
MAINTAINER 告訴別人,誰負責養它?(指定維護者信息,能夠沒有)
RUN 你想讓它幹啥(在命令前面加上RUN便可)
ADD 給它點創業資金(COPY文件,會自動解壓)
WORKDIR 我是cd,今天剛化了妝(設置當前工做目錄)
VOLUME 給它一個存放行李的地方(設置卷,掛載主機目錄)
EXPOSE 它要打開的門是啥(指定對外的端口)(-P 隨機端口)
CMD 奔跑吧,兄弟!(指定容器啓動後的要乾的事情)(容易被替換)

二、dockerfile其餘指令:

COPY 複製文件
ENV 環境變量
ENTRYPOINT 容器啓動後執行的命令(沒法被替換,啓容器的時候指定的命令,會被當成參數

3、dockerfile實戰1

一、手動製做docker鏡像步驟:

1:啓動容器安裝軟件服務tcp

docker run -it -p 1022:22 --name luoahong centos:6.9 
######
yum install openssh-server -y
/etc/init.d/sshd start
echo 123456|passwd --stdin root 
######

2:將安裝好服務的容器commit提交爲鏡像測試

docker commit luoahong centos6-ssh:v1

3: 啓動新容器來測試新提交的鏡像ui

docker run -d -p 2022:22 centos6-ssh:v1 /usr/sbin/sshd -D


二、dockerfile製做docker鏡像步驟:

1:編寫dockerfileserver

[root@luoahong centos6_ssh]# pwd
/opt/dockerfile/centos6_ssh
[root@luoahong centos6_ssh]# ll
total 4
-rw-r--r-- 1 root root 159 Jan 15 18:42 dockerfile
[root@luoahong centos6_ssh]# cat dockerfile
FROM  centos:6.9
RUN     yum install openssh-server -y
RUN     /etc/init.d/sshd start
RUN     echo 123456|passwd --stdin root
CMD     ["/usr/sbin/sshd","-D"]

2:docker build構建鏡像blog

[root@luoahong centos6_ssh]# docker build -t centos6-ssh:v2 .

3: 啓動新容器來測試新構建的鏡像ci

[root@luoahong centos6_ssh]# docker run -d -p 1322:22 centos6-ssh:v2
dc6ed1878218e7f13ac753cd5eec290eca1b1c06a1c4da6125b37e4d4f849c97
[root@luoahong centos6_ssh]# docker ps -a
CONTAINER ID        IMAGE                  COMMAND                CREATED             STATUS                         PORTS     NAMES
dc6ed1878218        centos6-ssh:v2         "/usr/sbin/sshd -D"    5 seconds ago       Up 4 seconds                   0.0.0.0:1322->22/tcp     cranky_colden
ea82b9583081        centos6-ssh-httpd:v1   "/bin/bash /init.sh"   About an hour ago   Up About an hour               0.0.0.0:1122->22/tcp, 0.0.0.0:8080->80/tcp   stupefied_rosalind
0d09d3a1591a        centos:6.9             "/bin/bash"            About an hour ago   Exited (0) About an hour ago     luoahong
156d80283acf        centos6-ssh:v1         "/usr/sbin/sshd -D"    About an hour ago   Up About an hour               0.0.0.0:2022->22/tcp     romantic_chandrasekhar
0485b9ecd1ad        centos:6.9             "/bin/bash"            2 hours ago         Exited (0) About an hour ago     luoahong4

四、測試

[root@luoahong ~]# ssh root@192.168.228.134 -p 1322
The authenticity of host '[192.168.228.134]:1322 ([192.168.228.134]:1322)' can't be established.
RSA key fingerprint is SHA256:F6zybEUDFDsU7O33NYhVZrwhSkANZvKhSEXDwc6+lVY.
RSA key fingerprint is MD5:04:47:c1:09:1c:0f:46:48:1c:7c:7c:d7:22:71:54:7a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.228.134]:1322' (RSA) to the list of known hosts.
root@192.168.228.134's password:
[root@dc6ed1878218 ~]#

4、dockerfile實戰2

一、手動製做docker鏡像步驟:

1:啓動容器安裝軟件服務

docker run -it -p 1022:22 --name luoahong centos:6.9 
######
yum install openssh-server -y
/etc/init.d/sshd start
echo 123456|passwd --stdin root 
######

2:將安裝好服務的容器commit提交爲鏡像

docker commit luoahong centos6-ssh:v1

3: 啓動新容器來測試新提交的鏡像

docker run -d -p 2022:22 centos6-ssh:v1 /usr/sbin/sshd -D

二、dockerfile製做docker鏡像步驟:

1:編寫dockerfile

[root@luoahong centos6_ssh_http]# pwd
/opt/dockerfile/centos6_ssh_http
[root@luoahong centos6_ssh_http]# ll
total 8
-rw-r--r-- 1 root root 193 Jan 15 18:57 dockerfile
-rw-r--r-- 1 root root 54 Jan 15 19:02 init.sh
[root@luoahong centos6_ssh_http]# cat dockerfile
FROM centos:6.9
RUN yum install openssh-server httpd -y
RUN /etc/init.d/sshd start
RUN echo 123456|passwd --stdin root
ADD init.sh /init.sh
CMD [/bin/bash","/init.sh"]

編寫容器啓動腳本

[root@luoahong centos6_ssh_http]# cat init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D

2:docker build構建鏡像

[root@luoahong centos6_ssh_http]# docker build -t centos6-ssh-httpd:v2

3: 啓動新容器來測試新構建的鏡像

[root@luoahong centos6_ssh_http]# docker run -d -p 8080:80 -p 2122:22 centos6-ssh-httpd:v2
a5ff3069084c82a9b7b5030d4ee21e172fdedb2160b71ccbfb3e63b6cb979552
docker: Error response from daemon: driver failed programming external connectivity on endpoint xenodochial_swartz (78dc457d720cb6611f611b12690499acbe168aae92eb7913b23950e4d71ba860): Bind for 0.0.0.0:8080 failed: port is already allocated.
[root@luoahong centos6_ssh_http]# docker ps -a -l
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
a5ff3069084c        centos6-ssh-httpd:v2   "/bin/sh -c [/bin/ba鈥?   4 seconds ago       Created                                 xenodochial_swartz

四、測試

相關文章
相關標籤/搜索