虛擬化運(yùn)維--Docker鏡像(三)

一、鏡像

??Docker 鏡像是 Docker 容器運(yùn)行時(shí)的只讀模板,每一個(gè)鏡像由一系列的層 (layers) 組成。Docker運(yùn)行容器前需要在本地存在對(duì)應(yīng)的鏡像,如果鏡像不存在本地。Docker會(huì)嘗試先從默認(rèn)鏡像倉(cāng)庫(kù)下載(默認(rèn)使用Docker Hub公共注冊(cè)服務(wù)器中的倉(cāng)庫(kù)),用戶也可以通過(guò)配置,使用自定義的鏡像倉(cāng)庫(kù)。

  1. 獲取鏡像
[root@localhost ~]# docker pull ubuntu:13.10

  1. 手動(dòng)配置Docker加速器
    ??在國(guó)內(nèi)訪問(wèn) Docker 官方的鏡像,一直以來(lái)速度都慢如蝸牛。為了快速訪問(wèn) Docker 官方鏡像都會(huì)配置三方加速器,目前常用三方加速器有: 網(wǎng)易 、 USTC 、 DaoCloud 、 阿里云 。
    配置Docker加速器的本質(zhì)就是把Docker配置文件中的鏡像下載地址由默認(rèn)的Docker Hub地址變?yōu)閲?guó)內(nèi)鏡像的加速地址。
    阿里開發(fā)者平臺(tái):
    https://dev.aliyun.com
    阿里開發(fā)者平臺(tái)

Docker客戶端版本大于1.10:

  1. 方法一
    國(guó)內(nèi)加速站點(diǎn)
網(wǎng)易
http://hub-mirror.c.163.com
ustc 
https://docker.mirrors.ustc.edu.cn
中國(guó)科技大學(xué)
https://docker.mirrors.ustc.edu.cn

配置鏡像:

[root@localhost ~]# mkdir -p /etc/docker
[root@localhost ~]# vi /etc/docker/daemon.json
# 添加以下內(nèi)容
{
    "registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://docker.mirrors.ustc.edu.cn"]
}
# 重新加載配制:
[root@master ~]#  systemctl daemon-reload
# 重新啟動(dòng)服務(wù):
[root@localhost ~]# systemctl restart docker

重新使用docker pull可以看到速度變快了。

  1. 方法二:
    systemctl enable docker啟用服務(wù)后,
    編輯/etc/systemd/system/multi-user.target.wants/docker.service文件,
    找到 ExecStart= 這一行,在這行最后添加加速器地址–registry-mirror=<加速器地址>,如:
ExecStart=/usr/bin/dockerd --registry-mirror= https://pvhlb2dr.mirror.aliyuncs.com

重新加載配置并且重新啟動(dòng)。

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

二、鏡像操作

  1. 搜索鏡像
    我們可以從 Docker Hub 網(wǎng)站來(lái)搜索鏡像,Docker Hub 網(wǎng)址為: https://hub.docker.com/
    例:我們需要一個(gè)httpd的鏡像來(lái)作為我們的web服務(wù)
# 搜索httpd鏡像
[root@localhost ~]#  docker search httpd
# 顯示官方
docker search [包名]  --filter "is-official=true"
# 過(guò)濾熱度
docker search [包名] --stars=3
  1. 拖取鏡像
[root@localhost ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
8d691f585fa8: Pull complete 
8eb779d8bd44: Pull complete 
574add29ec5c: Pull complete 
9ccffbf4a714: Pull complete 
166e14b82905: Pull complete 
Digest: sha256:649bd29cc9284f06cf1a99726c4e747a83679e04eea3311b55022dd247026138
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest


docker pull mysql:tag
:tag 是你想從官方拉取的版本(例如5.5, 5.6, 5.7 或者latest )。如果省略 tag 則拉取當(dāng)前最新的版本, 即latest。

  1. 刪除鏡像
    使用鏡像的標(biāo)簽與ID刪除鏡像
  1. 停止所有的container,這樣才能夠刪除其中的images:
[root@localhost ~]# docker stop $(docker ps -a -q)

  1. 使用標(biāo)簽刪除鏡像
    標(biāo)簽為:repository+tag
# 使用標(biāo)簽刪除鏡像
[root@localhost ~]# docker rmi docker.io/ubuntu:13.10

  1. 根據(jù)ID刪除:
# 根據(jù)ID刪除
[root@localhost ~]# docker rmi 05a3bd381fc2

因?yàn)闆](méi)有停止運(yùn)地的鏡像:
可以使用-f強(qiáng)制刪除:(不推薦使用,因?yàn)橛幸蕾嚨脑挄?huì)產(chǎn)生一些遺留問(wèn)題)

