1.什么是守护式容器
- 能够长期运行
- 没有交互式会话
- 适合运行应用程序和服务
2.以守护形式运行容器
运行交互式容器时以Ctrl+P Ctrl+Q 来退出容器,此时容器还在后台继续运行,我们可以通过docker attach [name] 来重新进入容器
[root@aliyun ~]# docker start -i cjj01 root@4f38551cf3cf:/# // Ctrl+P Ctrl+Q 退出
[root@aliyun ~]# [root@aliyun ~]# docker ps // 可以查看正在运行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4f38551cf3cf ubuntu "/bin/bash" 31 minutes ago Up 57 seconds cjj01 [root@aliyun ~]# docker attach cjj01 root@4f38551cf3cf:/#
-
-t:在新容器内指定一个伪终端或终端。
-
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
3.使用run命令启动守护式容器
[root@aliyun ~]# docker run --name cjj02 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 74fb89116dac4410bd268c92a3c2a9507430c49f3e61795142cad9ffed565837 [root@aliyun ~]# docker logs cjj02 // 查看容器内的标准输出 hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world [root@aliyun ~]#
在输出中,我们没有看到期望的"hello world",而是一串长字符
74fb89116dac4410bd268c92a3c2a9507430c49f3e61795142cad9ffed565837
这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。
首先,我们需要确认容器有在运行,可以通过 docker ps 来查看
[root@aliyun ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 74fb89116dac ubuntu "/bin/sh -c 'while..." 2 minutes ago Up 2 minutes cjj02
CONTAINER ID:容器ID
NAMES:自动分配的容器名称
4.停止容器
docker stop [容器名]
docker kill [容器名]
[root@aliyun ~]# docker stop cjj02
cjj02
5.查看运行中容器的进程
[root@aliyun ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 74fb89116dac ubuntu "/bin/sh -c 'while..." 25 minutes ago Up 12 seconds cjj02 [root@aliyun ~]# docker top cjj02 UID PID PPID C STIME TTY TIME CMD root 9045 9028 0 17:38 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done root 9090 9045 0 17:39 ? 00:00:00 sleep 1 [root@aliyun ~]#
6.在运行中的容器中启动新的进程
exec 命令
[root@aliyun ~]# docker top cjj02 UID PID PPID C STIME TTY TIME CMD root 9045 9028 0 17:38 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done root 9090 9045 0 17:39 ? 00:00:00 sleep 1 [root@aliyun ~]# docker exec -i -t cjj02 /bin/bash root@74fb89116dac:/# // Ctrl+P Ctrl+Q 退出
[root@aliyun ~]# docker top cjj02
UID PID PPID C STIME TTY TIME CMD
root 9045 9028 0 17:38 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done
root 13786 13768 0 18:56 pts/1 00:00:00 /bin/bash
root 13867 9045 0 18:57 ? 00:00:00 sleep 1