映象加速
映象預設是通過 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