前言
本章節内容大綱:
- 更換鏡像源
- 更改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服務
systemctl restart docker.service
二、更換存儲目錄
docker安裝完成後,預設存儲路徑為/var/lib/docker。建立容器後,每個容器的資料卷容量上限與/var/lib/docker所在的挂載的磁盤大小有關。例如下圖所示:挂載的磁盤大小為50GB,則docker容器資料卷上限就是50GB,如果有多個容器,則這些容器共享50GB的容量,而且同時也與挂載磁盤下的其他目錄共享使用。那麼如果運作的容器數量較多,或是遇到需要存儲大量資料如gitlab這類容器,50G顯然就有些捉襟見肘。此時可以通過修改docker存儲路徑的方式擴容容器的容量上限。特别提一句,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,配置正确。
三、修改時區
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 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服務:
systemctl restart docker
下篇預告《docker 一鍵快速搭建環境》。