一、鏡像
??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ù)。
- 獲取鏡像
[root@localhost ~]# docker pull ubuntu:13.10
- 手動(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:
- 方法一
國(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可以看到速度變快了。
- 方法二:
用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
二、鏡像操作
- 搜索鏡像
我們可以從 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
- 拖取鏡像
[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。
- 刪除鏡像
使用鏡像的標(biāo)簽與ID刪除鏡像
- 停止所有的container,這樣才能夠刪除其中的images:
[root@localhost ~]# docker stop $(docker ps -a -q)
- 使用標(biāo)簽刪除鏡像
標(biāo)簽為:repository+tag
# 使用標(biāo)簽刪除鏡像
[root@localhost ~]# docker rmi docker.io/ubuntu:13.10
- 根據(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)刪除鏡像。
- 刪除所有鏡像:
[root@localhost ~]# docker rmi $(docker images -q)
- 根據(jù)格式刪除所有鏡像:
刪除狀態(tài)為 exited的鏡像
[root@localhost ~]# docker rm $(docker ps -qf status=exited)
- 創(chuàng)建鏡像
- 基于已有的鏡像的容器創(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
- 基于本地模板導(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
- 基于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。
- 運(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í)行完畢。
- 導(dǎo)出和載入鏡像
- 導(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
- 載入鏡像
# 載入鏡像
[root@localhost ~]# docker load --input centos_test.tar
或:
# 載入鏡像
[root@localhost ~]# docker load<centos_test.tar
- 上傳鏡像
??可以使用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)證。
