1. 程式人生 > >docker容器自定義映象的兩種方法

docker容器自定義映象的兩種方法

目錄

1.使用docker commit

使用映象啟動容器,在該容器上修改,在使用命令另存為一個映象

實現思路:使用一個基礎的映象,這個映象可以在centos的官網進行下載,在使用docker進行建立

一個容器,進入到該容器中,刪除原有的yum源,自己從宿主機上分享一個yum源,實現自己的yum

源倉庫,這個則作為自己的基礎映象,在用docker commit命令進行映象儲存。

[[email protected] ~]# docker run -it centos bash    -------用docker映象執行容器
ba591c357232c64c835cf4bfa964001d1b98a853a806a46a422b1dd11136d232
[

[email protected] ~]# docker ps                                ------檢視正在執行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ba591c357232        centos              "bash"              9 seconds ago       Up 6 seconds                            small_newton
[
[email protected]
/]# cd /etc/yum.repos.d/   
[[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]
yum.repos.d]# vi local.repo   ----搭建自己的yum源
[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