[TOC]
docker pull 慢
docker-machine ssh 連接宿主機(jī) default
sudo vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/", "http://hub-mirror.c.163.com"]
}
sudo /etc/init.d/docker restart
或者
echo "{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/", "http://hub-mirror.c.163.com"]
}">/etc/docker/daemon.json
sudo /etc/init.d/docker restart
注意:
- 這個(gè)更改會(huì)同時(shí)改變 Kitematic 的鏡像源
- 有時(shí)候,daemon.json 不存在,新增一個(gè)就行
Docker pull卡住,解決方案 這篇文章中提到幾個(gè)可以用的國(guó)內(nèi)加速器(中國(guó)科技大學(xué)的鏡像加速器、阿里云加速器、DaoCloud 加速器)
中國(guó)科技大學(xué)的鏡像加速器,進(jìn)一步的信息可以訪問:Docker Hub 源使用幫助
docker hub下載速度太慢,更新國(guó)內(nèi)源 另外一個(gè)國(guó)內(nèi)源 http://hub-mirror.c.163.com
docker鏡像源加速設(shè)置之windows 這篇文章講解了 ToolBox 下,如何設(shè)置
官方文檔 Registry as a pull through cache 注意,docker 18 版 以后,修改 daemon 的命令有調(diào)整
# 原來
docker --registry-mirror=https://registry.docker-cn.com daemon
# 現(xiàn)在
dockerd --registry-mirror=https://registry.docker-cn.com
操作 daemon 參考這篇文章,Docker學(xué)習(xí)筆記 — 配置國(guó)內(nèi)免費(fèi)registry mirror
docker 容器中部署應(yīng)用存在 時(shí)差 8 小時(shí) 問題
一開始發(fā)現(xiàn)時(shí)差問題時(shí),各種解決不了,指導(dǎo)閱讀到了這篇文章 boot2docker持久化配置,修改時(shí)區(qū)時(shí)間和docker國(guó)內(nèi)鏡像地址 ,才知道每一次重啟 宿主機(jī) default 的時(shí)候,都是重新加載的,因此,必須有一個(gè)持久化的方法。但是,這篇文章說明的不是很詳細(xì),直到看到了這篇文章 boot2docker 遇到的幾個(gè)坑 覺得特別贊,按照這個(gè)方法成功的解決了時(shí)差 8 小時(shí)的問題;
主要問題一共有這么幾個(gè):
- 宿主機(jī) default 上并沒有 /user/share/zoneinfo 這個(gè)目錄,因此網(wǎng)上的好多文章并不能用
- 時(shí)差配置完畢以后,重啟電腦,或者重啟宿主機(jī)都會(huì)導(dǎo)致時(shí)差配置失效,不能持久化
因此,解決方案如下:
- 從包含正確時(shí)區(qū)的 linux 設(shè)備上 使用遠(yuǎn)程命令 scp 拷貝一個(gè)正確的 localtime 文件到/mnt/sda1下;
- 命令:
sudo scp root@192.168.3.232:/etc/localtime /mnt/sda1/
- 命令:
- 然后在 /mnt/sda1/var/lib/boot2doceker 下新建 bootlocal.sh文件,并賦予執(zhí)行權(quán)限;
- 命令
sudo echo 'cp -f /mnt/sda1/localtime /etc/localtime && echo "Asia/Shanghai" > /etc/timezone;'>/var/lib/boot2docker/bootlocal.sh - 權(quán)限
chmod +x /var/lib/boot2docker/bootlocal.sh
- 命令
dokcer 容器被局域網(wǎng)發(fā)現(xiàn)
docker toolbox無法被外網(wǎng)訪問解決方法 看完這篇文章,突然覺得好簡(jiǎn)單,繞了天大的一個(gè)圈子,然后轉(zhuǎn)了回來。好了現(xiàn)在解決了,開心!
Docker高級(jí)網(wǎng)絡(luò)實(shí)踐之 玩轉(zhuǎn)Linux network namespace & pipework
上面這篇文章,有很多關(guān)于 linux ip 這個(gè)命令的使用,關(guān)于 ip 命令的詳解見文章:Linux ip命令詳解
IP 命令使用方法 包含 ip link set 命令組的介紹,摘錄如下
ip -s -s link show # 顯示所有接口詳細(xì)信息
ip -s -s link show eth1.11 # 顯示單獨(dú)接口信息
ip link set dev eth1 up # 啟動(dòng)設(shè)備,相當(dāng)于 ifconfig eth1 up
ip link set dev eth1 down # 停止設(shè)備,相當(dāng)于 ifconfig eth1 down
ip link set dev eth1 txqueuelen 100 # 改變?cè)O(shè)備傳輸隊(duì)列長(zhǎng)度
ip link set dev eth1 mtu 1200 # 改變 MTU 長(zhǎng)度
ip link set dev eth1 address 00:00:00:AA:BB:CC # 改變 MAC 地址
ip link set dev eth1 name myeth # 接口名變更
Linux網(wǎng)絡(luò)命名空間 這篇文章覺得特別好,其中介紹到:虛擬網(wǎng)卡 veth,是成對(duì)出現(xiàn)的,就像一個(gè)管道的兩端,從這個(gè)管道的一端的veth進(jìn)去的數(shù)據(jù)會(huì)從另一端的veth再出來。因此,創(chuàng)建虛擬網(wǎng)卡 veth 都是成對(duì)出現(xiàn)
上面這篇文章中關(guān)聯(lián)了幾篇文章,覺得有價(jià)值的如下:
DOCKER基礎(chǔ)技術(shù):LINUX NAMESPACE(上)
DOCKER基礎(chǔ)技術(shù):LINUX NAMESPACE(下)
docker 網(wǎng)絡(luò)
Network namespaces 這里面講了一些等效用法,有啟發(fā)
eth 是 Ethernet 的縮略 以太網(wǎng)絡(luò)
docker for windows 容器內(nèi)網(wǎng)通過獨(dú)立IP直接訪問的方法 講了在windows下通過配置 route 命令配置路由的方式,使得 docker 容器 可以被局域網(wǎng)發(fā)現(xiàn)
docker network 對(duì)官網(wǎng)的文旦進(jìn)行了一翻譯
ip addr 輸出的 linux IP 信息都是啥含義,參見文章:透過ip addr看ip
圖解的一些概念,可以 docker 網(wǎng)絡(luò)配置
Docker的網(wǎng)絡(luò)類型和固定IP設(shè)置
docker 官網(wǎng) macvlan 配置說明
Docker容器通過獨(dú)立IP暴露給局域網(wǎng)的方法
Docker 容器使用宿主機(jī)同網(wǎng)段IP - 實(shí)話實(shí)說,目前還看不懂
Docker第二波
Docker第三波
docker 數(shù)據(jù)持久
在 mysql 官網(wǎng)上看到,在 docker 中部署 mysql 的時(shí)候,采用的是 --mount 命令完成持久化;這個(gè)以前沒有了解過,于是查閱資料:
Docker數(shù)據(jù)持久之volume和bind mount 在這篇文章中,介紹了三種持久化的方案;表達(dá)了2個(gè)區(qū)別:
- Bind mount會(huì)覆蓋容器中的文件,而volume mount則不會(huì),即如果容器中已有文件,則會(huì)將文件同步到主機(jī)的目錄上。
- mount 方式與Linux系統(tǒng)的mount方式很相似,即是會(huì)覆蓋容器內(nèi)已存在的目錄或文件,但并不會(huì)改變?nèi)萜鲀?nèi)原有的文件,當(dāng)umount后容器內(nèi)原有的文件就會(huì)還原。
docker volumes 中 -v 和 -mount 區(qū)別 在這篇文章中說,沒啥區(qū)別
注意了,run 命令下 -v 和 --mount 是等效的;區(qū)別另外一種持久化方案 bind mounts 見官網(wǎng) Use bind mounts
run -v 參數(shù)用法總結(jié)
宿主主機(jī)路徑(文件)與容器綁定
詳見 官方文檔 docker run -v 參數(shù)的使用相關(guān)章節(jié)
docker run -v [宿主主機(jī)文件系統(tǒng)路徑]:[容器文件系統(tǒng)路徑]
如果宿主主機(jī)中路徑不存在,docker 會(huì)自動(dòng)創(chuàng)建這個(gè)路徑
綁定卷
詳見 官方文檔 use volumes
docker run -v [卷名稱]:[容器文件系統(tǒng)路徑]
docker 默認(rèn)存儲(chǔ)路徑位置遷移
在實(shí)踐中,通常需要把 docker 存儲(chǔ)的路徑放到一個(gè)比較大的磁盤中,避免占用系統(tǒng)盤過多的空間,采用這篇文章的方式 Docker修改默認(rèn)存儲(chǔ)位置
摘錄如下:
# 確認(rèn)當(dāng)前 docker root dir 位置
docker info | grep 'Docker Root Dir' // 默認(rèn)輸出結(jié)果為:Docker Root Dir: /var/lib/docker
# 移動(dòng)到 docker root dir 路徑上一層
cd /var/lib
#停止docker服務(wù)
root@xxxxxx:/var/lib# service docker stop
#備份原目錄
root@xxxxxx:/var/lib# cp -a docker{,_bak}
#拷貝數(shù)據(jù)到新位置
root@xxxxxx:/var/lib# cp -a docker/ {new_location}/
#建立軟連接:
root@xxxxxx:/var/lib# rm -rf docker/
root@xxxxxx:/var/lib# ln -s {new_location}/ docker
#啟動(dòng)docker
root@xxxxxx:/var/lib# service docker start
#檢查移動(dòng)后數(shù)據(jù)是否完整
root@xxxxxx:/var/lib# docker images
root@xxxxxx:/var/lib# docker ps -a
#如果docker完整并可用,刪除備份
root@xxxxxx:/var/lib# rm -rf docker_bak/
docker 使用宿主機(jī) IP 訪問容器
增加防火墻配置
# 整體放開 docker 的防火墻限制
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
# xxxx改為你希望的端口號(hào)
# do firewall-cmd --permanent --zone=trusted --add-port=xxxx/tcp
sudo firewall-cmd --reload
找了很多文章,終于看到一篇講到這個(gè)主題,在 centos7 下面通過配置 firewall 實(shí)現(xiàn) docker 容器通過宿主機(jī) IP 和具體端口號(hào)訪問宿主機(jī)上的其他容器,詳見 docker、firewalld和iptables之間的關(guān)系