1. 程式人生 > >Docker映象的修改和自定義(五)

Docker映象的修改和自定義(五)

一、docker映象的更新

(1)啟動映象,寫入一些檔案或者更新軟體

docker run -it 3afd47092a0e
[[email protected] /]# ls

(2)更新映象

docker commit -m="test update" -a="wangsir" 44652ba46352 wangsir/centos-test:7.4.1708
sha256:7853e6064af8b218bbfb44cc2421dffbba0eeace561392eaea995d4cf8b0f301

引數解釋:

  • -m:提交的描述資訊

  • -a:指定映象作者

  • 44652ba46352:容器ID

  • wangsir/centos-test:7.4.1708:

    指定要建立的目標映象名

(3)檢視更新是否成功

docker images

二、修改映象標籤tag

docker tag 7853e6064af8 wangsir/centos-test:7.4.1708

三、自定義製作docker映象

1、docker build從映象源製作映象

(1)選擇目錄建立一個Dockerfile,編輯映象配置檔案

vi Dockerfile

FROM    centos:6.7
MAINTAINER      Fisher "[email protected]"

RUN     /bin/echo 'root:rootpswd' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'wangsir:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

引數解釋:

FROM--基於哪個映象

RUN--安裝軟體用

MAINTAINER--映象建立者

CMD--container啟動時執行的命令,但是一個Dockerfile中只能有一條CMD命令,多條則只執行最後一條CMD

[注意]:當docker run command的命令匹配到CMD command時,會替換CMD執行的命令

ENTRYPOINT--container啟動時執行的命令,但是一個Dockerfile中只能有一條ENTRYPOINT命令,如果多條,則只執行最後一條,ENTRYPOINT沒有CMD的可替換特性

USER--使用哪個使用者跑container

EXPOSE--container內部服務開啟的埠。主機上要用還得在啟動container時,做host-container的埠對映:

docker run -d -p 127.0.0.1:33301:22 centos-img
container ssh服務的22埠被對映到主機的33301埠

ENV--用來設定環境變數

ADD--將和Dockerfile同目錄的檔案拷貝到container的檔案系統對應的路徑<dest>,所有拷貝到container中的檔案和資料夾權

限為0755,uid和gid為0,ADD只有在build映象的時候執行一次,後面執行container的時候不會再重新載入了

VOLUME--可以將本地資料夾或者其他container的資料夾掛載到container中。

WORKDIR--切換目錄用,可以多次切換(相當於cd命令),對RUN,CMD,ENTRYPOINT生效

ONBUILD--ONBUILD指定的命令在構建映象時並不執行,而是在它的子映象中執行

(2)構建映象docker build -t [生成的映象名] [Dockerfile的相對路徑/絕對路徑]

docker build -t wangsir/centos:6.7 .

#執行錯誤

[1]docker run -it 9df5b75bdd28

/bin/sh: /usr/sbin/sshd: No such file or directory


2、febootstrap根據原始碼製作映象[febootstrap在centos7已更改為supermin,yum源無法安裝,需要先下載rpm包通過rpm安裝]

(1)下載rpm安裝febootstrap

rpm -ivh *.rpm

(2)獲取要製作映象的原始檔

febootstrap -i [要安裝的軟體] [生成映象名] [映象原始檔儲存位置] [獲取映象原始檔的遠端地址/本地路徑]

febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos6 /usr/local/MyDockerImage/centos6-image  http://mirrors.aliyun.com/centos/6/os/x86_64/

可以看到生成的資料夾centos6-image

(3)打包成tar包生成映象[類似於import匯入tar包映象]

tar -c . | docker import - centos6-img:6.5

docker images即可檢視到映象centos6-img:6.5

#錯誤

[1]febootstrap執行後顯示:
/bin/bash: /usr/local/MyDockerImage/centos6-image/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /bin/bash)
/bin/bash: /usr/local/MyDockerImage/centos6-image/lib64/libc.so.6: version `GLIBC_2.15' not found (required by /bin/bash)
rm: /usr/local/MyDockerImage/centos6-image/lib64/libc.so.6: version 'GLIBC_2.14' not found (required by rm)

3、

#錯誤

#參考部落格: