Docker提交映象-資料卷-視覺化

選手一號位發表於2022-03-29

在熟悉完Docker的安裝及基本命令使用之後,我們開始學習下Docker的進階操作:包括但不限於新建Docker映象,資料卷的掛載,以及Docker的視覺化等。

Docker提交映象

啟動映象

我們先安裝一個tomcat

docker run -d -p 8080:8080 tomcat

然後訪問:http://192.168.88.71:8080/

容器雖然啟動了,但頁面404,其實是預設沒有訪問頁面

[root@hadoop101 ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
7f7e60ca6bf5   tomcat                "catalina.sh run"        6 seconds ago    Up 4 seconds    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                              wonderful_satoshi
​

修改容器

tomcat為了簡化啟動流程,省略了載入頁面的操作,所以訪問404,我們可以進入容器,修改一下相關配置

[root@hadoop101 ~]# docker exec -it 7f7e60ca6bf5 /bin/bash
root@7f7e60ca6bf5:/usr/local/tomcat# ls
BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs            temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  work
root@7f7e60ca6bf5:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@7f7e60ca6bf5:/usr/local/tomcat#

tomcat的靜態頁面備份在了webapps.dist目錄下,我們將其複製到webapps下即可。

再次訪問:http://192.168.88.71:8080/ ,我們熟悉的頁面正常顯示了。

提交映象

然後把我修改後的容器重新提交成一個新的映象。

docker commit -m "cp webapps files" -a "zhangbao" 7f7e60ca6bf5 tomcat001:1.0

[root@hadoop101 ~]# docker commit -m "cp webapps files" -a "zhangbao" 7f7e60ca6bf5  tomcat001:1.0
sha256:1bcaa367798ccbea30337645a4839db5878a40eaed92e5c5d66c3df13edae738
[root@hadoop101 ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
tomcat001             1.0       1bcaa367798c   7 seconds ago   684MB
tomcat                latest    fb5657adc892   2 months ago    680MB

發現比之前大了一點點。

啟動新映象

我們再啟動新提交後的映象

docker run -d -p 8081:8080 tomcat001:1.0

訪問http://192.168.88.71:8081/,直接顯示正常頁面。

容器資料卷

背景

啟動一個容器後,容器內的配置或者資料也在容器中,當我們刪掉容器,整個容器及內部的配置及資料都會丟失,這是不正常的,所以Docker提供了資料卷的功能,即把容器內的配置或資料對映到宿主機上,實現雙向繫結,當我們要刪掉一個容器的時候,其資料還可保留,當我們修改容器的配置,也不需要進入容器,可直接在對映檔案中修改。

啟動映象並新增資料卷

docker run -it -p 8080:8080 -v /opt/test:/opt tomcat001:1.0 /bin/bash

此命令表示執行一個tomcat001映象,宿主機埠和容器埠都是8080,-v /opt/test:/opt 表示把容器內目錄 /opt 目錄掛載到宿主機 /opt/test 目錄下,這樣兩邊就實現了雙向繫結。

驗證

注:上個命令不可 ctrl+c 或者 exit退出,否則容器也直接退出了,用 ctrl+p+q 後臺啟動

我們直接在宿主機的/opt/test目錄下新建檔案test.txt,然後檢視容器內的/opt目錄下的變化

# 宿主機
[root@hadoop101 opt]# cd /opt/test
[root@hadoop101 test]# touch test.txt
[root@hadoop101 test]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 19 22:33 test.txt
​
#容器內
[root@hadoop101 ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS                                       NAMES
04331e8ef590   tomcat001:1.0   "/bin/bash"   7 minutes ago   Up 7 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   crazy_mclaren
[root@hadoop101 ~]# docker attach 04331e8ef590
root@04331e8ef590:/usr/local/tomcat# cd /opt/
root@04331e8ef590:/opt# ls
test.txt
​

同樣的,我們在容器內修改檔案內容,在宿主機也可以實時檢視檔案內容,並且在停止容器後,我們在宿主機上修改檔案,然後再啟動容器,容器內的檔案同樣被修改了。

安裝msyql

docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql001 mysql:5.7

-p 宿主機埠:容器埠

-v 宿主機目錄:容器目錄,可多個-v

-e 變數配置

--name 容器名字

這裡我們將mysql容器的配置檔案和資料目錄掛載到宿主機的/home/mysql目錄下

[root@hadoop101 ~]# cd /home/mysql/
[root@hadoop101 mysql]# ll
total 0
drwxr-xr-x 2 root    root   6 Mar 19 23:13 conf
drwxr-xr-x 5 polkitd root 328 Mar 19 23:13 data
[root@hadoop101 mysql]# cd data
[root@hadoop101 data]# ls
auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem
[root@hadoop101 data]#

然後我們通過Navicat連線,並新建資料庫test,再次檢視資料目錄

[root@hadoop101 data]# ls
auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem  test
[root@hadoop101 data]#

資料卷掛載

在熟悉了容器資料卷的功能後,我們再來看下資料卷的掛載,資料卷掛載有多種方式,上面我們使用是其中一種方式:指定路徑掛載。其實還有其他掛載方式,不同場景可使用不同方式的掛載,可根據自身需要選擇。

匿名掛載

-v 後面直接跟容器內的路徑

docker run -d -v /etc/nginx --name nginx001 nginx

[root@hadoop101 ~]# docker inspect nginx001
## 這裡只列出掛載資訊,將容器內的路徑/etc/nginx掛載到宿主機/var/lib/docker/volumes下
"Mounts": [
            {
                "Type": "volume",
                "Name": "cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec",
                "Source": "/var/lib/docker/volumes/cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec/_data",
                "Destination": "/etc/nginx",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

具名掛載

-v 資料卷名稱:容器內路徑

docker run -d -v zhangbao_nginx:/etc/nginx --name nginx002 nginx


[root@hadoop101 ~]# docker volume ls
DRIVER    VOLUME NAME
local     511511317ef0256d2d1570104e11a6ce897ba387267fbeec0192326dd6156067
local     cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec
local     e5303012839aa87faef7719a0407f690a9da8af1fcf6dfc2ef51cf20a5aa441f
local     zhangbao_nginx
[root@hadoop101 ~]# docker volume inspect zhangbao_nginx
[
    {
        "CreatedAt": "2022-03-21T23:09:43+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/zhangbao_nginx/_data",
        "Name": "zhangbao_nginx",
        "Options": null,
        "Scope": "local"
    }
]

上面就是匿名掛載和具名掛載了,我們經常用的還有一種就是指定路徑

指定路徑掛載

-v 宿主機路徑:容器路徑

docker run -d -v /etc/nginx:/etc/nginx --name nginx003 nginx

[root@hadoop101 ~]# docker inspect nginx003
"Mounts": [
            {
                "Type": "bind",
                "Source": "/etc/nginx",
                "Destination": "/etc/nginx",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

 

Docker視覺化

portainer

一個提供web頁面的Docker管理工具,命令如下:

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

訪問:http://192.168.88.71:8088

Docker提交映象-資料卷-視覺化

新增超管賬號:admin / 88888888

然後選擇本地的docker環境

Docker提交映象-資料卷-視覺化

連線之後,我們可以檢視有7個映象,然後點選進去

Docker提交映象-資料卷-視覺化

可以看到本地環境有7個映象,13個容器,10個資料卷。

Docker提交映象-資料卷-視覺化

 

檢視有哪7個映象,可以看到有我們之前測試使用的映象,包括我們自己提交的一個修改後的新映象tomcat001:1.0

Docker提交映象-資料卷-視覺化

 

資料卷列表,包括我們建立的匿名資料卷,以及具名資料卷。

Docker提交映象-資料卷-視覺化

 

lazydocker

一個基於終端的Docker視覺化查詢工具。

Docker提交映象-資料卷-視覺化

github:https://github.com/jesseduffield/lazydocker

docker run --rm -it -v \
/var/run/docker.sock:/var/run/docker.sock \
-v /.config/lazydocker:/.config/jesseduffield/lazydocker \
lazyteam/lazydocker

Docker提交映象-資料卷-視覺化

 

滑鼠和方向鍵都可控制檢視資訊框,在整個螢幕底部也有提示

Docker提交映象-資料卷-視覺化

 

滑鼠和方向鍵演示

Docker提交映象-資料卷-視覺化

每次檢視都需要很長的命令,我們可以簡化下

echo "alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /.config/lazydocker:/.config/jesseduffield/lazydocker lazyteam/lazydocker'" >> ~/.zshrc
​

 

更多請在某公號平臺搜尋:選手一號位,本文編號:2002,回覆即可獲取。

相關文章