Docker鏡像基礎-04

1、概念

1.一、瞭解一下Docker鏡像

Docker鏡像基礎-04
這個是我從網上截取的一張圖,很清晰的代表了Docker鏡像的組成,Docker的鏡像內容採用分層構建機制,每一層能夠理解爲都是一個鏡像,多個鏡像組成在一塊兒,通常一個鏡像內只運行一個應用程序。html

Bootfs: 用於引導系統,包括bootloader和kernel,容器啓動完成後會被卸載以節約內存資源,能夠理解就是Linux內核
Base image: 基礎鏡像,例如像centos基礎鏡像,debian基礎鏡像,busybox基礎鏡像,表現爲rootfs,能夠理解爲根文件系統
Image :上層應用的鏡像,例如Nginx,Mariadb等.....
Container :前面幾層都爲只讀層,這一層爲可寫層,運行爲後容器會在這個docker的鏡像上面多加一層可寫的容器層,任何的對文件的更改都只存在此容器層。所以任何對容器的操做均不會影響到鏡像。nginx

1.二、其餘一些知識

(1)存儲文件系統
aufs
devicemapper
overlayfs 新版本docker默認
(2)Docker Registry
使用docker run啓動容器時,docker_deamon會嘗試從本地獲取相關鏡像,本地不存在,則會找到公開的倉庫,下載下來而後才啓動成容器
(3)Docker image pull命令解釋
docker image pull <倉庫的網站>[:<端口默認爲443>]/[<倉庫的做者>]/<倉庫的軟件列如jenkins>:<tag標籤不指默認爲latest>
默認狀況下docker會從 dockerhub網站上拉取鏡像因此咱們在使用docker pull時就不用加上倉庫的網站
例如如今從 quay.io網站倉庫拉取鏡像,這是一個公開的鏡像倉庫,須要指明網站爲quay.io,端口默認爲443,不指明tag表示latest最新穩定版
[root@docker-host ~]# docker pull quay.io/pszuster/vsftpdgit

2、Docker鏡像製做

2.二、常見製做docker鏡像方法