[root@localhost ~]# docker rmi -f 05a3bd381fc2

正確做法是,先刪除依賴該鏡像的所有容器,再來(lái)刪除鏡像。

  1. 刪除所有鏡像:
[root@localhost ~]# docker rmi $(docker images -q)

  1. 根據(jù)格式刪除所有鏡像:
    刪除狀態(tài)為 exited的鏡像
[root@localhost ~]# docker rm $(docker ps -qf status=exited)

  1. 創(chuàng)建鏡像
  1. 基于已有的鏡像的容器創(chuàng)建
    用commit 命令創(chuàng)建鏡像:
    該方法是使用docker commit命令,其命令格式為:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

主要參數(shù)選項(xiàng)包括:
-a ,–author=”” 作者信息
-m,–message=”” 提交信息
-p,–pause=true 提交時(shí)暫停容器運(yùn)行
創(chuàng)建一個(gè)新容器命令:

# 創(chuàng)建一個(gè)新容器
[root@localhost ~]# docker run -it centos /bin/bash

添加一個(gè)文件:

[root@918afd3c90de /]# touch test
[root@918afd3c90de /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
# 退出centos容器
[root@918afd3c90de /]# exit
exit
[root@localhost ~]# 

commit命令來(lái)提交為一個(gè)新的鏡像:

[root@localhost ~]# docker commit -m "添加一個(gè)新文件" -a "hjj" 918afd3c90de  test
sha256:9878c9eaafd5f8bf7baa286f35e0038f5d0ae7ebb7b7fd20ec039a7de61cc18d

命令中,指定了要提交的修改過(guò)的容器的ID、目標(biāo)鏡像倉(cāng)庫(kù)、鏡像名。commit提交的知識(shí)創(chuàng)建容器的鏡像與容器的當(dāng)前狀態(tài)之間的差異部分,很輕量。
查看新創(chuàng)建的本地鏡像:

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                latest              9878c9eaafd5        43 seconds ago      220MB

  1. 基于本地模板導(dǎo)入
    也可以直接從一個(gè)操作系統(tǒng)模板文件導(dǎo)入一個(gè)鏡像。
    centos安裝wget:
[root@localhost ~]# yum -y install wget
[root@localhost ~]# wget -c http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz
--2019-10-24 21:26:07--  http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz
正在解析主機(jī) mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
正在連接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:80... 已連接。
已發(fā)出 HTTP 請(qǐng)求,正在等待回應(yīng)... 200 OK
長(zhǎng)度:10982406 (10M) [application/x-gzip]
正在保存至: “apache-tomcat-9.0.27.tar.gz”

100%[=================================================================================================================================================>] 10,982,406  4.78MB/s 用時(shí) 2.2s   

2019-10-24 21:26:10 (4.78 MB/s) - 已保存 “apache-tomcat-9.0.27.tar.gz” [10982406/10982406])

