标签:创建文件 run 导入 ocs 例子 ted hub 本地 ati
docker快速入门3-docker镜像Docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器。
docker镜像采用分层构建机制,最底层为bootfs,次之为rootfs。
只读
模式,而后通过联合挂载
技术额外挂载一个可写
层Docer的镜像是一层一层堆叠而成,位于下层的镜像称为父镜像,最底层的称为基础镜像。
最上层为可读写
层,其下的均为只读
层
aufs是advanced multi-layered unification filesystem 高级多层统一文件系统。
aufs和overlayfs都是用于Linux文件系统实现联合挂载
,除了这两个,docker还支持btrfs,devicemapper和vfs等文件系统。
Docer早期版本,在ubuntu下使用的是aufs,在CentOS7上使用的是devicemapper,而现在较新的Docer版本使用的是overlayfs,现在已发展到overlay2的版本。
Docer镜像获取顺序:当一个容器启动时,docker daemon会试图从本地获取相关镜像,本地镜像不存在时,将从Registry中下载该镜像并保存到本地。
非常著名的第三方镜像仓库: https://quay.io/
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
# 创建容器,并在容器内创建文件
root@node01:~# docker container run -i -t --name bbox-01 busybox:latest
/ # ls
bin dev etc home proc root sys tmp usr var
/ # mkdir -pv /data/html
created directory: ‘/data/‘
created directory: ‘/data/html‘
/ # echo "<h1>Hello Word!</h1>" > /data/html/index.html
/ # cat /data/html/index.html
<h1>Hello Word!</h1>
另起一个终端,基于容器制作镜像
root@node01:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
787e4b3b2516 busybox:latest "sh" 4 minutes ago Up 4 minutes bbox-01
root@node01:~# docker container commit -p -m "Create /data/html/index.html" bbox-01 busybox-httpd:v0.1
sha256:806601ab556504829ff18d36ff308becab6ae351c7ae8f7b2adaecace52787bc
root@node01:~# docker image ls busybox*
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.1 806601ab5565 44 seconds ago 1.22MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
退出容器bbox-01
并删除,并以制作的镜像运行一个容器
root@node01:~# docker container rm bbox-01
root@node01:~# docker container run -t -i --name bbox-http-01 busybox-httpd:v0.1
/ # ls data/html/
index.html
/ # cat data/html/index.html
<h1>Hello Word!</h1>
/ #
新镜像中的/data/html/index.html
得以保留,所以我们在原有的镜像基础上制作了一个新的镜像,新镜像较原镜像多了/data/html/index.html
文件。
busybox镜像中可以运行一个httpd服务,既然创建了/data/html/index.html
文件,那可以把镜像制作成一个提供httpd服务的镜像。原镜像默认启动sh
命令,只需要把启动时运行的命令修改成httpd
相关命令即可。
root@node01:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d6e33d7acc4 busybox-httpd:v0.1 "sh" 5 minutes ago Up 5 minutes bbox-http-01
root@node01:~# docker container commit -p -m "run httpd" -c ‘CMD ["/bin/httpd","-f","-h","/data/html"]‘ bbox-http-01 busybox-httpd:v0.2
sha256:985f056d206d3b3c3e1b62c66bcda672c5daf902245d9cf62e27a5bdd1de5b37
root@node01:~# docker container run -d --name bbox-httpd-02 busybox-httpd:v0.2
97ca3d6118ecbbb8ad5d4ec611b7ec425b66a959b663ea8f3dd689931e8930f4
root@node01:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97ca3d6118ec busybox-httpd:v0.2 "/bin/httpd -f -h /d…" 8 seconds ago Up 6 seconds bbox-httpd-02
6d6e33d7acc4 busybox-httpd:v0.1 "sh" 11 minutes ago Up 11 minutes bbox-http-01
docker container commit -p -m "run httpd" -c ‘CMD ["/bin/httpd","-f","-h","/data/html"]‘ bbox-http-01 busybox-httpd:v0.2
,通过-c
选项可以修改容器启动时的运行命令。
root@node01:~# docker container inspect bbox-httpd-02 | grep -i ipaddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
root@node01:~# curl http://172.17.0.3
<h1>Hello Word!</h1>
已成功把busybox
镜像制作成了一个提供httpd
服务的镜像。
本地制作好的镜像可以上传到docker hub
,aliyun的镜像平台
或者私有的镜像仓库等,便于把镜像共享给他人使用。
那REPOSITORY
这个名称要与远程仓库名称与之对应,以推送到docker hub
为例子,首先需要注册一个docker hub
帐号,创建相应的仓库,如下图
那REPOSITORY
就应该是zhaochj/httpd
,那把能提供httpd
的busybox
镜像上传到docker hub
先对相应的镜像重新打上tag,以符合上传的名称要求
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 32 minutes ago 1.22MB
busybox-httpd v0.1 806601ab5565 47 minutes ago 1.22MB
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
root@node01:~# docker image tag busybox-httpd:v0.2 zhaochj/httpd:v0.1
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 35 minutes ago 1.22MB
zhaochj/httpd v0.1 985f056d206d 35 minutes ago 1.22MB
...
在上传前需要先login
root@node01:~# docker login -u zhaochj
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
root@node01:~# docker image push zhaochj/httpd:v0.1
The push refers to repository [docker.io/zhaochj/httpd]
aba5952cfa04: Pushed
8b84b15db17e: Pushed
50761fe126b6: Mounted from library/busybox
v0.1: digest: sha256:63ecaa4990fb60f8aab701d690e5ef12cb664491753fee0208d080ca9ee8c28c size: 941
推送完成后在docker hub
上就可以查看到
如果是大陆使用,建议使用aliyun的开发平台中的镜像服务。
本地镜像可以导出成一个压缩包,把此压缩包拷贝到其他主机后可以导入。
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 4 hours ago 1.22MB
zhaochj/httpd v0.1 985f056d206d 4 hours ago 1.22MB
busybox-httpd v0.1 806601ab5565 4 hours ago 1.22MB
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
# 将多个镜像打包导出
root@node01:~# docker image save -o myimages.gz busybox:latest busybox-httpd:v0.1
root@node01:~# ls
myimages.gz
root@node01:~# docker image rm busybox:latest busybox-httpd:v0.1
Untagged: busybox:latest
Untagged: busybox@sha256:9ddee63a712cea977267342e8750ecbc60d3aab25f04ceacfa795e6fce341793
Untagged: busybox-httpd:v0.1
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 4 hours ago 1.22MB
zhaochj/httpd v0.1 985f056d206d 4 hours ago 1.22MB
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
# 导入已打包的镜像
root@node01:~# docker image load -i myimages.gz
Loaded image: busybox:latest
Loaded image: busybox-httpd:v0.1
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 4 hours ago 1.22MB
zhaochj/httpd v0.1 985f056d206d 4 hours ago 1.22MB
busybox-httpd v0.1 806601ab5565 4 hours ago 1.22MB
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
标签:创建文件 run 导入 ocs 例子 ted hub 本地 ati
原文地址:https://blog.51cto.com/zhaochj/2536160