天天看點

docker從入門到實戰系列3-docker使用技巧

前言

本章節内容大綱:

  • 更換鏡像源
  • 更改docker存儲目錄
  • 修改時區
  • 拷貝檔案

一、更換鏡像源

由于docker預設的是國外鏡像源,下載下傳速度較慢,是以可以将其更改為國内鏡像源,進而提高下載下傳速度。具體步驟如下:

① 配置檔案路徑:/etc/docker/daemon.json,若不存在則建立此檔案

{
        "registry-mirrors":[
        "http://registry.docker-cn.com",
        "http://docker.mirrors.ustc.edu.cn",
        "http://hub-mirror.c.163.com",
        "http://cr.console.aliyun.com/",
        "https://8wb4g36l.mirror.aliyuncs.com"
]
}           
docker從入門到實戰系列3-docker使用技巧

② 配置完成後重新開機docker服務

systemctl restart docker.service           

二、更換存儲目錄

docker安裝完成後,預設存儲路徑為/var/lib/docker。建立容器後,每個容器的資料卷容量上限與/var/lib/docker所在的挂載的磁盤大小有關。例如下圖所示:挂載的磁盤大小為50GB,則docker容器資料卷上限就是50GB,如果有多個容器,則這些容器共享50GB的容量,而且同時也與挂載磁盤下的其他目錄共享使用。那麼如果運作的容器數量較多,或是遇到需要存儲大量資料如gitlab這類容器,50G顯然就有些捉襟見肘。此時可以通過修改docker存儲路徑的方式擴容容器的容量上限。特别提一句,docker存儲路徑最好盡早修改,這樣可以避免後期因磁盤寫滿導緻的各種容器運作異常問題。

docker從入門到實戰系列3-docker使用技巧

三種方式修改docker存儲路徑,分别為:

1.方式一:修改docker配置檔案

編輯docker配置檔案

vi /usr/lib/systemd/system/docker.service           

使用"--graph"或"-g"參數指定存儲位置

ExecStart=/usr/bin/dockerd --graph /home/docker_home           

修改完成後重新加載配置檔案并重新開機docker服務

// reload配置檔案 
systemctl daemon-reload 
 
// 重新開機docker
systemctl restart docker.service           

2.方式二:建立daemon.json檔案

docker1.12或以上版本,可以建立或修改daemon.json檔案來指定存儲位置。docker檢視版本指令“docker version”

vi /etc/docker/daemon.json           

在最後添加graph字段,定義docker目錄

{
        "registry-mirrors":[
        "http://registry.docker-cn.com",
        "http://docker.mirrors.ustc.edu.cn",
        "http://hub-mirror.c.163.com",
        "http://cr.console.aliyun.com/",
        "https://8wb4g36l.mirror.aliyuncs.com"
],
        "graph": "/home/docker_home"
}
           

修改完成後同樣需要重新加載配置檔案、重新開機docker服務

systemctl daemon-reload
systemctl restart docker.service           

3.方式三:建立軟連結(推薦)

前兩種方式适用于首次安裝docker後沒有pull過鏡像、建立過容器。即使修改了存儲路徑,因為沒有鏡像和容器,是以也不會産生任何影響。

建立軟連結的方式,适用于已經建立過容器、并且容器已經産生資料的情況。這種方式可以避免對鏡像及現有容器資料造成破壞,以及更改存儲路徑後找不到資料的情況。具體步驟如下:

① 檢視docker路徑

預設情況下Docker的存放位置為:/var/lib/docker,也可以通過如下指令檢視docker存儲路徑

docker info | grep "Docker Root Dir"           

② 停掉docker服務

systemctl stop docker           

③ 移動docker目錄

mv /var/lib/docker /home/docker_home           

③ 建立軟連結

  • /home/docker_home為源檔案目錄,也就是新設定的docker存儲目錄
  • /var/lib/docker為軟連結目标目錄,與此目錄建立連結後,相當于原來的docker配置保持不變,但真正的存儲目錄是其背後所指向的/home/docker_home
ln -s /home/docker_home /var/lib/docker           

④ 啟動docker服務

systemctl start docker           

修改完成後,我們可以通過以下指令檢視docker的存儲目錄:

docker info | grep "Root Dir"  
# 修改成功會傳回以下内容:
# Docker Root Dir: /home/docker_home           

檢視/var/lib/目錄,docker目錄是一個軟連結,指向/home/docker_home,配置正确。

docker從入門到實戰系列3-docker使用技巧

三、修改時區

1.建立容器時設定時區

建立時增加映射使用主機時區

-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime           

2.建立容器後修改時區

① 檢視主控端時區

通過date -R指令可以看出,主控端的時區為東八區,檢視/etc/localtime,可以看出localtime實際上是一個軟連結,背後指向的是/usr/share/zoneinfo/Asia/Shanghai

[root@test_host home]# date -R
Thu, 08 Sep 2022 11:05:37 +0800
[root@test_host home]# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 8月  29 17:17 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai           

② 拷貝本地時區到docker容器内部

docker cp /usr/share/zoneinfo/Asia/Shanghai docker.ui:/etc/localtime           

③ 進入容器内部檢視時區

docker exec -it docker.ui sh  # 進入docker.ui容器
ls /etc  # 檢視/etc下是否存在已經複制的localtime檔案
date -R  # 檢視時區           

通過下圖可以看出,/etc下已經存在了主控端複制過來的localtime檔案,時區為東八區,已經修正。

docker從入門到實戰系列3-docker使用技巧

四、拷貝檔案

主要用到"docker cp"指令

1.從主控端拷貝到容器

docker cp 主控端檔案路徑 容器名:目錄,例如:

docker cp redis_log mysql:/home           

2.從容器内拷貝到主控端

docker cp 容器名:檔案路徑 主控端目錄,例如:

docker cp mysql:/home/mayfly-go.sql /home/           

五、常見問題解決

1.容器報錯ipv4網絡不可用

運作容器時報錯

如果是容器運作直接報這個錯, 解決方式:

① 在主控端上執行

echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf             

② 重新開機network和docker服務

systemctl restart network
systemctl restart docker           

建立容器時報錯

“WARNING: IPv4 forwarding is disabled. Networking will not work.”

docker從入門到實戰系列3-docker使用技巧

如果是運作鏡像、建立容器的時候報這個錯,則直接重新開機docker服務:

systemctl restart docker           

下篇預告《docker 一鍵快速搭建環境》。