[root@localhost ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.27.tar.gz

-c參數(shù)為可以斷點(diǎn)續(xù)傳。
下載一個(gè)tomcat:9.0.27的模板壓縮包后,可以使用以下命令導(dǎo)入:

[root@localhost ~]#  cat apache-tomcat-9.0.27.tar.gz | docker import - tomcat:9.0.27

import: - (自定義的名字)

# 查看鏡像
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
tomcat              9.0.27              41e52d7345b6        About a minute ago   15.5MB

  1. 基于Dockerfile創(chuàng)建
    Dockerfile是一個(gè)文本格式的配置文件,用戶可以使用Dockerfile快速創(chuàng)建自定義的鏡像。
    Docker 官方并不推薦使用 docker commit 的方法來(lái)構(gòu)建鏡像,而是推薦使用 Dockerfile 定義的文件和 docker build 命令來(lái)構(gòu)建鏡像。Dockerfile 使用基于 DSL 語(yǔ)法的指令來(lái)構(gòu)建一個(gè) Docker 鏡像,之后使用 docker build命令基于改 Dockerfile 中的指令構(gòu)建一個(gè)新的鏡像。
    Dockerfile 內(nèi)容:
# Version: 0.0.1
FROM ubuntu:latest
MAINTAINER Allan Ma
RUN yum update
RUN yum install -y nginx
RUN echo 'Hi, I am in your container' \
       >/usr/share/nginx/html/index.html
EXPOSE 80

1)基鏡像為ubuntu
2)作者設(shè)置為我自己的名字
3) 容器安裝nginx,并將Hi, I am in your container 添加到/usr/share/nginx/html/index.html。

  1. 運(yùn)行鏡像的容器監(jiān)聽 80端口
    運(yùn)行,在有Dockerfile 的目錄中執(zhí)行構(gòu)建:
docker build -t  houjianjun/nginx  . 

(鏡像名稱, 最后一個(gè)點(diǎn)代表 dockerfile 存在的目錄 設(shè)置為在當(dāng)前目錄下,也可以單獨(dú) 指定)。
等待運(yùn)行完成 使用docker images查看本地的鏡像, 就可看見(jiàn)自己創(chuàng)建的鏡像了。
然后運(yùn)行:
docker run -d --name nginx -p 80:80 houjianjun/nginx (鏡像名稱)

??Dockerfile 由一系列指令和參數(shù)組成。每條指令,如 FROM,都必須為大寫字母,且后面跟隨一個(gè)參數(shù):FROM ubuntu:latest。Dockerfile 中的指令會(huì)按順序從上到下執(zhí)行,所以應(yīng)該根據(jù)需要合理安排指令的順序。

每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層并對(duì)鏡像進(jìn)行提交。
Docker 大體上按照如下流程執(zhí)行 Dockerfile 中的指令:
1)Docker 從基礎(chǔ)鏡像運(yùn)行一個(gè)容器;
2)執(zhí)行一條指令,對(duì)容器做出修改;
3)執(zhí)行類似 docker commit 的操作,提交一個(gè)新的鏡像層;
4)Docker 再基于剛提交的鏡像運(yùn)行一個(gè)新容器;
5)執(zhí)行 Dockerfile 中的下一條指令,直到所有指令都執(zhí)行完畢。

  1. 導(dǎo)出和載入鏡像
  1. 導(dǎo)出鏡像
    如果要導(dǎo)出鏡像到本地文件,可以使用docker save命令。
    例:導(dǎo)出centos鏡像為文件centos_test.tar
# 導(dǎo)出鏡像
[root@localhost ~]# docker save -o centos_test.tar docker.io/centos:latest

  1. 載入鏡像
# 載入鏡像
[root@localhost ~]# docker load --input centos_test.tar

或:

# 載入鏡像
[root@localhost ~]# docker load<centos_test.tar

  1. 上傳鏡像
    ??可以使用docker push命令上傳鏡像到倉(cāng)庫(kù),默認(rèn)上傳到DockerHub官方倉(cāng)庫(kù)(需要登錄),命令為:
docker push NAME[:TAG]

用戶在DockerHub網(wǎng)站注冊(cè)后,即可上傳自制的鏡像。
例如:用戶marquis上傳本地的test:latest鏡像,可以先添加新的標(biāo)簽marquis/test:latest,然后用docker push命令上傳鏡像:

[root@localhost ~]# docker tag test:latest marquis/test:latest
[root@localhost ~]# docker push marquis/test:latest

第一次上傳必須登錄驗(yàn)證。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容