Skip to content

运行容器

docker create

根据镜像生成一个新的容器,仅是生成容器,并没有启动。

更常用的是docker run

启停

docker start

启动一个或者多个容器,docker start CONTAINER1 CONTAINER2...

docker stop

启动一个或者多个容器,docker stop CONTAINER1 CONTAINER2...

docker kill

杀死一个或者多个容器,docker kill CONTAINER1 CONTAINER2...

docker restart

重启一个或者多个容器,docker restart CONTAINER1 CONTAINER2...

docker pause

暂停一个或者多个容器中的所有进程,docker restart CONTAINER1 CONTAINER2...

docker unpause

恢复一个或者多个容器中的所有暂停进程,docker restart CONTAINER1 CONTAINER2...

docker run

创建、启动容器并执行相应的命令。

分配名字和伪TTY (–name, -it)

docker run --name test -it debian
docker run --name test -it debian

连接到STDIN/STDOUT/STDERR (-a)

-a标志告诉docker run 绑定到容器的STDIN,STDOUT或STDERR。 这使得可以根据需要操纵输出和输入。

docker run -a stdout ubuntu echo test
docker run -a stdout ubuntu echo test

完整容器能力 (–privileged)

docker run -t -i --privileged ubuntu bash
docker run -t -i --privileged ubuntu bash

--privileged 标志为容器提供了所有功能,它还解除了设备cgroup控制器强制执行的所有限制。 换句话说,容器几乎可以完成主机可以执行的所有操作。 此标志存在以允许特殊用例,例如在Docker中运行Docker。

设置工作目录 (-w)

docker  run -w /path/to/dir/ -i -t  ubuntu pwd
docker  run -w /path/to/dir/ -i -t  ubuntu pwd

-w 允许命令在给定的目录中执行,这里是 /path/to/dir/。 如果路径不存在,则在容器内创建。

挂载卷 (-v, –read-only)

docker  run  -v D:\docker\data:/var/data -w /var/data -i -t  ubuntu pwd
docker  run  -v D:\docker\data:/var/data -w /var/data -i -t  ubuntu pwd

发布或者暴露端口 (-p, –expose)

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

这将容器的端口8080绑定到主机的127.0.0.1上的TCP端口80。还可以指定udp和sctp端口。

docker run --expose 80 ubuntu bash
docker run --expose 80 ubuntu bash

这会暴露容器的端口80,而不会将端口发布到主机系统接口。

设置环境变量(-e, –env, –env-file)

可以通过-e, --env, --env-file 设置容器的环境变量

docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash

本地已经export的环境变量,可以不用=号和值:

export VAR1=value1
export VAR2=value2

$ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR
VAR1=value1
VAR2=value2
export VAR1=value1
export VAR2=value2

$ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR
VAR1=value1
VAR2=value2

在容器上设置元数据(-l, –label, –label-file)

可以通过-l, --label, --label-file 设置容器的label:

docker run -l my-label --label com.example.foo=bar ubuntu bash
docker run -l my-label --label com.example.foo=bar ubuntu bash

将容器连接到网络(–network)

docker run -itd --network=my-net busybox
docker run -itd --network=my-net --ip=10.10.9.75 busybox
docker run -itd --network=my-net busybox
docker run -itd --network=my-net --ip=10.10.9.75 busybox

从容器挂载卷(–volumes-from)

docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd

docker ps

列出容器,同docker container ls 默认列出运行的容器,未运行的不展示,如果需要全部列出,可以使用参数-all或者-a

docker exec

docker exec 命令在正在运行的容器中运行新命令。

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

docker top CONTAINER

显示容器的运行进程

docker attach [OPTIONS] CONTAINER

docker attach [OPTIONS] CONTAINER
docker attach [OPTIONS] CONTAINER

将本地标准 input,output 和 error 流附加到正在运行的容器。

使用 docker attach 将终端的标准 input,output 和 error (或三者的任意组合)通过容器的ID或名称附加到正在运行的容器中。这允许您查看其正在进行的输出或以交互方式控制它,就像命令直接在您的终端中运行一样。

docker logs

注意:此命令仅适用于使用 json-file 或 journald 日志记录驱动程序启动的容器。

docker logs命令批量检索执行时存在的日志。 docker logs --follow 命令将持续从容器的 STDOUT 和 STDERR 流式传输新输出。

docker ports

列出容器的端口映射或特定映射

docker port CONTAINER [PRIVATE_PORT[/PROTO]]
docker port CONTAINER [PRIVATE_PORT[/PROTO]]

实例:

$ docker port test
$ docker port test 7890/tcp
$ docker port test 7890/udp
$ docker port test 7890
$ docker port test
$ docker port test 7890/tcp
$ docker port test 7890/udp
$ docker port test 7890

docker rm

删除一个或者多个容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm [OPTIONS] CONTAINER [CONTAINER...]

制作镜像

详细可以参考:Dockerfile 指令详解

docker-compose

可以参考compose 文件的结构和版本