Docker 鏡像基本概念
我們使用的容器都是基於鏡像的,鏡像是由多層組成的,容器是在鏡像上面添加了一個讀寫層。鏡像一般儲存在 /var/lib/docker/image/
。
多個容器是引用的同一個 鏡像,容器不會更改鏡像的內容,而是創建一個可寫層,並將數據保存在 /var/lib/docker/containers
中。
Docker 鏡像加速
當我們在使用 Docker
時,我們避免不了拉取鏡像,我們默認的鏡像源是 registry.hub.docker.com
, 是在國外的,我們在國內進行拉取鏡像是會比較慢的,我們通常會設置 Docker 中國鏡像源或者是 阿里雲鏡像源,來加速下載。
網易加速器:http://hub-mirror.c.163.com
官方中國加速器:https://registry.docker-cn.com
方式一 、使用Docker官方國內鏡像源
地址是 :https://registry.docker-cn.com
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
方式二 、使用阿里雲鏡像源地址
獲取阿里雲鏡像源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://123.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 配置開機自啟
systemctl enabled docker
方式三、設置163源
更新比阿里雲慢
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 配置開機自啟
systemctl enabled docker
Docker 鏡像 常用命令
查找鏡像 docker search
docker search imagename # 查找鏡像
docker search --filter=stars=0 imagename # 僅顯示指定星級以上的鏡像,默認為 0,即輸出所有鏡像。
docker search --no-trunc imagename # 輸出信息不截斷,默認是截斷的。
docker search --limit int imagename # 只返回多少個查詢結果,默認為25
下載鏡像 docker pull
# docker image pull =docker pull 下載鏡像
docker image pull centos = docker pull centos # 下載 centos 鏡像
docker image pull -a # 下載在此分支的所有的鏡像
列出鏡像 docker image ls
docker image ls / docker images # 列出所有的鏡像
docker image ls -a # 列出所有的鏡像
docker image ls -f dangling=true # -f 過來,dangling=true 顯示沒有使用過的鏡像
docker image ls --no-trunc # 對輸出結果太長部分不進行截斷,默認截斷 加--no-trunc不截斷。
docker image ls -q # 僅僅輸出id信息
查看鏡像的歷史構建記錄 docker image history
docker image history imagename # 查看鏡像的構建過程
docker image history -q imagename # 僅僅輸出id信息
docker image history --no-trunc imagename # 對輸出結果太長部分不進行截斷,默認截斷 加--no-trunc不截斷。
給鏡像打標簽 docker image tag
# 類似於軟鏈接
docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] # 一個鏡像可以對應多個標簽,刪除一個標簽的鏡像時,如果該鏡像還對應着對個標簽,則該鏡像是不會被刪除的。
查看鏡像的詳細信息 docker image inspect
docker image inspect [OPTIONS] IMAGE [IMAGE...] # 顯示一個或者多個鏡像的詳細信息。
刪除鏡像 docker image rm
docker image rm/rmi/remove
docker image rm tagname # 刪除鏡像,一個鏡像可以對應多個標簽,刪除一個標簽的鏡像時,如果該鏡像還對應着對個標簽,則該鏡像是不會被刪除的。假設我們一個鏡像有a,b,c三個標簽,我們刪除 c 鏡像就只會刪除 c標簽。當一個鏡像只對應一個標簽時,那時候刪除,是會將鏡像刪除的。如果是刪除id的話,如果該 id 對應的鏡像有對應的容器在啟動的話, 鏡像是刪除不了的,如果沒有的話,但是有多個標簽的話,是會一並刪除的。
docker image rm -f tagname # 強制刪除鏡像
docker image prune # 移除所有未標記(TAG)的鏡像
-a # 移除所有未使用的鏡像。
-f # 不發出詢問信息
# image 幫助
docker image --help
Docker 鏡像的創建和導出導入
創建鏡像
-
基於現有的容器進行創建
我們可以基於已經創建好的容器進行創建鏡像。
docker commit 【options】 container 【REPOSITORY【:TAG】】
-a ,--author="" : 指定作者信息;
-c , --change=[] :提交時執行 Dockerfile 命令
-m --message="" : 提交信息
-p,--pause=true : 提交時暫停容器運行
-
基於Dockerfile 創建
docker image build
-
從本地模板導入
docker image import/load
導出鏡像
# docker image save [options] container
-o # 導出到指定文件
導入鏡像
# docker image load < 導入文件名 / docker load < 導入文件名
導出容器
docker export container id > name.tar
docker export container id -o d.tar
導入容器
docker image import name.tar tag
注意事項
鏡像中有一個 dangling - 虛懸鏡像,這類鏡像的 tag 為 none ,這類鏡像是如何產生的?
當我們下載好一個鏡像后,這個鏡像后續更新了,然后我們 push 了最新的鏡像,那么之前的老版本的鏡像的tag 也就變成了 none , ,這種鏡像就叫做 dangling - 虛懸鏡像。這些鏡像可以刪除,使用 dangling=true 過濾條件即可。
docker rmi $(docker images -aq -f "dangling=true")
,有個開源工具 docker-gc 可以幫我們定時清理。