一、容器文件系統打包
將容器的文件系統打包成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
....