详解docker命令行参数含义

偏向技术
/ 0 评论 / 143 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年03月31日,已超过1334天没有更新,若内容或图片失效,请留言反馈。

1. docker run -a, --attach

把指定的数据流(如 STDOUT 之类)连接至终端。若未指定,则默认连接 stdout 和stderr。若数据流未指定,而容器以交互模式(-i)启动,则 stdin 也会被连接至终端。此选项与 -d 选项不兼容。

2. docker run -d, --detach

使容器在“分离”模式下运行。容器会在后台运行,而命令的返回值是容器的 ID。

3. docker run -e, --env

设置容器内的环境变量。例如:

shell
$ docker run -e var1=val -e var2="val 2" debian env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=b15f833d65d8
var1=val
var2=val 2
HOME=/root
123456

此外,--env-file 选项可以将文件传入环境变量。

4. docker run -i, --interactive

保持 stdin 打开(即使它没有被连接至终端)。一般与 –t 同时使用,用作启动交互式会话的容器。

5. docker run -t, --tty

分配一个伪终端(pseudo-TTY)。通常与 -i 同时使用,用来启动交互式容器。

6. docker run --restart

配置 Docker 在什么情况下尝试重新启动已退出的容器。参数为 no 意味着永远不会尝试重新启动容器;always 指不管退出状态是什么,总会尝试重新启动;on-failure 仅当退出状态不为 0 的时候才会尝试重启 ,并且可以追加一个可选参数,指定尝试重启的次数,超过重启次数就会放弃(如果没有指定,那就一直重试)。例如,docker run--restart on-failure:10 postgres 将启动 postgres 容器,并当退出值不为 0 的时候,尝试重启最多 10 次。

7. docker run -p, --publish

“发布”容器的端口,使主机能访问它。若没有指定主机端口,则会随机分配一个高端口,可通过 docker port 命令查看分配了哪个端口。还可以指定端口是在主机的哪个网络接口开放。

shell
docker run -d -p 8000:80 nginx
1

-p 8000:80参数是告诉Docker将主机的8000端口转发至容器的80端口

-P(注意是大写)选项是告诉Docker自动选择一个主机上未使用的端口,比如

shell
$ ID=$(docker run -d -P nginx)
$ docker port $ID 80
0.0.0.0:32771
123

8. docker run -P, --publish-all

“发布”所有已指定为开放(exposed)的容器端口,使主机能访问它们。每个容器端口均对应一个随机挑选的高端口。docker port 命令可以用来查看端口之间的映射关系。

9. docker run -it

进入容器内,比如

shell
$ docker run -it IMAGE /bin/bash # IMAGE镜像名称
1

10. docker run --name NAME

NAME是指容器的名称,之后,其他 Docker 命令便可以使用该名称来称呼这个容器。

11. docker run --link CONTAINER:ALIAS

建立一个与指定容器连接的内部网络接口,CONTAINER 是目标容器的名称,ALIAS(别名)是主容器用来称呼目标容器的一个本地名称。被连接的容器称为目标容器,而容器被启动的一方称为主容器(因为它是负责建立连接的一方)。比如:

注意:容器连接时会暴露环境变量

shell
$ docker run -d --name myredis redis
c9148dee046a6fefac48806cd8ec0ce85492b71f25e97aae9a1a75027b1c8423
$ docker run --link myredis:redis debian env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=f015d58d53b5
REDIS_PORT=tcp://172.17.0.22:6379
REDIS_PORT_6379_TCP=tcp://172.17.0.22:6379
REDIS_PORT_6379_TCP_ADDR=172.17.0.22
REDIS_PORT_6379_TCP_PORT=6379
REDIS_PORT_6379_TCP_PROTO=tcp
REDIS_NAME=/distracted_rosalind/redis
REDIS_ENV_REDIS_VERSION=3.0.3
REDIS_ENV_REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.3.tar.gz
REDIS_ENV_REDIS_DOWNLOAD_SHA1=0e2d7707327986ae652df717059354b358b83358
HOME=/root
123456789101112131415

12. docker run --rm

退出时自动删除容器。不能与 -d 选项同时使用,比如:

shell
$ docker run --rm debian ls
1

13. docker run -h, --hostname Name

Name是主机名称,比如:

shell
$ docker run -it -h test debian /bin/bash
1

14. docker run -v, --volumn

设置数据卷,比如:

shell
$ docker run -it --name container-test -h CONTAINER -v /data debian /bin/bash
root@CONTAINER:/# ls /data
root@CONTAINER:/#
123

这样,容器中的/data目录便成为了一个数据卷,

