Docker鏡像的修改和自定義

1、docker鏡像的更新docker

(1)啓動鏡像,寫入一些文件或者更新軟件bootstrap

docker run -it 3afd47092a0e
[root@44652ba46352 /]# lsvim

(2)更新鏡像centos

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

參數解釋:ssh

-m:提交的描述信息ui

-a:指定鏡像做者centos7

44652ba46352:容器IDserver

wangsir/centos-test:7.4.1708:指定要建立的目標鏡像名ip

(3)查看更新是否成功

docker images

 

2、修改鏡像標籤tag

docker tag 7853e6064af8 wangsir/centos-test:7.4.1708

3、自定義製做docker鏡像

一、docker build從鏡像源製做鏡像

(1)選擇目錄建立一個Dockerfile,編輯鏡像配置文件

vi Dockerfile

FROM centos:6.7
MAINTAINER Fisher "wangsir@sudops.com"

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

 

二、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)

相關文章
相關標籤/搜索