卷个 Docker 容器 ~
点击关注公众号,Java干货及时送达👇
大家好,我是小哈~
今年打算给个站犬小哈教程认真的更新几部 Java 相关的入门教程,方便感兴趣的小伙伴学习,目前来说这个站的内容还是太少了。所以,准备把以前立过的 Flag 重新捡起来,《Docker 教程》、《Mybatis-Plus 教程》、《Spring Boot 教程》《Spring Cloud 教程》等都已在规划中,嗯,小哈会尽量多抽时间整起来~
本文主要带大家入门 Docker 容器部分,所有小节都以发布在个站犬小哈教程上。
本文首发至犬小哈教程:www.quanxiaoha.com
目录如下:
启动容器; 查看容器信息; 进入容器; 停止容器; 重启容器; 导入&导出容器; 删除容器;
Docker 启动容器
Docker 启动容器有两种方式:
基于镜像新建一个容器并启动; 将处于终止状态 ( exited
)的容器重新启动;
一、基于镜像新建容器并启动
通过如下命令来启动容器:
docker run IMAGE:TAG
参数说明:
IMAGE
: 镜像名称;TAG
: 标签,镜像版本号;
举个例子🌰,比如想启动一个 ubuntu
容器, 并通过终端输出 Hello world
:
执行命令如下:
docker run ubuntu:latest /bin/echo 'Hello world'
注意,上面这行命令运行容器,在输出 Hello world
后就会终止运行。如果想以交互的方式运行容器,执行如下命令:
docker run -t -i ubuntu:latest /bin/bash
参数说明:
-t
: 让 Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上;-i
: 让容器的标准输入保持打开;
如此,就可以直接在终端执行命令了:
root@c355025f2241:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@c355025f2241:/# date
Sun Jul 3 03:47:41 UTC 2022
1.1 拓展知识:执行 docker run
后,Docker 都干了些啥?
检查本地是否存在指定的镜像,不存在就从 registry 下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
1.2 以 daemon 守护态方式运行容器
实际应用中,需要让容器以后台的方式运行,以此保证一个稳定的服务。
运行容器时添加 -d
参数可以让容器以后台的方式运行,例如启动一个 Ubuntu 后台容器,并每隔一秒打印 Hello world
,命令如下:
docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"
执行成功后,会返回一个容器 ID。
后台运行的容器可以通过 docker logs
命令来查看日志:
docker container logs [container ID or NAMES]
二、启动终止状态的容器
执行如下命令,可以将已经终止 (exited
)运行的容器重启。
docker container start [container ID or NAMES]
测试一波好不好使,先通过 docker ps
命令获取正在运行的容器:
小哈本地有个 Redis 容器正在运行,先拿到容器 ID 或者容器名称,执行 docker stop
停止它后,再执行 docker container start
命令重启这个 Redis 容器 :
可以看到,成功重启了一个终止状态的容器。
Docker 查看容器
查看正在运行中、停止运行的容器
docker ps
: 查看正在运行中的容器;docker ps -a
: 查看所有容器,包括运行中的、已经停止运行的容器。
返回字段说明:
CONTAINER ID : 容器 ID; IMAGE : 创建容器时使用的镜像; COMMAND : 容器最后运行的命令; CREATED : 容器创建时间; STATUS : 容器状态; PORTS : 端口信息; NAMES : 容器名:和容器 ID 一样,可以标识容器的唯一性,同一台宿主机上不允许有同名容器存在,否则会冲突;
拓展命令
docker ps -l
: 查看最新创建的容器,注意,只列出最后创建的容器。docker ps -n=2
:-n=2
指定列出最新创建的 2 个容器。
Docker 进入容器
要想进入到已运行的 Docker 容器,主要有如下两种方式:
使用 docker exec
命令;使用 docker attach
命令;
一、exec
命令(推荐)
Docker 在 1.3.X 版本后开始支持 exec
命令进入容器,命令如下:
docker exec -it [container ID or NAMES]
举个例子🌰,比如想进入到本地的 Redis 容器中:
可以通过容器 ID 或者名称进入容器:
docker exec -it redis /bin/bash
要想退出容器,只需键入 exit
命令回车即可:
(base) ➜ ~ docker exec -it redis /bin/bash
root@023d93457910:/data#
root@023d93457910:/data#
root@023d93457910:/data#
root@023d93457910:/data# exit
exit
注意:
exec
命令和下面attach
命令的区别在于,当使用exit
退出容器时,不会导致容器停止。
二、attach
命令
执行命令格式如下:
docker attach [container ID or NAMES]
注意:这种方式在执行
exit
命令退出容器时,会导致容器停止运行。
Docker 停止&关闭容器
有以下两种方式关闭一个正在运行的 Docker 容器:
一、stop
优雅模式
docker container stop [container ID or NAMES]
# 简写模式(可省略关键字 container )
docker stop [container ID or NAMES]
举个例子🌰,比如想要停止下图中的 Ubuntu 容器:
通过容器 ID 或者容器名称都可以停止容器,命令如下:
# 通过容器 ID 关闭容器
docker stop 4e6fc78cc0c4
二、kill
强制模式
kill
命令强制关闭容器:
docker container kill [container ID or NAMES]
# 简写模式(可省略关键字 container )
docker kill [container ID or NAMES]
对于交互形式运行的容器如何关闭?
前面小节中说到的交互形式运行的容器,可以通过输入 exit
或者 Ctrl+d
退出容器。
查看已经停止运行的容器
执行如下命令,可以看到那些已经停止运行的容器:
docker container ls -a
想要重启已经停止运行的容器,命令如下:
docker container start [container ID or NAMES]
另外,docker container restart
命令会将一个已经运行中的容器重新启动。
Docker 重启容器
执行如下命令重启 Docker 容器:
# 不管容器是否启动,直接重启
docker restart [container ID or NAMES]
举个例子🌰,比如想要重启下面的 Redis 容器:
执行如下命令即可:
# 通过容器 ID 或者名称都可以
docker restart redis
-t
参数
-t
: 设置关闭容器的限制时间,若超时未能关闭,则使用 kill
命令强制关闭,默认值为 10s,这个时间用于容器保存自己的状态。
# 限时 5s 关闭 redis 容器,然后重启
docker restart -t=5 redis
Docker 导出&导入容器
一、导出容器
使用 docker export
命令可以导出容器,比如想导出下面的 Redis 容器:
docker export 9e8d11aeef0c > redis.tar
导出的 tar
包快照存于当前目录下。
二、导入容器快照
使用 docker import
命令可以将快照导入为镜像,例如:
cat redis.tar | docker import - test/redis:v1.0
导入成功后,就可以看到新生成的镜像了:
除了通过快照的方式导入容器,还可以通过指定 URL 或者某个目录来导入,例如:
docker import http://example.com/exampleimage.tgz example/imagerepo
Docker 删除容器
本小节中将学习如何删除 Docker 容器。
一、删除容器
执行如下命令可以删除一个已经停止运行的容器:
docker container rm [container ID or NAMES]
# 简写模式(可省略关键字 container )
docker rm [container ID or NAMES]
举个例子🌰,比如想要删除下面的 Redis 容器:
执行如下命令即可:
# 通过容器 ID 删除
docker rm 023d93457910
强制删除容器
添加 -f
参数可强制删除一个正在运行的容器:
如图示,强制删除这个 Redis 容器:
# 通过容器 ID 强制删除容器
docker rm -f 207aaf2e3384
二、删除所有已经停止运行的容器
如何一次性删除所有已经停止的容器呢?
用 docker container ls -a
命令可以查看所有已经创建的包括停止运行的容器,如果数量太多要一个个删除会很麻烦,执行如下命令即可删除掉所有已经停止运行的容器:
docker container prune
结语
本文主要带大家上手学习了 Docker 容器相关的操作,并都配上的图文讲解,希望对正在学习 Docker 容器的小伙伴有所帮助,下期见啦~
1. 快速搭建一个网关服务,动态路由、鉴权的流程,看完秒会(含流程图)
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。
PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
点“在看”支持小哈呀,谢谢啦😀