运行交互式的容器
我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
各个参数解析:
- -t: 在新容器内指定一个伪终端或终端
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互
我们可以通过运行 exit
命令或者使用 CTRL + D
来退出容器
root@0123ce188bd8:/# exit
exit
root@runoob:~#
启动容器(后台模式)
# 使用以下命令创建一个以进程方式运行的容器
# 注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
在输出中,我们没有看到期望的 "hello world",而是一串长字符
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么
首先,我们需要确认容器有在运行,可以通过 docker ps
来查看:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de23324fd83c ubuntu:15.10 "/bin/sh -c 'while t…" 8 seconds ago Up 8 seconds flamboyant_lovelace
CONTAINER ID: 容器 ID
IMAGE: 使用的镜像
COMMAND: 启动容器时运行的命令
CREATED: 容器的创建时间
STATUS: 容器状态
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)
NAMES: 容器名称
在宿主主机内使用 docker logs 命令,查看容器内的标准输出
runoob@runoob:~$ docker logs 2b1b7a428627
使用 docker stop
命令来停止容器
Docker 运行 Node.js
docker run -itd --name node-test node
docker exec -it node-test /bin/bash
# 上两行的缩写
docker run -it node:16.20.2 /bin/bash
# 区别是用一行命令运行的容器,当退出时,同时会停止容器运行,而两行命令的则退出 bash 交互,不会导致容器的停止
Docker 运行 Nginx
docker run --name nginx-test -p 8080:80 -d nginx
总结:
docker run:启动容器
--name: 为容器指定一个唯一的名称,可以通过名称来引用容器,而不是使用容器的 ID
-p:映射端口,[宿主主机端口(访问端口)] :[nginx 容器内 listen 的端口]
-v :绑定挂载配置 [宿主主机路径] : [容器内路径]
-d:后台运行,返回运行成功的镜像 ID
docker run --name xxxx -itd node:16.20.2 /bin/bash
docker run --name xxxx -p 5069:80 -d nginx:latest