docker镜像
1.image(镜像)包含了启动容器所需要的文件系统及其内容作用,是创建
并启动容器,特点是分层构建,联合挂载(同时也是构建新镜像的核心)
容器在运行时,会在当前镜像最上级之上复制出一个可写层,运行完毕
后,该可写层会被删除;如果将该可写层数据保存,则一个新的镜象就
构建出来了。
2.镜象的制作方式有基于容器,Dockerfile,Dcoker Hub自动构建(基于Docker
file制作,将Dockerfile推送到GitHub仓库,通过Webhooks通知Docker HUb,
以此触发构建,并存入Docker Hub的仓库中)。
3.基于容器创建镜像(容器要储于运行中)
[root@localhost ~]# docker run --name web-based-busybox -it busybox
/ # ls
bin dev etc home proc root sys tmp usr var
/ # mkdir -p /data/html
/data/html # vi index.html
<h1>build image based container busybox!</h1>
注:启动一个容器,并创建一个静态网页
基于运行中的容器创建新镜像(创建过程中最好暂停容器(-p),防止数据丢失)
[root@localhost ~]# docker commit -p web-based-busybox
sha256:47505f92891d667c34cb8208f5664da696912fa6f00cb6e3929b2f16f731dbcc
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 47505f92891d 5 seconds ago 1.22MB
注:创建除了一个新镜像(无标签,无所诉仓库)
给创建的镜像添加标签
[root@localhost ~]# docker tag 47505f92891d web:v0.1-1
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
web v0.1-1 47505f92891d About a minute ago 1.22MB
注:一个镜像可以有多个标签,但是一个标签只能属于一个镜像
[root@localhost ~]# docker tag web:v0.1-1 web:latest
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
web latest 47505f92891d 2 minutes ago 1.22MB
web v0.1-1 47505f92891d 2 minutes ago 1.22MB
4.再次启动用于创建新镜像的容器(需要删除容器,可以添加--rm让容器运行完自动删除)
[root@localhost ~]# docker run --name web-based-busybox --rm -it busybox
/ # ls
bin dev etc home proc root sys tmp usr var
注:之前创建的/data/html/index.html数据没有(容器运行结束,数据会被删除)
5.通过新镜像启动容器
[root@localhost ~]# docker run --name web-based-busybox --rm -it web
/ # cat /data/html/index.html
<h1>build image based container busybox!</h1>
/ #
注:可以看到修改的数据保留了下来,新镜像创建成功
6.改变镜像启动后默认运行的命令(刚刚创建的镜像默认运行的还是‘sh’)
[root@localhost ~]# docker commit -a "namespace <test@test.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p web-based-busybox test/web:v0.1-2
sha256:5530414b24e5d3b2301a06cbe9c37ea853bcf62bce77c68f682ba5e57c1c1161
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
test/web v0.1-2 5530414b24e5 8 seconds ago 1.22MB
查看默认运行的命令
[root@localhost ~]# docker inspect test/web:v0.1-2
"Cmd": [
"/bin/httpd",
"-f",
"-h",
"/data/html"
],
7.基于创建好的镜像启动容器
[root@localhost ~]# docker run --name web-based-busybox --rm test/web:v0.1-2
绕过容器边界进入容器
[root@localhost ~]# docker exec -it web-based-busybox /bin/sh
/ # ps
PID USER TIME COMMAND
1 root 0:00 /bin/httpd -f -h /data/html
6 root 0:00 /bin/sh
12 root 0:00 ps
查看是否监听80端口
/ # netstat -an | grep 80
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 :::80 :::* LISTEN
访问80端口的网页(没有curl命令)
/ # wget -O - localhost
Connecting to localhost (127.0.0.1:80)
writing to stdout
<h1>build image based container busybox!</h1>
- 100% |**************************************************************************************| 46 0:00:00 ETA
written to stdout
/ #
8.镜像打包,可以通过打包镜像发送给需要使用镜像的主机使用
[root@localhost ~]# docker save -o allweb.tar.gz test/web web:latest busybox
注:-o 输出路径/包名
[root@localhost ~]# ls
allweb.tar.gz
清理掉现有镜像
[root@localhost ~]# docker image rm test/web:v0.1-2 web:latest busybox
[root@localhost ~]# docker load -i allweb.tar.gz
faeae25afe93: Loading layer [==================================================>] 2.56kB/2.56kB
Loaded image: test/web:v0.1-2
Loaded image: web:latest
Loaded image: busybox:latest
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
test/web v0.1-2 5530414b24e5 26 minutes ago 1.22MB
web latest 47505f92891d 53 minutes ago 1.22MB
busybox latest db8ee88ad75f 5 weeks ago 1.22MB
来源:https://blog.csdn.net/qq_40199698/article/details/100056805