的/data目录中的所有文件将被复制到数据卷内。新打开一个shell,找出数据卷在主机上的实际位置:

shell
$ docker inspect -f {{.Mounts}} container-test
[{5cad... /mnt/sda1/var/lib/docker/volumes/5cad.../_data /data local true}]
12

在这个例子中,容器的 /data/ 卷仅仅是一个指向主机中 /var/lib/docker/volumes/5cad…/_data 目录的连接。为了证明这一点,我们可以在主机上添加一个文件到那个目录:

shell
$ sudo touch /var/lib/docker/volumes/5cad.../_data/test-file
1

在容器中能立刻看到它:

shell
$ root@CONTAINER:/# ls /data
test-file
12

设置数据卷的第二种方法是通过在Dockerfile中使用VOLUMN指令:

dockerfile
FROM debian
VOLUME /data
12

这个做法与执行 docker run 时提供 -v /data 参数的效果是相同的。需要注意的是,如果在Dockerfile中VLOLUMN指令之后,对该数据卷进行修改,将不会达到预期中的效果。

设置数据卷的第三种方法是对docker run命令的-v选项进行扩展,命令格式是:

shell
$ docker run -v HOST_DIR:CONTAINER_DIR
# HOST_DIR 为主机目录,CONTAINER_DIR 为容器目录
# example
$ docker run -v /home/adrian/data:/data debian ls /data
1234

如果容器中已经有/data目录,那么/home/adrian/data目录中的内容将会被隐藏

15. docker run --volumes-from CONTAINER

CONTAINER是已存在的容器名称,比如:

shell
$ docker run -it -h NEWCONTAINER --volumes-from container-test debian /bin/bash 
root@NEWCONTAINER:/# ls /data
test-file
root@NEWCONTAINER:/#
1234

需要注意的是,与卷关联的那个容器(在刚才的例子中,就是container-test)无论正在运行与否,刚才的命令都能使用。只要至少存在这一个容器与卷关联,那么卷就不会被删除。

16. docker run --expose

与 Dockerfile 的 EXPOSE 指令功能一样。指定容器将会使用的端口或端口范围,但并不会把端口打开。只有与 -P 参数同时使用,以及在连接容器时,才有真正意义。

17. docker run --entrypoint

把参数指定为容器的入口(entrypoint),覆盖任何 Dockerfile 中的 ENTRYPOINT 指令。

18. docker run -u, --user

设置命令运行时所使用的用户。可以以用户名或 UID 指定。此选项会覆盖 Dockerfile 中的 USER 指令。

19. docker run -w, --workdir

将参数的路径设置为容器的工作目录。此选项会覆盖 Dockerfile 中的 WORKDIR 指令。

20. docker attach [OPTIONS] CONTAINER

attach 命令允许用户查看容器内的主进程,或与它进行交互。比如:

shell
$ ID=$(docker run -d debian sh -c "while true; do echo 'tick'; sleep 1; done;") 
$ docker attach $ID
tick
tick
tick
tick
123456

21. docker create

从镜像创建容器,但不启动它。与 docker run 大部分参数相同。docker start 命令可以用来启动容器。

22. docker cp

在容器和主机之间复制文件和目录。

23. docker exec

在容器中运行一个命令。可用于执行维护工作,或替代 SSH 用作登入容器。比如:

shell
$ ID=$(docker run -d debian sh -c "while true; do sleep 1; done;")
$ docker exec $ID echo "Hello"
Hello 
$ docker exec -it $ID /bin/bash
root@5c6c32041d68:/# ls
bin dev home lib64 mnt proc run selinux sys usr
root@5c6c32041d68:/# exit
exit
12345678

24. docker kill

发送信号给容器中的主进程(PID 1)。默认发送 SIGKILL 信号,这将导致容器立即退出。另外,发送的信号可以通过 -s 选项指定。该命令会返回容器的 ID。

25. docker pause

暂停容器内的所有进程。进程不会接收到关于它们被暂停的任何信号,因此它们无法执行正常结束或清理的程序。进程可以通过 docker unpause 命令重启。docker pause 的底层利用 Linux 的 cgroup freezer 功能实现。这个命令与 docker stop 不同,docker stop会将所有进程停止,并对进程发送信号,让它们察觉得到。

26. docker restart

重新启动一个或多个容器。大致相当于先对容器执行 docker stop,然后执行 dockerstart。-t 为一个可选参数,它指定一个等待时间,即容器被 SIGTERM 信号杀掉之前,让容器有多少时间关闭。

27. docker rm

删除一个或多个容器。返回值是删除成功的容器名称或 ID。默认情况下,docker rm 不会删除任何数据卷。-f 参数可以用来删除运行中的容器,而 -v 参数会删除由容器创建的数据卷(只要它们不是绑定挂载,或正被其他容器使用)。

比如,要删除所有已停止的容器:

shell
$ docker rm $(docker ps -aq) 
b7a4e94253b3
e33da73c275b
f47074b60757
1234

28. docker start

启动一个或多个已停止的容器。可以用来重新启动已退出的容器,或启动由 dockercreate 创建但从未启动的容器。

29. docker stop

停止(但不删除)一个或多个容器。对容器执行 docker stop 后,它的状态将转变为“已退出”。-t 为一个可选参数,它指定一个等待时间,即容器被 SIGTERM 信号杀掉之前,让容器有多少时间关闭 。

30. docker unpause

重启先前被 docker pause 命令暂停的容器。

31. docker info

打印 Docker 系统和主机的各种信息。

32. docker help

把一个子命令作为参数,打印有关该子命令的使用方法和帮助信息。相当于运行命令时提供 --help 参数。

33. docker version

打印 Docker 客户端和服务器版本,以及编译时使用的 Go 版本。

34. docker diff

对比容器所使用的镜像,显示容器的文件系统的变化

35. docker events

打印守护进程的实时事件。键入 Ctrl-C 退出。

36. docker inspect

把容器或镜像作为参数,获取它们的详细信息。这些信息包括大部分配置信息、联网设置以及数据卷的映射信息 。这个命令接受 -f 参数,让用户提供一个 Go 模板,对输出结果进行格式编排和信息过滤。

37. docker logs

输出容器的“日志”,也就是曾经输出到容器中的 STDERR 或 STDOUT 的内容。

38. docker port

把容器作为参数,列出它的端口映射信息。还可以指定要查看的容器内部端口和协议。常用于执行 docker run -P IMAGE 命令之后查看已分配的端口。

39. docker ps

提供关于当前容器的高阶信息,例如名称、ID 和状态。这个命令支持很多不同参数,其中值得一提的是 -a 参数,它可以用来获取所有容器的信息,而不仅仅是运行中的容器。还有 -q 参数,它使得这个命令只返回容器的 ID,对于用作其他命令如 docker rm的输入非常有用。

40. docker top

把容器作为参数,提供该容器内运行中进程的信息。实际上,这个命令是在主机上运行 UNIX 的 ps 命令,然后把容器以外的进程过滤掉。这个命令接受与 ps 命令相同的参数,默认为 -ef(但请注意,PID 字段必须出现在输出里)。

41. docker build

从 Dockerfile 建立镜像

42. docker commit

从指定的容器创建镜像。虽然 docker commit 在创建镜像时很有用,但由于 dockerbuild 的可重复性强,因此一般情况下还是比较推荐使用后者。默认情况下,容器在创建镜像前会先暂停,但这个行为可以用 --pause=false 选项禁止。这个命令接受 -a 和-m 参数来设定元数据。

shell
$ ID=$(docker run -d redis touch /new-file)
$ docker commit -a "Joe Bloggs" -m "Comment" $ID commit:test 
ac479108b0fa9a02a7fb290a22dacd5e20c867ec512d6813ed42e3517711a0cf 
$ docker images commit
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
commit test ac479108b0fa About a minute ago 111 MB 
$ docker run commit:test ls /new-file
/new-file
12345678

43. docker export

将容器的文件系统中的内容以 tar 归档的格式导出,并输出到 STDOUT。生成的归档可以通过 docker import 导入。请注意,它只会导出文件系统;任何元数据,如映射端口、CMD 和 ENTRYPOINT 配置将会丢失。另外,数据卷也不会包含在导出归档中。你可以将这个命令与 docker save 作对比。

44. bdocker history

输出镜像中每个镜像层的信息。

45. docker images

列出所有本地镜像,包括库名称、标签名称以及镜像大小等信息。默认情况下,中间镜像(用于创建最上一层的镜像)不会列出。VIRTUAL SIZE 是镜像和它下面的所有镜像层的总大小。由于这些镜像层可以与其他镜像共享,简单地把所有镜像的大小加起来并不能准确估算实际磁盘的使用情况。此外,如果镜像有多个标签,那么镜像会重复列出;你可以通过比较 ID 来分辨不同的镜像。这个命令能够接受几个参数,尤其值得一提的是 -q,它使命令只返回镜像 ID,方便用作其他命令如 docker rmi 的输入。

46. docker import

