docker容器自定義映象的兩種方法
目錄
1.使用docker commit
使用映象啟動容器,在該容器上修改,在使用命令另存為一個映象
實現思路:使用一個基礎的映象,這個映象可以在centos的官網進行下載,在使用docker進行建立
一個容器,進入到該容器中,刪除原有的yum源,自己從宿主機上分享一個yum源,實現自己的yum
源倉庫,這個則作為自己的基礎映象,在用docker commit命令進行映象儲存。
[[email protected] ~]# docker run -it centos bash -------用docker映象執行容器
ba591c357232c64c835cf4bfa964001d1b98a853a806a46a422b1dd11136d232
[
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba591c357232 centos "bash" 9 seconds ago Up 6 seconds small_newton
[
[[email protected]ba591c357232 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo
[[email protected] yum.repos.d]# rm -rf *
[[email protected]
[local_source]
name=CentOS Source
baseurl=ftp://192.168.6.254/centos7
enabled=1
gpgcheck=0
[[email protected] yum.repos.d]# yum install net-tools psmisc lftp iproute ---用搭建的yum源安裝包
[[email protected] yum.repos.d]# exit
[[email protected] ~]# docker commit ba591c357232 myos:zhy -------------將以上的容器自定義為映象
sha256:7c9ea4abc39813f60abf2970939ce9d810795960b0cca51f71fa9b1b449c7463
[[email protected] ~]# docker images -----------檢視映象
REPOSITORY TAG IMAGE ID CREATED SIZE
myos zhy 7c9ea4abc398 7 seconds ago 262.7 MB
[[email protected] ~]# docker run -it myos:zhy --------用自己定義的映象建立容器
2.Dockerfile檔案建立映象
Dockerfile語法格式
– FROM:基礎映象
– MAINTAINER:映象建立者資訊
– EXPOSE:開放的埠
– ENV:設定變數
– ADD:複製檔案到映象
– RUN:製作映象時執行的命令,可以有多個
– WORKDIR:定義容器預設工作目錄
– CMD:容器啟動時執行的命令,僅可以有一條CMD
使用Dockerfile工作流程
– mkdir build; cd build
– vim Dockerfile
– docker build -t imagename Dockerfile
Dockerfile檔案案例
[[email protected] ~# cat Dockerfile
FROM centos
MAINTAINER zhu [email protected]
ENV NAME=zhu
ENV environment=test
WORKDIR /var/www/html
ADD test.sh /root/test.sh
RUN mkdir /dockerfile
RUN echo "test" > /dockerfile/file.txt
RUN yum -y install httpd
RUN echo "test" > /var/www/html/index.html
EXPORSE 80
CMD [“httpd", "-DFOREGROUND"]特別強調一個Dockerfile檔案只放在一個資料夾裡面
舉例說明:
[[email protected] ~]# mkdir zhy ---建立目錄
[[email protected] ~]# cd zhy/ -----進入到目錄下
[[email protected] zhy]# vim Dockerfile -----編輯Dockerfile 檔案
[[email protected] zhy]# cp /etc/yum.repos.d/local.repo local.repo -----複製本地的yum源到存放Dockerfile 檔案的目錄下
[[email protected] zhy]# ls
Dockerfile local.repo
[[email protected] zhy]# cat Dockerfile
FROM centos:latest -----使用的基礎映象
RUN rm -f /etc/yum.repos.d/* ---在容器下執行
ADD local.repo /etc/yum.repos.d/local.repo ---把宿主機上的檔案加到docker容器裡
RUN yum install -y net-tools psmisc lftp iproute vim ------在容器下執行安裝軟體
[[email protected] zhy]# cat local.repo
[[email protected] zhy]# docker build -t centos:latest . ------用Dockerfile檔案編寫映象,所用的基礎映象是centos標籤是latest
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM centos:latest
---> e934aafc2206
Step 2 : RUN rm -f /etc/yum.repos.d/*
---> Using cache
---> b255db59aa67
Step 3 : ADD local.repo /etc/yum.repos.d/local.repo
---> eb695975254e
Removing intermediate container a2f3e8b07221
Step 4 : RUN yum -y install net-tools vim-enhanced bridge-utils psmisc vim
---> Running in f7206f86d9bd
[[email protected] xx]# docker run -it centos:latest -----執行自定義的映象
[[email protected] zhy]# docker ps -a -----檢視正在執行的映象
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
079b4af29c58 2c428750fbd0 "/bin/sh -c 'yum -y i" 5 minutes ago Exited (1) 5 minutes
[[email protected] zhy]# docker images ------檢視docker的映象
REPOSITORY TAG IMAGE ID CREATED SIZE
testos latest 94a37eb84943 3 minutes ago 310.8 MB
[[email protected] zhy]# docker run -it testos:latest ----執行映象
[[email protected] /]# ifconfig
[[email protected] zhy]# docker ps -a ---檢視所有都容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d010ff955f61 testos:latest "/bin/bash" 30 minutes ago Exited (1) 23 minute
[[email protected] zhy]# docker start d010ff955f61 ----開啟容器
d010ff955f61
[[email protected] zhy]# docker exec -it d010ff955f61 bash ----連線容器
/usr/lib/systemd/system
檢視相應的服務
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
封裝ssh服務
[[email protected] ~]# cd xx
[[email protected] xx]# touch Dockerfile
[[email protected] xx]# vim Dockerfile
FROM myos
RUN yum -y install openssh-server
RUN echo 11 | passwd --stdin root
RUN sshd-keygen
ENV EnvironmentFile=/etc/sysconfig/sshd
CMD ["/usr/sbin/sshd","-D"]
[[email protected] xx]# docker build -t myos:sshd .
[[email protected] xx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myos sshd 3b868468ddfa 14 seconds ago 333.7 MB
[[email protected] xx]# docker run -d myos:sshd
[[email protected] xx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
925120d586c2 myos:sshd "/usr/sbin/sshd -D" 13 seconds ago Up 10 seconds
[[email protected] xx]# docker exec -it 925120d586c2 bash
[[email protected] /]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 0.0.0.0
驗證
[[email protected] ~]# ssh 172.17.0.3
封裝http服務
[[email protected] ~]# mkdir http
[[email protected] ~]# cd http/
[[email protected] http]# docker images
myos latest 74c525b875f4 About an hour ago 310.7 MB
[[email protected] http]# touch Dockerfile
[[email protected] http]# ls
Dockerfile
[[email protected] http]# vim Dockerfile
FROM myos
RUN yum -y install httpd
RUN echo "hello ssss" > /usr/share/httpd/noindex/index.html
ENV EnvironmentFile=/etc/sysconfig/httpd
EXPORSE 80
CMD ["/usr/sbin/httpd","-DFOREGROUND"]
[[email protected] http]# docker build -t myos:httpd1 .
驗證:
[[email protected] http]# docker run -d myos:httpd1
ebef295b84d13259b876f68123ac694a61892c4c89e64e2170371c1527ec7243
[[email protected] http]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ebef295b84d1 myos:httpd1 "/usr/sbin/httpd -DFO" 10 seconds ago Up 7 seconds tiny_swirles
[[email protected] http]# docker exec -it ebef295b84d bash
[[email protected] /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.4 netmask 255.255.0.0 broadcast 0.0.0.0
[[email protected] ~]# curl http://172.17.0.4
hello ssss