Docker的映象使用-Window

以往清泉發表於2020-12-11

映象加速

映象預設是通過 DockerHub 拉取的,國內可能有些困難,會報以下錯誤:

net/http: TLS handshake timeout

所以,需要配置國內的加速服務地址:

官方地址:https://registry.docker-cn.com

網易:https://hub-mirror.c.163.com/

阿里雲:https://<你的ID>.mirror.aliyuncs.com

七牛雲加速器:https://reg-mirror.qiniu.com

中科大:https://docker.mirrors.ustc.edu.cn

window通過docker desktop的設定可以新增儲存(儲存後會自動重啟docker服務),如下:

 查詢映象

我們可以從 Docker Hub 網站來搜尋映象,Docker Hub 網址為: https://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 http://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

 

相關文章