docker容器鏡像製作

一、容器文件系統打包

將容器的文件系統打包成tar文件,也就是把正在運行的容器直接導出爲tar包的鏡像文件

export

​ Export a container’s filesystem as a tar archive

有兩種方式:

第一種:

[root@yixuan ~]# docker ps #運行一個容器
CONTAINER ID        IMAGE                            COMMAND             CREATED              STATUS              PORTS               NAMES
96e2b7265d93        daocloud.io/library/centos:6     "/bin/bash"         About an hour ago    Up About an hour                        c6
[root@yixuan ~]# docker exec -it c6 /bin/bash
[root@96e2b7265d93 /]# vi a.txt #編輯一個文件
123
[root@96e2b7265d93 /]# yum install -y vim wget  #安裝一個軟件
[root@yixuan ~]# docker export -o centos6-1.tar 96e2b726
-o, --output
[root@yixuan ~]# ls  #保存到當前目錄下
anaconda-ks.cfg  centos6-1.tar

第二種:

[root@yixuan ~]# docker export 容器名稱 > 鏡像.tar

導入鏡像歸檔文件到其他宿主機:

import

 [root@yixuan ~]# docker import centos6-1.tar centos6-1:v1
 sha256:b8414448c913259a28d623643a7b67a6c13da9b3259e70ee5febb16c2b0b1095
 [root@yixuan ~]# docker images
 [root@yixuan ~]# docker run -it --name c6.1 centos6-1:v1 /bin/bash 
[root@4a29d58d3bd2 /]# ls
a.txt  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[root@4a29d58d3bd2 /]# cat a.txt 
123123

二、通過容器創建本地鏡像

背景:容器運行起來後,又在裏面做了一些操作,並且要把操作結果保存到鏡像裏

方案:使用 docker commit 指令,把一個正在運行的容器,直接提交爲一個鏡像。

commit 是提交的意思,類似告訴svn服務器我要生成一個新的版本。

例子:

在容器內部新建了一個文件

[root@yixuan ~]# docker run -it --name c7 daocloud.io/library/centos:7 /bin/bash
[root@2e8f79cb5922 /]# touch test.txt

# 將這個新建的文件提交到鏡像中保存

[root@yixuan ~]# docker commit 2e8f79cb5922 soso/test:v2
sha256:2214bad66e9b1c2079dc89a2e14e997604237cd49a6dc6c29d84e915fbbeb5bd
[root@yixuan ~]# docker images

也可以這樣例子:

# docker commit -m "my images version1" -a "soso" 108a85b1ed99 daocloud.io/ubuntu:v2
sha256:ffa8a185ee526a9b0d8772740231448a25855031f25c61c1b63077220469b057
-m                           添加註釋
-a                           作者
108a85b1ed99                 容器環境id
daocloud.io/ubuntu:v2      鏡像名稱:hub的名稱/鏡像名稱:tag 
-p,–pause=true              提交時暫停容器運行 

鏡像遷移

保存一臺宿主機上的鏡像爲tar文件,然後可以導入到其他的宿主機上:

save

​ 將鏡像打包,與下面的load命令相對應

[root@yixuan ~]# docker save -o nginx.tar daocloud.io/library/nginx  

load

​ 與上面的save命令相對應,將上面sava命令打包的鏡像通過load命令導入,(實驗環境中原來機器上面有鏡像可以先刪除掉。)

[root@yixuan ~]# docker load < nginx.tar
[root@yixuan ~]# docker images
把容器導出成tar包 export   import 

把容器做成鏡像  commit  -a "" -m ""  

把鏡像保存爲tar包 save    load

通過Dockerfile創建鏡像

Docker 提供了一種更便捷的方式,叫作 Dockerfile

docker build命令用於根據給定的Dockerfile構建Docker鏡像。

docker build語法:

# docker build [OPTIONS] <PATH | URL | ->
1. 常用選項說明
--build-arg,設置構建時的變量
--no-cache,默認false。設置該選項,將不使用Build Cache構建鏡像
--pull,默認false。設置該選項,總是嘗試pull鏡像的最新版本
--compress,默認false。設置該選項,將使用gzip壓縮構建的上下文
--disable-content-trust,默認true。設置該選項,將對鏡像進行驗證
--file, -f,Dockerfile的完整路徑,默認值爲‘PATH/Dockerfile’
--isolation,默認--isolation="default",即Linux命名空間;其他還有process或hyperv
--label,爲生成的鏡像設置metadata
--squash,默認false。設置該選項,將新構建出的多個層壓縮爲一個新層,但是將無法在多個鏡像之間共享新層;設置該選項,實際上是創建了新image,同時保留原有image。
--tag, -t,鏡像的名字及tag,通常name:tag或者name格式;可以在一次構建中爲一個鏡像設置多個tag
--network,默認default。設置該選項,Set the networking mode for the RUN instructions during build
--quiet, -q ,默認false。設置該選項,Suppress the build output and print image ID on success
--force-rm,默認false。設置該選項,總是刪除掉中間環節的容器
--rm,默認--rm=true,即整個構建過程成功後刪除中間環節的容器
示例: 
docker build -t soso/bbauto:v2.1 .

docker build  是docker創建鏡像的命令 
-t 是標識新建的鏡像屬於 soso的 bbauto鏡像 
:v2 是tag 
"."是用來指明 我們的使用的Dockerfile文件當前目錄的 

2.1、 創建鏡像所在的文件夾和Dockerfile文件

[root@yixuan ~]# mkdir sinatra
[root@yixuan ~]# cd sinatra/
[root@yixuan sinatra]# touch Dockerfile

2.2、 在Dockerfile文件中寫入指令,每一條指令都會更新鏡像的信息例如:

[root@yixuan sinatra]# vim Dockerfile
#This is a comment 
FROM daocloud.io/library/centos:7
MAINTAINER soso soso@yixuan
RUN touch a.txt
RUN mkdir /test

格式說明:

命令要大寫,"#"是註解。 
每一個指令後面需要跟空格,語法。
FROM 命令是告訴docker 我們的鏡像什麼從哪裏下載。 
MAINTAINER 是描述 鏡像的創建人。 
RUN 命令是在鏡像內部執行。就是說他後面的命令應該是針對鏡像可以運行的命令。 

2.3、創建鏡像

命令:
# docker build -t soso/centso:7 . 

docker build  是docker創建鏡像的命令  

詳細執行過程:

[root@yixuan sinatra]# docker build -t soso/centos:7 . 
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM daocloud.io/library/centos
latest: Pulling from library/centos
d8d02d457314: Pull complete 
Digest: sha256:a36b9e68613d07eec4ef553da84d0012a5ca5ae4a830cf825bb68b929475c869
Status: Downloaded newer image for daocloud.io/library/centos:latest
 ---> 67fa590cfc1c
Step 2/4 : MAINTAINER soso soso@yixuan
 ---> Running in aab3d80939d8
Removing intermediate container aab3d80939d8
 ---> 12bae7d75a23
....
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章