Docker 启动容器

更新时间 2022-07-03 13:21:08

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 50w+ 字,讲解图 2200+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1700+ 小伙伴加入学习 ,欢迎点击围观

Docker 启动容器有两种方式:

  1. 基于镜像新建一个容器并启动;
  2. 将处于终止状态 (exited)的容器重新启动;

一、基于镜像新建容器并启动

通过如下命令来启动容器:

docker run IMAGE:TAG

参数说明:

  • IMAGE: 镜像名称;
  • TAG: 标签,镜像版本号;

举个例子🌰,比如想启动一个 ubuntu 容器, 并通过终端输出 Hello world

docker 启动容器docker 启动容器

执行命令如下:

docker run ubuntu:latest /bin/echo 'Hello world'

docker 启动 ubuntu 容器并输出 hello worlddocker 启动 ubuntu 容器并输出 hello world

注意,上面这行命令运行容器,在输出 Hello world 后就会终止运行。如果想以交互的方式运行容器,执行如下命令:

docker run -t -i ubuntu:latest /bin/bash

以交互的方式运行 docker 容器以交互的方式运行 docker 容器

参数说明:

  • -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 以后台的方式运行容器docker 以后台的方式运行容器

后台运行的容器可以通过 docker logs 命令来查看日志:

docker container logs [container ID or NAMES]

二、启动终止状态的容器

执行如下命令,可以将已经终止 (exited)运行的容器重启。

docker container start [container ID or NAMES]

测试一波好不好使,先通过 docker ps 命令获取正在运行的容器:

获取 docker 容器 id获取 docker 容器 id

小哈本地有个 Redis 容器正在运行,先拿到容器 ID 或者容器名称,执行 docker stop 停止它后,再执行 docker container start 命令重启这个 Redis 容器 :

重启 redis 容器重启 redis 容器

可以看到,成功重启了一个终止状态的容器。