从一个含有文件系统的归档文件创建镜像,归档可以由 docker export 产生。归档可以通过文件路径或 URL 指定,或者通过 STDIN 流导入(使用“-”参数)。命令的返回值是新创建镜像的 ID 。可以通过提供仓库和标签名称来为镜像附加标签。要注意的是,通过 import 生成的镜像只会有一个镜像层,并会失去所有的 Docker 配置信息,如已指定为开放的端口和 CMD 指令的值。你可以将这个命令与 docker load 相比较。

下面的例子用先导出后导入的方法,将一个镜像原来所有的镜像层合为一个。

shell
$ docker export 35d171091d78 | docker import - flatten:test
5a9bc529af25e2cf6411c6d87442e0805c066b96e561fbd1935122f988086009
$ docker history flatten:test
IMAGE CREATED CREATED BY SIZE COMMENT
981804b0c2b2 59 seconds ago 317.7 MB Imported from -
12345

47. docker load

加载仓库,仓库以 tar 归档的形式从 STDIN 读入。仓库可以包含数个镜像和标签 。与docker import 不同,该镜像还包含历史和元数据。适用的归档文件可以通过 dockersave 创建,这使得 save 和 load 能成为寄存服务器以外用于分发镜像及备份的方案。相关例子参见 docker save。

48. docker rmi

删除指定的一个或多个镜像。镜像可以用 ID 或仓库加标签名称的方式来指定。如果指定了仓库名称,但没有提供标签名,那么标签会被默认为 latest。要删除存在于多个仓库的镜像,需要用 ID 指定镜像,并同时使用 -f 参数,而且需要对每个仓库分别执行。

49. docker save

把指定的镜像或仓库储存到 tar 归档,并输出到 STDOUT(如要写入文件,可以使用 -o选项)。镜像可以用 ID 或 repository:tag 的方式指定。如果只指定了仓库名称,则该仓库中的所有镜像将会被储存到归档,而不仅仅是带 latest 标签的镜像。与 dockerload 结合使用,可以用来分发或备份镜像。

shell
$ docker save -o /tmp/redis.tar redis:latest
$ docker rmi redis:latest
Untagged: redis:latest
Deleted: 868be653dea3ff6082b043c0f34b95bb180cc82ab14a18d9d6b8e27b7929762c 
$ docker load -i /tmp/redis.tar
$ docker images redis
REPOSITORY TAG IMAGE ID CREATEDVIRTUAL SIZE 
redis latest 0f3059144681 3 months ago111 MB
12345678

50. docker tag

将镜像与一个仓库和标签名称关联。镜像可以通过 ID 或仓库加标签的方式指定(如未提供标签名,默认为 latest )。如果没有为新名称提供标签,也默认为 latest 。

shell
$ docker tag faa2b75ce09a newname # 1
$ docker tag newname:latest amouat/newname # 2
$ docker tag newname:latest amouat/newname:newtag # 3
$ docker tag newname:latest myregistry.com:5000/newname:newtag # 4
1, 把 ID 为 faa2b75ce09a 的镜像添加到仓库 newname,因为没有指定标签名,所以标签默认为 latest。
2,把 newname:latest 镜像添加到 amouat/newname 仓库,这一次也是使用 latest 标签。这个名称的格式适用于把镜像推送到 Docker Hub,假设用户为 amouat。
3,与上一个命令一样,除了标签不再是 latest,而是 newtag。
4,将 newname:latest 镜像添加到 myregistry.com/newname 仓库,并使用 newtag 作为标签。这个名称的格式适用于把镜像推送到位于 http://myregistry.com:5000 的寄存服务器。
12345678

51. docker login

在指定的寄存服务器进行注册或登录。如果未指定服务器,则假设为 Docker Hub。如果有需要,程序将会要求你提供一些详细信息,你也可以通过参数提供这些信息。

52. docker logout

从 Docker 寄存服务器注销。如果未指定服务器,则假定为 Docker Hub。

53. docker pull

从寄存服务器下载指定的镜像。寄存服务器由镜像名称决定,默认为 Docker Hub。若没有提供标签名,则下载标签为 latest 的镜像(如该标签可用)。通过 -a 参数可以下载仓库中所有镜像。

54. docker push

将镜像或仓库推送到寄存服务器。如果没有指定标签,则仓库中的所有镜像都会推送到服务器,而不仅仅是标记为 latest 的镜像。

55. docker search

列出 Docker Hub 上匹配搜索词的公共仓库。限制结果为最多 25 个仓库。过滤条件还可以包括最低星级以及镜像是否自动生成。通常,在网站上搜索会是最便利的。

0

评论 (0)

取消