docker 镜像的制作
多数情况下,我们做镜像是基于别人已存在的某个基础镜像来实现的,我们把它称为base image。比如一个纯净版的最小化的centos、ubuntu或debian。
那么这个最小化的centos镜像从何而来呢?其实这个基础镜像一般是由Docker Hub的相关维护人员,也就是Docker官方手动制作的。这个基础镜像的制作对于Docker官方的专业人员来说是非常容易的,但对于终端用户来说就不是那么容易制作的了。
docker hub
在docker hub创建自己的仓库
docker镜像的获取
# docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
基于容器镜像的制作
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
[root@localhost ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
bdbbaa22dec6: Pull complete
Digest: sha256:6915be4043561d64e0ab0f8f098dc2ac48e077fe23f488ac24b665166898115a
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
[root@localhost ~]# docker run --name b1 -it busybox
/ # ls
bin dev etc home proc root sys tmp usr var
/ # mkdir data
/ # echo 'Busybox page test.' > data/index.html
/ # cat data/index.html
Busybox page test.
在创建镜像时,我们不能关闭容器,必须使其处于运行状态,所以我们必须要另起一个终端,然后执行
[root@localhost ~]# docker commit -p httpd
sha256:b84e7e2972700a24f675182818666bf22c6c0cd95bf30643513020d4d9f3920d
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> b84e7e297270 3 seconds ago 1.22MB
busybox latest 6d5fcfe5ff17 6 weeks ago 1.22MB
[root@localhost ~]# docker tag b84e7e297270 seancheng1002/b1:v0.1
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
seancheng1002/b1 v0.1 b84e7e297270 58 seconds ago 1.22MB
busybox latest 6d5fcfe5ff17 6 weeks ago 1.22MB
使用新生成的镜像创建容器
[root@localhost ~]# docker run --name t1 -it seancheng1002/httpd:v0.1
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # ls
bin data dev etc home proc root sys tmp usr var
/ # ls data/
index.html
/ # cat data/index.html
Busybox page test.
由此可见,新生成的镜像中是包含了新增的内容的,但是此时有一个问题,那就是容器默认要启动的进程是什么?在这里,默认情况下是启动的sh进程,但我们是要启动一个http站点,所以我们要在创建镜像时将容器默认启动的进程设为httpd,这样一来我们就可以通过新生成的镜像来快速构建一个简单的http站点了。
使用docker inspect命令查看b1容器启动的默认进程是什么
[root@localhost ~]# docker inspect b1
[
...此处省略N行
"Cmd": [
"sh"
],
...此处省略N行
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
...此处省略N行
]
重新生成镜像并上传
[root@localhost ~]# docker commit -a 'hzw<hzw199788@qq.com>' -c 'CMD ["/bin/httpd","-f","-h","/data"]' -p b1 plunk202043/httpd:v0.2
[root@localhost ~]# docker push plunk202043/httpd
98708886e332243bb64dac32f7e5210c8219e30495150c8fde4938d5d748ada7
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
98708886e332 plunk202043 "/bin/httpd -f -h /d…" 7 seconds ago Up 5 seconds t2
a2e954da2011 busybox "sh" About an hour ago Up About a minute b1
访问该网页
[root@localhost ~]# curl 172.17.0.3
hello world