Docker 鏡像-管理-導入-導出


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

ustc的鏡像:https://docker.mirrors.ustc.edu.cn

方式一 、使用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 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 可以幫我們定時清理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM