1.在镜像仓库拉取buybox镜像文件到本地
[root@docker ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
0669b0daf1fb: Pull complete
Digest: sha256:b26cd013274a657b86e706210ddd5cc1f82f50155791199d29b9e86e935ce135
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 8326be82abe6 2 days ago 166MB
busybox latest 83aa35aa1c79 3 weeks ago 1.22MB
nginx latest 6678c7c2e56c 4 weeks ago 127MB
2. 运行镜像文件busybox使其成为容器并给予名字为b1,并在容器中创建data目录,写入hehe到data/index.html里面
[root@docker ~]# docker run --name b1 -it busybox
/ # mkdir data
/ # echo 'hehe' > data/index.html
/ # cat data/index.html
hehe
3.在创建镜像时,我们不能关闭容器,必须使其处于运行状态,所以我们必须要另起一个终端,然后执行
将正在运行的b1容器创建一个新的镜像文件,并将其命名为dockerzrl/b1版本v0.1
root@docker ~]# docker commit -p b1
sha256:36a839a59f0e1a20283b82247d3918528c9e9d8103c2f1f72db750a5a4c1cbfb
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 36a839a59f0e 3 seconds ago 1.22MB
httpd latest 8326be82abe6 2 days ago 166MB
busybox latest 83aa35aa1c79 3 weeks ago 1.22MB
nginx latest 6678c7c2e56c 4 weeks ago 127MB
[root@docker ~]# docker tag 36a839a59f0e dockerzrl/b1:v0.1
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerzrl/b1 v0.1 36a839a59f0e About a minute ago 1.22MB
httpd latest 8326be82abe6 2 days ago 166MB
busybox latest 83aa35aa1c79 3 weeks ago 1.22MB
nginx latest 6678c7c2e56c 4 weeks ago 127MB
4.在docker Hub上创建b1仓库,然后将做好的镜像文件放进仓库中
5.在服务器上登录docker并将创建的新的镜像文件推到docker hub中的仓库里面
[root@docker ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: dockerzrl
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@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerzrl/b1 v0.1 36a839a59f0e 16 minutes ago 1.22MB
httpd latest 8326be82abe6 2 days ago 166MB
busybox latest 83aa35aa1c79 3 weeks ago 1.22MB
nginx latest 6678c7c2e56c 4 weeks ago 127MB
[root@docker ~]# docker push dockerzrl/b1:v0.1
The push refers to repository [docker.io/dockerzrl/b1]
254175324348: Pushed
a6d503001157: Pushed
v0.1: digest: sha256:d61f4aa9833fcbd921e085d80fc5d0926c74e177199634c94fd5bb64c6035361 size: 734
使用新生成的镜像创建容器,然后可以看出之前在容器中写入的内容
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerzrl/b1 v0.1 36a839a59f0e 29 minutes ago 1.22MB
httpd latest 8326be82abe6 2 days ago 166MB
busybox latest 83aa35aa1c79 3 weeks ago 1.22MB
nginx latest 6678c7c2e56c 4 weeks ago 127MB
[root@docker ~]# docker run --name t1 -it dockerzrl/b1:v0.1
/ # ls
bin data dev etc home proc root sys tmp usr var
/ # cat data/index.html
hehe
/ #
默认情况下是启动的sh进程,但我们是要启动一个http站点,所以我们要在创建镜像时将容器默认启动的进程设为httpd,这样一来我们就可以通过新生成的镜像来快速构建一个简单的http站点了。
[root@docker ~]# docker container inspect t1
...此处省略n行
],
"Cmd": [
"sh"
],
将正在运行的b1容器重新创建一个新的镜像文件,并将其命名为dockerzrl/b1版本v0.2,并指定邮件,以及cmd为/bin/httpd
[root@docker ~]# docker commit -a 'sean <724306579@qq.com>' -c 'CMD ["/bin/httpd","-f","-h","/data"]' -p b1 dockerzrl/b1:v0.2
sha256:dc8d237007e467a8733eee3a32e4225f73170c77cc73ff4c6f12a70bbc7fd317
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerzrl/b1 v0.2 dc8d237007e4 9 seconds ago 1.22MB
dockerzrl/b1 v0.1 36a839a59f0e 54 minutes ago 1.22MB
httpd latest 8326be82abe6 2 days ago 166MB
busybox latest 83aa35aa1c79 3 weeks ago 1.22MB
nginx latest 6678c7c2e56c 4 weeks ago 127MB
将新创建的镜像文件推到docker hub个人仓库里面
[root@docker ~]# docker push dockerzrl/b1:v0.2
The push refers to repository [docker.io/dockerzrl/b1]
254175324348: Layer already exists
a6d503001157: Layer already exists
v0.2: digest: sha256:d99685a234cba6d9f6654ddd6b8b4490a0ed984010f81909a4d00db2306f4eb7 size: 734
使用新生成的镜像创建容器
[root@docker ~]# docker run --name t2 -d dockerzrl/b1:v0.2
d4e208254ab54e2181bff80f5f61165dd370bb347c593fba0b040853867bb559
[root@docker ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4e208254ab5 dockerzrl/b1:v0.2 "/bin/httpd -f -h /d…" 7 seconds ago Up 6 seconds t2
1d3abe56b8dc busybox "sh" About an hour ago Up About an hour keen_wozniak
查询新容器t2的详细信息,获取ip并访问
[root@docker ~]# docker inspect t2
...此处略省n行
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "0c6deef8992e2eaf0f693ea4d21fd96a392a7dfaa6036f54bba0b4b73ba06dc4",
"EndpointID": "240b881a9f130a3f0135685334fb6956a02960156f919a1829e1bdef0534b348",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.3", ### 容器t2ip
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:03",
"DriverOpts": null
}
}
}
}
]
[root@docker ~]# curl 172.18.0.3
hehe