新聞中心
如果曾經(jīng)做過 VM 管理員,則可以把 Docker 鏡像理解為 VM 模板,VM 模板就像停止運(yùn)行的 VM,而 Docker 鏡像就像停止運(yùn)行的容器;而作為一名研發(fā)人員,則可以將鏡像理解為類(Class),下面為大家詳細(xì)講解一下Docker鏡像的制作方法。

創(chuàng)新互聯(lián)建站成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元梨林做網(wǎng)站,已為上家服務(wù),為梨林各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
Docker Image 的制作兩種方法
方法 1:docker commit #保存 container 的當(dāng)前狀態(tài)到 image 后,然后生成對(duì)應(yīng)的 image
方法 2:docker build #使用 Dockerfile 文件自動(dòng)化制作 image
方法一:docker commit
創(chuàng)建一個(gè)安裝好 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
根據(jù)容器當(dāng)前狀態(tài)做一個(gè) image 鏡像:創(chuàng)建一個(gè)安裝了 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
使用新創(chuàng)建的 centos:apache 鏡像,生成一個(gè)容器實(shí)例
[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 鏡像的容器創(chuàng)建成功
方法二:通過:docker build 創(chuàng)建一個(gè)基于 centos 的 httpd web 服務(wù)器鏡像
使用 docker build 創(chuàng)建鏡像時(shí),需要使用 Dockerfile 文件自動(dòng)化制作 image 鏡像 Dockerfile 有點(diǎn)像源碼編譯時(shí)./configure 后產(chǎn)生的 Makefile
1、創(chuàng)建工作目錄
[root@Docker ~]# mkdir /docker-build
[root@Docker ~]# cd /docker-build
[root@Docker docker-build]# touch Dockerfile
[root@Docker docker-build]# ls
Dockerfile
注: make 自動(dòng)化編譯時(shí)需要 Makefile 文件,自動(dòng)化創(chuàng)建 docker 鏡像時(shí),需要 Dockerfile
2、編輯 Dockerfile
Dockerfile 用來創(chuàng)建一個(gè)自定義的 image,包含了用戶挃定的軟件依賴等。
[root@Docker docker-build ]# vim Dockerfile
FROM centos:latest
MAINTAINER
RUN 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 基于哪個(gè)鏡像
MAINTAINER # MAINTAINER 鏡像創(chuàng)建者
RUN yum -y install httpd #RUN 安裝軟件用
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
# ADD 將文件拷貝到新產(chǎn)生的鏡像的文件系統(tǒng)對(duì)應(yīng)的路徑。所有拷貝到新鏡像中的
文件和文件夾權(quán)限為 0755,uid 和 gid 為 0
CMD echo hello world #container 啟動(dòng)時(shí)執(zhí)行的命令或啟動(dòng)服務(wù),但是一個(gè) Dockerfile 中只能有一條 CMD 命令,有多條則另執(zhí)行最后一條 CMD
3、創(chuàng)建 start.sh 腳本啟動(dòng) httpd 服務(wù)和 apache 默認(rèn)首頁 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 相當(dāng)于執(zhí)行了 systemctl start httpd
[root@Docker docker-build ]# chmod a+x start.sh
創(chuàng)建 index.html
[root@Docker docker-build ]# echo "docker image build test from jaking" > index.html
4、使用命令 build 來創(chuàng)建新的 image
語法:docker build -t 父鏡像名:鏡像的 tag Dockerfile 文件所在路徑 -t :表示 tag,鏡像名
例:使用命令 docker build 來創(chuàng)建新的 image,并命名為 centos:httpd
[root@Docker docker-build]# ls
Dockerfile index.html start.sh
[root@Docker docker-build]# docker build -t centos:httpd ./
# 注: ./ 表示當(dāng)前目錄,另外你的當(dāng)前目錄下要包含 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 鏡像=應(yīng)用/程序+庫
運(yùn)行新生成的鏡像
[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]#
當(dāng)前題目:Docker鏡像制作的兩種方法
標(biāo)題網(wǎng)址:http://m.fisionsoft.com.cn/article/cdjeepc.html


咨詢
建站咨詢
