1. 程式人生 > >Docker(四)鏡像創建

Docker(四)鏡像創建

生成 指令 cfg roo src 80端口 ins grep 運行環境

Docker鏡像創建

Docker鏡像創建的方法

1:基於已有鏡像創建

基於已有景象創建主要使用docker commit 命令。實質就是把一個容器裏面運行程序以及程序的運行環境打包起來生成新的鏡像

命令格式:docker commit [選項] 容器ID/名稱 倉庫名稱:[標簽]

常用命令選項:

-m:說明信息
-a:作者信息
-p:生成過程中停止容器的運行

例:
首先啟動一個鏡像,在容器裏修改,然後將修改的鏡像生成新的鏡像,需要記住id號

[root@xyue ~] docker run -d httpd /bin/bash
5c9edd4c9cc6f069bdc489b084530f450440f28db775f079add9dc191a69043d

[root@xyue ~] docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
5c9edd4c9cc6        httpd               "/bin/bash"         7 seconds ago       Exited (0) 5 seconds ago                       xenodochial_feynman

[root@xyue ~] docker commit -m "new" -a "docke" 5c9edd4c9cc6 docke:test
sha256:06c816fc4ae8cea60eb49bcf23fd8803045dfb23561b7f32aeb82b7cbe1109db

[root@xyue ~] docker images | grep docke
docke               test                06c816fc4ae8        49 seconds ago      178MB

基於本地模板創建

通過導入操作系統模板文件可以生成新鏡像,模板下載地址:

[root@xyue ~] wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

[root@xyue ~] ls
anaconda-ks.cfg  debian-7.0-x86-minimal.tar.gz  debian-7.8-x86-minimal.tar.gz  Dockerfile

[root@xyue ~] cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
sha256:85b8caea781438cdc433f6fc2f60621e310e7e1706e1e6b29caa8d669dd7f971

導入成功後會生成鏡像ID信息

[root@xyue ~]# docker images | grep new
daoke               new                 85b8caea7814        21 seconds ago      215MB

基於Dockerfile創建

建立工作目錄

[root@xyue ~] mkdir /apache
[root@xyue ~] cd /apache

創建並編寫Dockerfile文件

[root@xyue apache] vim Dockerfile 
#基於的基礎鏡像centos
FROM centos
#維護該鏡像的用戶信息
MAINTAINER The CentOS Project <[email protected]>
#鏡像操作指令安裝apache包
RUN yum -y update          #跟新yum倉庫
RUN yum install -y httpd   #安裝apache服務    
#開啟80端口
EXPOSE 80
#Simple startup script to avoid some issuse observed with container restart
#復制網站首頁
ADD index.html /var/www/html/index.html
#將執行腳本復制到鏡像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#啟動容器時執行腳本
CMD ["/run.sh"]

編寫執行腳本內容

[root@xyue apache] vim run.sh 
#!/bin/bash
rm -rf /run/httpd/*                     #//清楚httpd緩存
exec /usr/sbin/apachectl -D FOREGROUND  #//啟動apache服務

創建測試頁面

[root@xyue apache]# echo "web test" > index.html 
[root@xyue apache]# cat index.html 
web test
[root@xyue apache]# ls
Dockerfile  index.html  run.sh
註意以上apache文件夾的裏面Dockerfile文件用的都是相對路徑所以啟動腳本和首頁必須和Dockerfile在同一文件夾裏

使用Dockerfile生成鏡像

編寫完成Dockerfile文件後可以通過docker build命令創建鏡像。

命令格式:docker build [選項] 路徑

常用選項:

-t:指定鏡像的標簽信息

[root@xyue apache] docker build -t httpd:centos .
··· 省略
        安裝
          過程
              ···

使用新的鏡像運行容器

將新生成的鏡像加載到容器中運行

[root@xyue apache]# docker run -d -p 12580:80 httpd:centos
a38850819054c64f960dadf705912c4b59034b58c5933c3a160a40efaf731f0c
[root@xyue apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS                   NAMES
a38850819054        httpd:centos        "/run.sh"           9 seconds ago       Up 8 seconds                   0.0.0.0:12580->80/tcp   nifty_wilson

測試首頁:

技術分享圖片

Docker(四)鏡像創建