Docker的鏡像使用-Window
鏡像加速
鏡像默認是通過 DockerHub 拉取的,中國可能有些困難,會報以下錯誤:
net/http: TLS handshake timeout
所以,需要配置中國的加速服務地址:
官方地址://registry.docker-cn.com
網易://hub-mirror.c.163.com/
阿里云://<你的ID>.mirror.aliyuncs.com
七牛雲加速器://reg-mirror.qiniu.com
中科大://docker.mirrors.ustc.edu.cn
window通過docker desktop的設置可以添加保存(保存後會自動重啟docker服務),如下:
查找鏡像
我們可以從 Docker Hub 網站來搜索鏡像,Docker Hub 網址為: //hub.docker.com/。
我們也可以使用 docker search 命令來搜索鏡像,比如我們一個centos的鏡像,那我們可以在 powershell (後文也統一使用powershell)用以下命令:
PS C:\> docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 6318 [OK] ansible/centos7-ansible Ansible on Centos7 132 [OK] consol/centos-xfce-vnc Centos container with "headless" VNC session… 123 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 116 [OK] .......
NAME: 鏡像倉庫源的名稱
DESCRIPTION: 鏡像的描述
OFFICIAL: 是否 docker 官方發布
STARS: 類似 Github 裡面的 star,表示點贊、喜歡的意思。
OFFICIAL:是否為官方鏡像。
AUTOMATED: 自動構建。
通過上面例子看到 docker search 命令查詢有一個小缺點,沒有 tag 這樣不好獲取指定 tag 的鏡像,通過 Docker Hub 網站查找資訊很全面,沒有這些問題。
獲取鏡像
當我們的本地主機使用一個不存在的鏡像時,會自動下載後使用。如果我們要先獲取鏡像,可以使用 docker pull 命令,如下:
PS C:\> docker pull centos Using default tag: latest latest: Pulling from library/centos 7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:latest docker.io/library/centos:latest
可以看到如果不指定鏡像的 Tag ,那麼默認 Tag 為 latest。可以通過在鏡像名後增加:Tag 來指定(也可以通過 Digest 摘要)
PS C:\> docker pull centos:centos8.3.2011
如果需要獲取鏡像的全部標籤
PS C:\> docker pull --all-tags centos
同一個標籤的鏡像反覆獲取,只會存在一個。
查詢本地鏡像
通過 docker images 命令來列出本地主機上的鏡像。
PS C:\> docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 300e315adb2f 31 hours ago 209MB hello-world latest bf756fb1ae65 11 months ago 13.3kB
各列說明:
REPOSITORY:表示鏡像的倉庫源
TAG:鏡像的標籤
IMAGE ID:鏡像ID
CREATED:鏡像創建時間
SIZE:鏡像大小
同一倉庫源可以有多個 TAG,代表這個倉庫源的不同個版本,如 centos 倉庫源里,有 15.10、14.04 等多個不同的版本,我們使用 REPOSITORY:TAG 來定義不同的鏡像。
刪除鏡像
鏡像刪除通過 docker rmi 命令執行,可以同時刪除多個鏡像,如下刪除了鏡像 hello-world 和 centos
PS C:\> docker rmi hello-world centos
鏡像名稱也可增加 Tag 標籤來刪除指定鏡像的指定標籤。
創建鏡像
當我們從 docker 鏡像倉庫中下載的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改。
1、從已經創建的容器中修改鏡像,並且提交這個鏡像
2、使用 Dockerfile 指令來創建一個新的鏡像
編輯鏡像
先通過鏡像 centos 來創建一個容器
PS D:\> docker run -t -i centos /bin/bash
運行後會構建一個 centos 的容器,並進入到容器中的 cnetos 作業系統中,我們這裡進行一個安裝 redis 的操作,讓我們新的 centos 鏡像有 redis (官方的原始 centos 鏡像是純凈的)。依次執行下面的語句:
[root@fda2c65d7e02 /]# yum -y install wget //注釋:安裝wget,用來執行wget命令 [root@fda2c65d7e02 /]# wget //download.redis.io/releases/redis-4.0.6.tar.gz //注釋:下載redis壓縮包 [root@fda2c65d7e02]# tar -zxvf redis-4.0.6.tar.gz //注釋:解壓redis壓縮包 [root@fda2c65d7e02 /]# yum install gcc //注釋:yunm安裝gcc依賴 [root@fda2c65d7e02 /]# cd redis-4.0.6 //注釋:跳轉到redis解壓目錄下 [root@fda2c65d7e02 redis-4.0.6]# yum -y install gcc automake autoconf libtool make //注釋:安裝make,用來執行make命令 [root@fda2c65d7e02 redis-4.0.6]# make MALLOC=libc //注釋:編譯安裝redis [root@fda2c65d7e02 redis-4.0.6]# cd src && make install //注釋:切換到redis src目錄下,將/usr/local/redis-4.0.6/src目錄下的文件加到/usr/local/bin目 [root@fda2c65d7e02 src]# ./redis-server //注釋:運行redis,可以看到成功運行了
之後我們輸入 exit 命令退出容器,使用 commit 命令提交容器副本,在本機創建新鏡像(可以通過 push 命令推送到 docker hub 上)
PS D:\> docker commit -m="add redis" -a="xu" fda2c65d7e02 xu/centos:v1.0.1
各個參數說明:
-m: 提交的描述資訊
-a: 指定鏡像作者
fda2c65d7e02:容器 ID,可以通過 docker ps -a 命令查看
xu/cnetos:v1.0.1: 指定要創建的目標鏡像名和標籤 tag
查詢鏡像
PS D:\> docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE xu/centos v1.0.1 0827da229df3 9 seconds ago 445MB centos latest 300e315adb2f 2 days ago 209MB
可以試下,通過我們自己修改後的鏡像來創建的容器自帶 redis
創建鏡像
我們使用 build 命令, 從零開始來創建一個新的鏡像。為此,我們需要創建一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構建我們的鏡像。我們創建一個txt文件,重命名為Dockerfile(刪除後綴),內容如下:
FROM centos RUN yum -y install wget RUN yum -y install gcc automake autoconf libtool make RUN wget http://download.redis.io/releases/redis-4.0.6.tar.gz RUN tar -zxvf redis-4.0.6.tar.gz WORKDIR /redis-4.0.6 RUN make MALLOC=libc WORKDIR src RUN make install CMD ["/bin/bash"]
指令說明
FROM:指明基礎的鏡像,可以用:指明tag
RUN:在鏡像容器中執行命令
WORKDIR:跳轉目錄,為後續的RUN、CMD或者ENTRYPOINT指定工作目錄
CMD:構建容器後調用,也就是在容器啟動時才進行調用
Dockerfile文件創建完成後,打開 PowerShell 運行 build 命令等待創建完成即可.
PS D:\xwc\myDockerfile> docker build -t xu/centos:1.0.2 .
參數說明:
-t :指定要創建的目標鏡像名,可以添加 :tag 指定標籤,否則默認 latest
. :Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對路徑(我這裡直接在文件所在路徑打開 powershell 所以不指定,默認改文件夾下)
鏡像標籤
可以通過 tag 命令修改鏡像的名稱和標籤
PS D:\> docker tag bf756fb1ae65 xu/hello-world:666
上面的命令是將鏡像 id 為 bf756fb1ae65 的鏡像複製一份用戶/鏡像名為 xu/hello-world 標籤為 666,查看鏡像可以看到它們的鏡像 id 都是相同的
PS D:\> docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 11 months ago 13.3kB xu/hello-world 666 bf756fb1ae65 11 months ago 13.3kB