鏡像加速器
國(guó)內(nèi)從Docker Hub拉取鏡像有時(shí)會(huì)遇到困難此改,此時(shí)可以配置鏡像加速器卡骂,國(guó)內(nèi)很多云服務(wù)商都提供了國(guó)內(nèi)加速器服務(wù):
- Azure中國(guó)鏡像 https://dockerhub.azk8s.cn
- 阿里云加速器需要登錄帳號(hào)獲取
- 七牛云加速器 https://reg-mirror.qiniu.com
對(duì)于使用systemd的系統(tǒng)岂贩,在/etc/docker/daemon.json 中寫入一下內(nèi)容:
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
你也可以在其中添加跟多的鏡像加速器抡驼,之后重新啟動(dòng)服務(wù)就可以了:
sudo systemctl daemon-reload
sudo systemctl restart docker
對(duì)于win10系統(tǒng)來(lái)說(shuō)蹬蚁,在任務(wù)欄托盤Docker圖標(biāo)內(nèi)右鍵菜單選擇Settings趁怔,打開配置窗口后在左側(cè)導(dǎo)航菜單選擇Docker Engine,在右側(cè)像上邊一樣編輯json文件带污,之后點(diǎn)擊Apply&Restart保存后Docker就會(huì)重啟并應(yīng)用配置的鏡像地址了僵控。
檢查加速器是否生效
docker info
pi@raspberrypi:/etc/docker $ docker info
Client:
Debug Mode: false
Server:
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 19.03.6
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.19.97-v7+
Operating System: Raspbian GNU/Linux 10 (buster)
OSType: linux
Architecture: armv7l
CPUs: 4
Total Memory: 926.1MiB
Name: raspberrypi
ID: IV3S:6ZNI:JBT4:64YW:4KPG:GB57:AK22:LVUH:UXPE:RMNM:3WI6:RRMX
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://dockerhub.azk8s.cn/
https://reg-mirror.qiniu.com/
Live Restore Enabled: false
WARNING: No swap limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
在其中可以看到 Registry Mirrors下就是你配置的鏡像加速器。
gcr.io 鏡像
國(guó)內(nèi)無(wú)法直接獲取 gcr.io/*鏡像鱼冀,我們可以將 gcr.io/<repo-name>/<image-name>:<version> 替換為 gcr.azk8s.cn/<repo-name>/<image-name>:<version>.
使用Docker鏡像
Docker運(yùn)行容器前需要本地存在對(duì)應(yīng)的鏡像报破,如果本地不存在該鏡像,Docker會(huì)從鏡像倉(cāng)庫(kù)下載該鏡像千绪。DockerHub上有大量的高質(zhì)量鏡像可以使用充易。
從Docker鏡像倉(cāng)庫(kù)獲取鏡像的命令是docker pull:
docker pull [選項(xiàng)] [Docker Registry 地址[:端口號(hào)]/]倉(cāng)庫(kù)名[:標(biāo)簽]
- Docker鏡像倉(cāng)庫(kù)地址格式:<域名/IP>[:端口號(hào)] 默認(rèn)地址是Docker Hub
- 倉(cāng)庫(kù)名:倉(cāng)庫(kù)名是兩段式名稱,即 <用戶名>/<軟件名> 對(duì)于Docker Hub如果不給出用戶名荸型,則默認(rèn)為library盹靴,也就是官方鏡像。
- 標(biāo)簽:通常是鏡像的版本瑞妇,例如ubuntu:18.04 后的18.04就是其版本稿静,如果不加標(biāo)簽?zāi)J(rèn)為latest
pi@raspberrypi:~ $ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
b9b5ae93466e: Pull complete
9e8983199234: Pull complete
1e76f87f706a: Pull complete
b196ba84f492: Pull complete
Digest: sha256:04d48df82c938587820d7b6006f5071dbbffceb7ca01d2814f81857c631d44df
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
根據(jù)上面命令中給出的信息可以看到鏡像地址為library官方庫(kù)的ubuntu:18.04鏡像。從下載過(guò)程中可以看到分層存儲(chǔ)的概念辕狰,鏡像是由多層存儲(chǔ)所構(gòu)成改备,下載也是一層一層的下載,并非單一文件蔓倍。下載過(guò)程給出了每一層的ID的12位悬钳,下載完成后給出該鏡像完整的sha256的摘要。
運(yùn)行
有了鏡像后偶翅,我們就能以這個(gè)鏡像為基礎(chǔ)啟動(dòng)并運(yùn)行一個(gè)容器默勾,以上面的ubuntu為例,如果我們打算啟動(dòng)里面的bash并進(jìn)行交互式操作的話:
pi@raspberrypi:~ $ docker run -it --rm \
> ubuntu:18.04 \
> bash
root@2f41fb0d333d:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
最后我們通過(guò)exit退出這個(gè)容器聚谁。
列出鏡像
要想列出已經(jīng)下載下來(lái)的鏡像母剥,可以使用docker image ls 命令:
pi@raspberrypi:~ $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 981c0bc3c335 4 hours ago 46.7MB
arm32v7/hello-world latest 851163c78e4a 7 weeks ago 4.85k
列表包含了倉(cāng)庫(kù)名、標(biāo)簽、鏡像ID媳搪、創(chuàng)建時(shí)間以及所占用的空間铭段。
虛懸鏡像
有時(shí)候你在鏡像列表中,可以看到一個(gè)特殊的鏡像:
<none> <none> 00285df0df87 5 days ago 342 MB
其沒(méi)有倉(cāng)庫(kù)名也沒(méi)有標(biāo)簽秦爆,這個(gè)鏡像原本是有名字的序愚,但是隨著官方鏡像維護(hù),發(fā)布了新版本后等限,重新docker pull ubuntu:18.04時(shí)爸吮,unbutu:18.04這個(gè)鏡像名被轉(zhuǎn)移到新下載的鏡像身上,而舊的鏡像上的這個(gè)名稱就被取消了望门,從而成為了none形娇。這類無(wú)標(biāo)簽鏡像也被稱為虛懸鏡像〕镂螅可以用以下命令專門顯示:
doker image ls -f dangling=true
通常情況下這個(gè)虛懸鏡像并沒(méi)有存在的價(jià)值桐早,可以隨意刪除:
docker image prune
刪除本地鏡像
如果要?jiǎng)h除本地的鏡像,可以使用docker image rm命令:
docker image rm [選項(xiàng)] <鏡像1>[<鏡像2>...]
其中鏡像可以是鏡像短ID厨剪、鏡像長(zhǎng)ID哄酝、鏡像名稱來(lái)刪除鏡像。使用腳本的時(shí)候可能會(huì)使用長(zhǎng)ID祷膳,其他多數(shù)使用短ID陶衅,短ID不要求個(gè)數(shù)只要能唯一區(qū)分鏡像就可以了。
pi@raspberrypi:~ $ docker image rm arm32v7/hello-world
Error response from daemon: conflict: unable to remove repository reference "arm32v7/hello-world" (must force) - container 0382315f3e5d is using its referenced image 851163c78e4a
可以看到報(bào)錯(cuò)了直晨,這是因?yàn)樵趧h除鏡像前必須要先用docker rm刪除依賴于這個(gè)鏡像的所有容器(哪怕是已經(jīng)停止的容器),否則無(wú)法刪除該鏡像搀军。
pi@raspberrypi:~ $ docker rm 03823
03823
pi@raspberrypi:~ $ docker image rm arm32v7/hello-world
Untagged: arm32v7/hello-world:latest
Untagged: arm32v7/hello-world@sha256:d32a4c07ce3055032a8d2d59f49ca55fafc54a4e840483b590f7565769dc7e00
Deleted: sha256:851163c78e4ad68e6fe5391f0894aafd164d40c4d4d0a56b4291f0dc2c75cc2c
Deleted: sha256:2536d8d4e4b1baa6515d44eb77a1402d6be0a533e7d191c51cb8428ba5ece3f4
pi@raspberrypi:~ $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 981c0bc3c335 28 hours ago 46.7MB
使用docker rm 容器id 刪除容器后,在刪除image這樣就成功了勇皇。