【譯】從現有的容器里創建新的Docker鏡像


如果你修改了一個容器的內容,你可以使用docker commit命令將現有的容器狀態保存為一個鏡像。
下面的例子展示了如何修改一個基於oraclelinux:6.6的容器使得其能夠運行Apache HTTP服務器。停止容器后,mymod/httpd:v1將從中創建鏡像。
要從oraclelinux:6.6容器創建Apache服務器鏡像 :

  1. 在名為guest容器中 運行bash shell命令行中運行以下命令:
[root @ host~]#docker run -i -t --name guest oraclelinux:6.6 /bin/bash
[root @ guest~]#
  1. 如果您使用Web代理,請按照Oracle Linux管理員發行版7指南中的https://docs.oracle.com/cd/E52668_01/E54669/html/ol7-proxy-config.html中的說明編輯guest虛擬機上的yum配置。

  2. 安裝httpd包:

[root @ guest~]# yum install httpd
  1. 如果需要,在guest 虛擬機下/var/www/html目錄中放置需要顯示的Web內容 。

  2. 在主機上使用docker stop命令退出guest容器:

[root @ host~]#個docker stop guest
guest
  1. 使用您停止的容器的ID 創建tag是mymod/httpd的鏡像:
[root @ host~]#docker commit -m "ol6 + httpd" -a "A N Other" \
   `docker ps -l -q` mymod/httpd:v1
8594abec905e6374db51bed1bfb208804cfb60d96b285efb897db581a01676e9

使用-m和-a 選項來記錄鏡像及其作者。該命令返回新鏡像ID的完整版本號。
如果使用docker images命令,則新鏡像現在將顯示在列表中:

[root @ host~]# docker images
REPOSITORY    TAG         IMAGE ID       CREATED       VIRTUAL SIZE
mymod/httpd   v1          8594abec905e   2 minutes ago 938.5 MB
oraclelinux   6           9ac13076d2b5   5 days ago    319.4 MB
oraclelinux   6.6         9ac13076d2b5   5 days ago    319.4 MB
oraclelinux   latest      073ded22ac0f   5 days ago    265.2 MB
oraclelinux   7           073ded22ac0f   5 days ago    265.2 MB
oraclelinux   7.0         073ded22ac0f   5 days ago    265.2 MB
  1. 刪除名為guest的容器。
#docker rm guest
guest

您現在可以使用新鏡像創建一個用作Web服務器的容器,例如:

#docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
7afbbefec5191f632e149f85ae10ed0ba88f1c545daad18cb930e575ef6a3e63

所述-d選項運行命令非交互的背景和顯示完整版本的獨特容器的ID。該-p 8080:80 選項用來射guestr容器的80端口到主機的8080端口上。您可以通過運行docker ps或 docker port來查看端口映射,例如:

[root @ host~]# docker ps
CONTAINER ID  IMAGE         COMMAND    CREATED    STATUS   PORTS                  NAMES
7afbbefec519  mymod/httpd:v1           ...        ...      0.0.0.0:8080->80/tcp   newguest
[root@host ~]# docker port newguest 80
0.0.0.0:8080

注意
docker ps命令顯示容器ID的短的版本號。您可以使用 --no-trunc選項顯示長的版本號。
默認IP地址值0.0.0.0表示端口映射適用於主機上的所有網絡接口。您可以使用多個-p選項限制重映射適用的IP地址,例如:

# docker run -d --name newguest -p 127.0.0.1:8080:80 -p 192.168.1.2:8080:80 \
  mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND

您可以通過將瀏覽器指向主機上的端口8080來查看guest虛擬機所服務的Web內容。如果從其他系統訪問內容,則可能需要允許到主機端口的傳入連接,例如:

[root @ host~]#iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
[root @ host~]#service iptables save

如果需要刪除鏡像,請使用docker rmi命令:

[root @ host~]# docker rmi mymod/httpd:v1
Untagged: mymod/httpd:v1
Deleted: 7afbbefec5191f632e149f85ae10ed0ba88f1c545daad18cb930e575ef6a3e63

注意
從Docker 1.8版開始,您無法刪除正在運行的容器的圖像。
在生產環境中,使用docker commit命令創建鏡像並不能提供有關如何創建映像的方便記錄,因此您可能會發現很難重新創建已丟失或損壞的映像。創建映像的首選方法是設置Dockerfile,你可以使用定義指令的方式創建鏡像。請參見 第4.4節“從Dockerfile創建Docker鏡像”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM