Docker 启动容器
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 80w+ 字,讲解图 3365+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2700+ 小伙伴加入学习 ,欢迎点击围观
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 容器 :
可以看到,成功重启了一个终止状态的容器。