容器运行相关操作
容器运行分两种情况,一种是容器未创建,一种是容器已创建。
容器未创建
使用命令创建并运行容器: docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
例子: docker run -it ubuntu /bin/bash
docker run 后面可以添加选项,添加一些特殊设置。下面是常用option。
常用options:
- -d: 后台运行容器,并返回容器ID。在后台运行的一般是数据库之类的不需要交互的容器
- -p: 端口映射,将其运行在虚拟容器的端口,并将其映射到你的主机端口
- -i: 允许你对容器的标准输入进行交互。
- -t: 为容器重新分配一个伪输入终端。通常与-i合在一起使用。
- --name: 为容器指定名字,不能重复
- -P: 为容器分配一个高端口
- --rm: 容器退出后立即删除容器。这种必须前台运行,否则会直接删除容器
- -v : 绑定一个卷,格式为:-v 卷主机路径:容器内路径。(持久化要使用,暂时用不到)
实例演示:
-
后台运行Ubuntu:
docker run -d ubuntu -
容器8080端口映射到主机80端口:
docker run -p 80:8000 ubuntu -
交互运行Ubuntu:
docker run -it ubuntu -
为ubuntu容器指定name:
docker run -it --name ubuntu -
为nginx服务器启动一个容器分配随机端口 :
docker run -P -d nginx, 使用docker ps查看端口映射。 -
退出后删除Ubuntu实例:
docker run -it --rm ubuntu
这个表示将容器80端口暴露到主机的32769端口。
command命令
我们可以看到docker run -it ubuntu /bin/bash, 后面是可以添加命令的,这个命令会在创建容器后在容器中运行。
举个例子: docker run -it ubuntu /bin/bash, 执行bash命令,可以使其切换到bash命令行工具。
小贴士:
如果我们执行: docker run -it ubuntu echo "hhh", 它在打印完hhh后该容器将会关闭,这是为啥呢?
docker 在启动容器时,默认会以当前 shell 命令为容器的 PID 1 进程。
也就是说,当 shell 命令(如 ls)执行完毕后,PID 1 进程就退出了。
而当PID 1 进程退出的时候,整个容器也会随之退出。
所以我们要想不关闭容器,需要后面选择持久化的命令。(比如/bin/bash, /bin/sh)
更详细的参数介绍参照官网:Docker run reference | Docker Documentation
容器已创建
如果容器已经创建,我们就不要使用docker run命令了,因为额run命令每次使用都会重新创建一个容器。
查看容器
启动容器之前,我们需要知道我们有哪些容器。
我们可以使用命令: docker ps 查看正在运行的容器,
还有: docker ps -a,查看所有的容器:
启动容器
在查看容器小节中,我们可以看到最左边容器的ID,我们启动它就需要使用它的ID
启动容器的命令:
docker start [OPTIONS] CONTAINER [CONTAINER...]
例子: docker start 866c21ad9342
docker start 后面可以添加选项,
例子: docker start <Container ID>
下面是一些常见的option:
--attach , -a: 附加 STDIN、STDOUT 和 STDERR ,通常与-i一起使用。--interactive , -i: 允许你使用 Docker 模拟 tty ,使容器处于交互模式。--detach , -d: 在后台运行容器。--signal , -s: 使用一个信号来停止容器。格式为:SIGNAME或SIGNUM。
例子: docker start -a -i <Container ID>, 进入交互状态。
重启容器
重启容器命令: docker restart [OPTIONS] CONTAINER [CONTAINER...]
--signal-s: 这个意思是发送你指定的信号,容器收到后开始重启。--time,-t: 等待时间,表示在等待时间内重启,否则关闭容器
举例: docker restart --time 5 <Container ID> ,如果五秒内容器未重启,则容器被关闭。
关闭容器
关闭容器的命令: docker stop [OPTIONS] CONTAINER [CONTAINER...]
options:
--signal,-s: 指定关闭容器的信号--time,-t: 多少秒内关闭容器,否则强行关闭
例子: docker stop -t 5 <Container ID/> , 五秒内容器未关闭,则被强制关闭
容器启动之后才能使用的exec操作
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
该命令为容器启动之后才能执行的,它主要是为了对某容器进行命令的执行。
比如: docker exec -it <Container ID> /bin/sh -c "echo a && echo b"
注意: 这里的-c是必须要书写的,因为不写-c,第一条命令 /bin/sh会被读取为命令,后面的命令将不会被执行。
小贴士:
大家可能会发现即使使用了-it也不会进入交互式界面。官网原话:
The command started using docker exec only runs while the container’s primary process (PID 1) is running, and it is not restarted if the container is restarted.
只有主进程仍然运行的情况,才会不退出交互式界面。意思就是执行完echo a && echo b后,该进程无任务可做,就退出该exec命令了。
上面就是容器运行的基本操作,下一章介绍镜像的创建:【docker基础】: 镜像构建 - 掘金 (juejin.cn)