1.編寫Dockerfile文件,而後使用docker image build命令製做
2.基於已經運行的容器製做,使用docker commit命令製做
3.Docker Hub automated builds(基於docker hub自動構建
4.將Dockerfile推送到gitlab或者github自動構建鏡像推送Docker倉庫 github

2.三、基於已經運行的容器製做鏡像

(1)啓動一個busybox容器
[root@docker-host ~]# docker container run --name "buysbox-commit" -itd busybox
[root@docker-host ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9a1e974e2eb7        busybox             "sh"                2 seconds ago       Up 2 seconds                            busybox-commit

(2)進入busybox-commit容器內部
[root@docker-host ~]# docker container attach busybox-commit
/ #
/ #

(3)busybox內置了httpd程序,咱們添加一個index.html首頁
/ # mkdir /var/www/html -p
/ # echo "busybox-commit" > /var/www/html/index.html

(4)使用docker commit命令製做一個鏡像,-a指明製做做者,-p :中止正在運行的容器,後面跟運行的容器名稱
[root@docker-host ~]# docker commit -a "HBLinux" -p busybox-commit
sha256:c7fef79ddd3a0f38c529a47458a787afb9a440783b8feda3c6a5b3e6d056c7dd

(5)查看此鏡像,能夠看到REPOSITORY爲<none>就是咱們剛剛製做的鏡像 
[root@docker-host ~]# docker image ls
REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE
<none>                         <none>              c7fef79ddd3a        About a minute ago   1.2MB
busybox                         latest              64f5d945efcc        3 weeks ago          1.2MB
nginx                              latest              53f3fd8007f7        3 weeks ago          109MB
quay.io/pszuster/vsftpd   latest              3b2c3ff7ca5b        12 months ago        494MB

(6)使用docker image tag命令給鏡像打上REPOSITORY:tag(標籤),按格式來打 網站/做者/軟件倉庫:標籤,假如倉庫網站爲
localhost,做者爲123,軟件倉庫爲busybox-commit,tag爲v0.1版本
[root@docker-host ~]# docker image tag c7fef79ddd3a localhost/123/busybox-commit:v0.1
[root@docker-host ~]# docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
localhost/123/busybox-commit   v0.1                c7fef79ddd3a        9 minutes ago       1.2MB
busybox                        latest              64f5d945efcc        3 weeks ago         1.2MB
nginx                          latest              53f3fd8007f7        3 weeks ago         109MB
quay.io/pszuster/vsftpd        latest              3b2c3ff7ca5b        12 months ago       494MB

(7)基於此製做的鏡像咱們再啓動一個容器,而後再製做一個鏡像啓動httpd程序
[root@docker-host ~]# docker run --name "busybox-commit-01" -itd localhost/123/busybox-commit:v0.1
0ec27b4bba3f2b4dadb1d2be8a8b6c9bf5c0600ac05bc4b32dac684ceeafc092

(8)使用docker commit再次製做鏡像,-c 表示在此鏡像運行爲容器時執行的命令,咱們使用httpd程序讀取index.html網頁文件
[root@docker-host ~]# docker commit -a "HBLinux" -p -c 'CMD ["httpd","-f","-h","/var/www/html"]'  busybox-commit-01
sha256:528851534d953208c31f4354535d3d0caaffc55498da544357a28513caeea30e
[root@docker-host ~]# docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
<none>                         <none>              528851534d95        About a minute ago   1.2MB
localhost/123/busybox-commit   v0.1                c7fef79ddd3a        26 minutes ago       1.2MB
busybox                        latest              64f5d945efcc        3 weeks ago          1.2MB
nginx                          latest              53f3fd8007f7        3 weeks ago          109MB
quay.io/pszuster/vsftpd        latest              3b2c3ff7ca5b        12 months ago        494MB

(9)爲剛剛製做的鏡像打上標籤
[root@docker-host ~]# docker image tag  528851534d95 localhost/123/busybox-commit-httpd:v0.1
[root@docker-host ~]# docker image ls
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
localhost/123/busybox-commit-httpd   v0.1                528851534d95        2 minutes ago       1.2MB
localhost/123/busybox-commit         v0.1                c7fef79ddd3a        27 minutes ago      1.2MB
busybox                              latest              64f5d945efcc        3 weeks ago         1.2MB
nginx                                latest              53f3fd8007f7        3 weeks ago         109MB
quay.io/pszuster/vsftpd              latest              3b2c3ff7ca5b        12 months ago       494MB

(10)啓動此容器而後測試訪問
[root@docker-host ~]# docker container run --name "busybox-httpd-01" -itd  localhost/123/busybox-commit-httpd:v0.1
cc541dc5886784c66f279ef987b0bb2f8b2dece408a4b09f4723493a1c4f7927
[root@docker-host ~]# docker container inspect busybox-httpd-01 | grep "IPAddress"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.4",
                "IPAddress": "172.17.0.4",
[root@docker-host ~]# curl 172.17.0.4
busybox-commit

3、鏡像的導入和導出

(1)命令使用
[root@docker-host ~]# docker image save -o xxx.gz 鏡像的名稱
[root@docker-host ~]# docker image load -i xxx.gz 

(2)查看一下我有哪些鏡像,就導出localhost/123/busybox-commit-httpd:v0.1這個鏡像吧
[root@docker-host ~]# docker image ls
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
localhost/123/busybox-commit-httpd   v0.1                528851534d95        17 minutes ago      1.2MB
localhost/123/busybox-commit         v0.1                c7fef79ddd3a        43 minutes ago      1.2MB
busybox                              latest              64f5d945efcc        3 weeks ago         1.2MB
nginx                                latest              53f3fd8007f7        3 weeks ago         109MB
quay.io/pszuster/vsftpd              latest              3b2c3ff7ca5b        12 months ago       494MB
[root@docker-host ~]# docker image save -o busybox-commit-httpd:v0.1.gz localhost/123/busybox-commit-httpd:v0.1
[root@docker-host ~]# ls -l busybox-commit-httpd\:v0.1.gz
-rw------- 1 root root 1435136 Jun  4 01:38 busybox-commit-httpd:v0.1.gz

(3)導入鏡像
[root@docker-host ~]# docker image load -i busybox-commit-httpd\:v0.1.gz

一步一步來!!!!!!!!!!!!!!!!!!!!!!
其實很簡單噠!!!!!!!!!!!!!!!!!!!!!docker

相關文章
相關標籤/搜索