Docker鏡像加速
Ubuntu 16.04+、Debian 8+、CentOS 7
對于使用 systemd 的系統(tǒng),請?jiān)?nbsp;/etc/docker/daemon.json 中寫入如下內(nèi)容(如果文件不存在請新建該文件)(http://hub-mirror.c.163.com)
{
"registry-mirrors": [
https://uf3mgws6.mirror.aliyuncs.com"
]
}
Dockerfile 指令詳解
#docker build [選項(xiàng)] <上下文路徑/URL/-> 構(gòu)建鏡像
#docker build -t nginx:v3 .
COPY 復(fù)制文件
格式:
COPY <源路徑>... <目標(biāo)路徑>
COPY ["<源路徑1>",... "<目標(biāo)路徑>"]
僅在需要自動解壓縮的場合使用 ADD 命令
CMD 容器啟動命令
CMD 指令的格式和 RUN 相似,也是兩種格式:
shell 格式: CMD <命令>
exec 格式: CMD ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"...]
參數(shù)列表格式: CMD ["參數(shù)1", "參數(shù)2"...] 。在指定了 ENTRYPOINT 指令后,用 CMD 指定具體的參數(shù)。
ENV 設(shè)置環(huán)境變量
格式有兩種:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
ARG 構(gòu)建參數(shù)
格式: ARG <參數(shù)名>[=<默認(rèn)值>]
HEALTHCHECK 健康檢查
格式:
HEALTHCHECK [選項(xiàng)] CMD <命令> :設(shè)置檢查容器健康狀況的命令
HEALTHCHECK NONE :如果基礎(chǔ)鏡像有健康檢查指令,使用這行可以屏蔽掉其健康檢查指
令
HEALTHCHECK 支持下列選項(xiàng):
--interval=<間隔> :兩次健康檢查的間隔,默認(rèn)為 30 秒;
--timeout=<時長> :健康檢查命令運(yùn)行超時時間,如果超過這個時間,本次健康檢查就被視為失敗,默認(rèn) 30 秒;
--retries=<次數(shù)> :當(dāng)連續(xù)失敗指定次數(shù)后,則將容器狀態(tài)視為 unhealthy ,默認(rèn) 3
次。
# docker save alpine | gzip > alpine-latest.tar.gz
保存鏡像
#docker load -i alpine-latest.tar.gz
加載鏡像
利用 Linux 強(qiáng)大的管道,我們可以寫一個命令完成從一個機(jī)器將鏡像遷移到另一個機(jī)器,并且?guī)нM(jìn)度條的功能:
#docker save <鏡像名> | bzip2 | pv | ssh <用戶名>@<主機(jī)名> 'cat | docker load'
在私有倉庫上傳、搜索、下載鏡像
使用 docker tag 將 ubuntu:latest 這個鏡像標(biāo)記為 192.168.100.2:5000/ubuntu:latest
格式為 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
docker tag ubuntu:latest 192.168.100.2:5000/ubuntu:latest
使用 docker push 上傳標(biāo)記的鏡像
#docker push 192.168.100.2:5000/ubuntu:latest
Docker 默認(rèn)不允許非 HTTPS 方式推送鏡像
Ubuntu 16.04+, Debian 8+, centos 7
對于使用 systemd 的系統(tǒng),請?jiān)?nbsp;/etc/docker/daemon.json 中寫入如下內(nèi)容(如果文件不存在請新建該文件)
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.100.2:5000"
]
}
注意:該文件必須符合 json 規(guī)范,否則 Docker 將不能啟動。
用 curl 查看倉庫中的鏡像
#curl 192.168.100.2:5000/v2/_catalog
可以看到 {"repositories":["ubuntu"]} ,表明鏡像已經(jīng)被成功上傳了
數(shù)據(jù)卷
#docker volume create my-vol
創(chuàng)建一個數(shù)據(jù)卷
docker run -d -P \
--name web \
# -v my-vol:/wepapp \
--mount source=my-vol,target=/webapp \
training/webapp \
python app.py
創(chuàng)建一個名為 web 的容器,并加載一個 數(shù)據(jù)卷 到容器的 /webapp 目錄
# docker volume rm my-vol 刪除數(shù)據(jù)卷
rm -v :刪除容器的同時移除數(shù)據(jù)卷
#docker volume prune
清理無主的數(shù)據(jù)卷空間
掛載主機(jī)目錄
--mount type=bind 掛載類型 bind、volume 或 tmpfs
docker run -d -P \
--name web \
# -v /src/webapp:/opt/webapp \
--mount type=bind,source=/src/webapp,target=/opt/webapp \
training/webapp \
python app.py
上面的命令加載主機(jī)的 /src/webapp 目錄到容器的 /opt/webapp 目錄
容器互聯(lián)
#docker network create -d bridge my-net 創(chuàng)建一個新的 Docker 網(wǎng)絡(luò)
-d 參數(shù)指定 Docker 網(wǎng)絡(luò)類型,有 bridge overlay 。
#docker run -it --rm --name busybox1 --network my-net busybox sh
#docker run -it --rm --name busybox2 --network my-net busybox sh
運(yùn)行一個容器并連接到新建的 my-net 網(wǎng)絡(luò)