Docker 映象製作方法

夢共裡醉發表於2021-01-27
本文件介紹 Docker 映象製作的兩種方法,使用的系統是  7
Docker Image 的製作兩種方法
方法 1:docker commit #儲存 container 的當前狀態到 image 後,然後生成對應的 image
方法 2:docker build #使用 Dockerfile 檔案自動化製作 image
方法一:docker commit

建立一個安裝好 apache 工具的容器映象

[root@Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              470671670cac        4 months ago        237MB
[root@Docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@Docker ~]# docker run -it centos:latest /bin/bash
[root@1b96e68a3cce /]#
[root@1b96e68a3cce /]# yum -y install httpd #在 container 中安裝 apache 軟體包
[root@1b96e68a3cce /]# exit

檢視 images 列表

[root@Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              470671670cac        4 months ago        237MB

根據容器當前狀態做一個 image 映象:建立一個安裝了 apache 工具的 centos 映象

語法: docker commit "container 的 ID" 或 "image_name"

檢視容器 ID

[root@Docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
1b96e68a3cce        centos:latest       "/bin/bash"              3 minutes ago       Exited (0) 2 minutes ago                          awesome_hypatia
607752360adf        centos:latest       "/bin/bash -c 'while…"   18 minutes ago      Exited (137) 12 minutes ago                       brave_fermi
0a297ff99af8        centos:latest       "/bin/bash"              22 minutes ago      Exited (1) 20 minutes ago                         ecstatic_yonath
efb4af688330        centos:latest       "/bin/bash"              24 minutes ago      Exited (0) 23 minutes ago                         epic_mcclintock
[root@Docker ~]# docker commit 1b96e68a3cce centos:apache
sha256:b8822ec8a7bbb325793e7908e355180be82a49481cff197661fb5d0da5872e88
[root@Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              apache              b8822ec8a7bb        9 seconds ago       280MB
centos              latest              470671670cac        4 months ago        237MB

使用新建立的 centos:apache 映象,生成一個容器例項

[root@Docker ~]# docker run -it centos:apache /bin/bash
[root@e4c295d27581 /]# rpm -qa httpd 
httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64

看到httpd軟體名稱說明基於 apache 映象的容器建立成功

方法二:透過:docker build 建立一個基於 centos 的 httpd web 伺服器映象

使用 docker build 建立映象時,需要使用 Dockerfile 檔案自動化製作 image 映象
Dockerfile 有點像原始碼編譯時./configure 後產生的 Makefile

1、建立工作目錄
[root@Docker ~]# mkdir /docker-build
[root@Docker ~]# cd /docker-build
[root@Docker docker-build]# touch Dockerfile
[root@Docker docker-build]# ls
Dockerfile
注: make 自動化編譯時需要 Makefile 檔案,自動化建立 docker 映象時,需要 Dockerfile
2、編輯 Dockerfile
Dockerfile 用來建立一個自定義的 image,包含了使用者挃定的軟體依賴等。
[root@Docker docker-build ]# vim Dockerfile
FROM centos:latest
MAINTAINERRUN yum -y install httpd
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
CMD echo hello world

註釋

FROM centos:latest # FROM 基於哪個映象
MAINTAINER# MAINTAINER 映象建立者
RUN yum -y install httpd #RUN 安裝軟體用
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
# ADD 將檔案複製到新產生的映象的檔案系統對應的路徑。所有複製到新映象中的
檔案和資料夾許可權為 0755,uid 和 gid 為 0
CMD echo hello world #container 啟動時執行的命令或啟動服務,但是一個 Dockerfile 中只能有一條 CMD 命令,有多條則另執行最後一條 CMD
3、建立 start.sh  啟動 httpd 服務和 apache 預設首頁 index.html 檔案
[root@Docker docker-build ]# echo "#!/bin/bash" >> start.sh
[root@Docker docker-build ]# echo "/usr/sbin/httpd -DFOREGROUND" >> start.sh
注:/usr/sbin/httpd -DFOREGROUND 相當於執行了 systemctl start httpd
[root@Docker docker-build ]# chmod a+x start.sh
建立 index.html
[root@Docker docker-build ]# echo "docker image build  test from jaking" > index.html
4、使用命令 build 來建立新的 image

語法:docker build -t 父映象名:映象的 tag Dockerfile 檔案所在路徑
-t :表示 tag,映象名

例:使用命令 docker build 來建立新的 image,並命名為 centos:httpd

[root@Docker docker-build]# ls
Dockerfile  index.html  start.sh
[root@Docker docker-build]# docker build -t centos:httpd ./
# 注: ./ 表示當前目錄,另外你的當前目錄下要包含 Dockerfile
Sending build context to Docker daemon  4.096kB
Step 1/5 : FROM centos:latest
 ---> 470671670cac
Step 2/5 : MAINTAINER---> Running in 0180810d2ab3
Removing intermediate container 0180810d2ab3
 ---> 5b9af0184bcf
Step 3/5 : RUN yum -y install httpd
 ---> Running in 8f5c114649ed
CentOS-8 - AppStream                            228 kB/s | 7.0 MB     00:31    
CentOS-8 - Base                                 547 kB/s | 2.2 MB     00:04    
CentOS-8 - Extras                               431  B/s | 5.9 kB     00:14    
Dependencies resolved.
================================================================================
 Package           Arch   Version                               Repo       Size
================================================================================
Installing:
 httpd             x86_64 2.4.37-16.module_el8.1.0+256+ae790463 AppStream 1.7 M
Installing dependencies:
 apr               x86_64 1.6.3-9.el8                           AppStream 125 k
 apr-util          x86_64 1.6.1-6.el8                           AppStream 105 k
 centos-logos-httpd
                   noarch 80.5-2.el8                            AppStream  24 k
 ...省略部分輸出資訊...                
Complete!
Removing intermediate container 8f5c114649ed
 ---> 040b5f229962
Step 4/5 : ADD start.sh /usr/local/bin/start.sh
 ---> 11a106005031
Step 5/5 : ADD index.html /var/www/html/index.html
 ---> 85b4a3657ced
Successfully built 85b4a3657ced
Successfully tagged centos:httpd

檢視 images 列表

[root@Docker docker-build]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              httpd               85b4a3657ced        45 seconds ago      280MB
centos              apache              b8822ec8a7bb        20 minutes ago      280MB
centos              latest              470671670cac        4 months ago        237MB
# 注:docker 映象=應用/程式+庫

執行新生成的映象

[root@Docker docker-build]# docker run -it centos:httpd /bin/bash 
[root@1188a43a4585 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@1188a43a4585 /]# rpm -qa httpd
httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64
[root@1188a43a4585 /]# exit
exit
[root@Docker docker-build]#
總結

以上就是 Docker 映象製作方法的介紹,希望能給大家帶來幫助。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2753625/,如需轉載,請註明出處,否則將追究法律責任。

相關文章