Docker CLI docker run 常用命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker run 常用命令。

1、docker run 简介

docker run是用来启动容器,如果本地没有要启动的镜像,会自动下载,每次新建一个容器。docker start只是单纯的启动,而不会新建容器。Docker在隔离的容器中运行进程。容器是运行在主机上的进程。主机可以是本地的,也可以是远程的。当操作员执行docker run时,运行的容器进程是隔离的,因为它有自己的文件系统,自己的网络,自己的隔离进程树,与主机分离。

2、docker run 语法

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

docker run命令必须指定一个IMAGE来派生容器。镜像开发人员可以定义与以下相关的镜像默认值:

1)后台或前台运行

2)容器标识

3)网络设置

4)CPU和内存的运行时限制

通过docker运行[OPTIONS],操作员可以添加或覆盖开发人员设置的镜像默认值。此外,操作符可以覆盖Docker运行时本身设置的几乎所有默认值。操作员能够覆盖image和Docker运行时默认值,这也是docker run比其他Docker命令有更多选项的原因。

参考文档:https://docs.docker.com/engine/reference/run/

3、docker run 命令

1)指定端口和镜像后台运行nginx容器

docker run -d -p 80:80 my_image nginx -g 'daemon off;'

2)通过向命令中添加image[:tag]来指定运行容器的镜像版本

docker run ubuntu:14.04

3)通过向命令中添加iImage[@digest]来指定运行容器的镜像

docker run alpine@sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0 date

4)使用--pid=host使容器能够看到宿主机上的进程

echo 'FROM alpine:latest
RUN apk add --update htop && rm -rf /var/cache/apk/*
CMD ["htop"]' > Dockerfile
docker build -t myhtop .
docker run -it --rm --pid=host myhtop

5)通过--pid=container:container_name运行另一个容器方式来调试容器

docker run --name my-redis -d redis
docker run -it --pid=container:my-redis my_strace_docker_image bash
strace -p 1

strace -p pid :指定pid调试进程,来跟踪进程执行时的系统调用和接收的信号。

6) 通过--network container:container_name来共享另一个容器的网络

 docker run -d --name redis example/redis --bind 127.0.0.1 
 docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1

7)通过--add-host向容器的/etc/hosts文件添加记录

$ docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts

172.17.0.22     09d03f76bf2c
fe00::0         ip6-localnet
ff00::0         ip6-mcastprefix
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
127.0.0.1       localhost
::1	            localhost ip6-localhost ip6-loopback
86.75.30.9      db-static

8)通过--restart指定重启策略

docker run --restart=always redis
docker run --restart=on-failure:10 redis

注意:--restart=on-failure:10是将重新启动策略设为on-failure,最大重新启动次数为10。如果redis容器以非零退出状态连续退出超过10次,Docker将中止重新启动容器的尝试。提供最大重启限制仅对故障策略有效。

9)输出容器的退出状态码

$ docker run --foo busybox; echo $?
flag provided but not defined: --foo
See 'docker run --help'.
125
$ docker run busybox /etc; echo $? $ docker: Error response from daemon: Container command '/etc' could not be invoked. 126
$ docker run busybox foo; echo $? $ docker: Error response from daemon: Container command 'foo' not found or does not exist. 127
$ docker run busybox /bin/sh -c 'exit 3' $ echo $? 3

10)限制容器的内存和交换内存

docker run -it -m 300M --memory-swap 1G ubuntu:14.04 /bin/bash

11)限制容器使用cpu

 docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash
 docker run -it --cpuset-mems="1,3" ubuntu:14.04 /bin/bash

12)添加要运行的其他组

$ docker run --rm --group-add audio --group-add nogroup --group-add 777 busybox id
uid=0(root) gid=0(root) groups=10(wheel),29(audio),99(nogroup),777

13)使用--entrypoint指定在运行时执行的默认命令

 docker run -it --entrypoint /bin/bash example/redis -c ls -l
 docker run -it --entrypoint /usr/bin/redis-cli example/redis --help

注意:除了--privileged之外,还可以使用--cap-add--cap-drop对功能进行细粒度控制。默认情况下,Docker有一个保留的默认功能列表。下表列出了默认情况下允许并且可以删除的Linux功能选项。

4、选项说明

选项

默认

描述

--add-host list

添加自定义主机到IP映射(主机IP)

-a, --attach list

连接到stdin、stdout或stderr

--blkio-weight uint16

块IO(相对权重),介于10到1000之间,

或0到禁用(默认为0)

--blkio-weight-device list

块IO权重(相对设备权重)(默认值[])

--cap-add list

添加Linux功能

--cap-drop list

放弃Linux功能

--cgroup-parent string

容器的可选父cgroup

--cidfile string

将容器id写入文件

--cpu-period int

限制CPU CFS(完全公平调度程序)周期

--cpu-quota int

限制CPU CFS(完全公平调度程序)配额

--cpu-rt-period int

限制CPU实时周期(微秒)

--cpu-rt-runtime int

限制CPU实时运行时间(微秒)

-c, --cpu-shares int

CPU共享(相对权重)

--cpus decimal

CPU数量

--cpuset-cpus string

允许执行的CPU(0-3、0、1)

--cpuset-mems string

允许执行的微机电系统(0-3、0、1)

-d, --detach

在后台运行容器并打印容器ID

--detach-keys string

重写用于分离容器的键序列

--device list

将主机设备添加到容器

--device-cgroup-rule list

将规则添加到cgroup allowed devices列表

--device-read-bps list

限制设备的读取速率(字节/秒)(默认为[])

--device-read-iops list

限制设备的读取速率(IO/秒)(默认值[])

--device-write-bps list

限制对设备的写入速率(字节/秒)(默认值[])

--device-write-iops list

限制设备的写入速率(IO/秒)(默认值[])

--disable-content-trust

true

跳过图像验证(默认为true)

--dns list

设置自定义DNS服务器

--dns-option list

设置DNS选项

--dns-search list

设置自定义DNS搜索域

--domainname string

容器NIS域名

--entrypoint string

覆盖图像的默认入口点

-e, --env list

设置环境变量

--env-file list

读取环境变量文件

--expose list

公开一个或一系列端口

--gpus gpu-request

要添加到容器的GPU设备(“all”用于传递所有GPU)

--group-add list

添加要加入的其他组

--health-cmd string

运行以检查运行状况的命令

--health-interval duration

运行检查之间的时间(m s s m h)

(默认为0s)

--health-retries int

需要连续失败才能报告不正常

--health-start-period duration

开始运行状况重试倒计时之前

容器初始化的开始时间(m s s m h)

(默认为0)

--health-timeout duration

允许一个检查运行的最大时间(ms s m m h)

(默认值0)

--help

打印使用

-h, --hostname string

容器主机名

--init

在转发信号和获取进程的容器中运行init

-i, --interactive

即使没有连接,也保持stdin打开

--ip string

IPv4地址(例如172.30.100.104)

--ip6 string

IPv6地址(例如,2001:db833)

--ipc string

要使用的IPC模式

--isolation string

集装箱隔离技术

--kernel-memory bytes

内核内存限制

-l, --label list

在容器上设置元数据

--label-file list

读取以行分隔的标签文件

--link list

将链接添加到另一个容器

--link-local-ip list

容器IPv4/IPv6链路本地地址

--log-driver string

容器的日志驱动程序

--log-opt list

日志驱动程序选项

--mac-address string

容器MAC地址(例如92:d0:c6:0a:29:33)

-m, --memory bytes

记忆极限

--memory-reservation bytes

存储器软限制

--memory-swap bytes

交换限制等于内存加交换'-1'以启用无限制交换

--memory-swappiness int

-1

调整容器内存交换(0到100)(默认-1)

--mount mount

将文件系统装载附加到容器

--name string

为容器指定名称

--network network

将容器连接到网络

--network-alias list

为容器添加网络范围的别名

--no-healthcheck

禁用任何容器指定的运行状况检查

--oom-kill-disable

禁用OOM杀手

--oom-score-adj int

调整主机的OOM首选项(-1000到1000)

--pid string

要使用的PID命名空间

--pids-limit int

调整容器PIDS限制(设置-1表示无限制)

--privileged

授予此容器扩展权限

-p, --publish list

将容器的端口发布到主机

-P, --publish-all

将所有公开的端口发布到随机端口

--pull

missing

在运行前拉取镜像(always, missing, never)

--quiet , -q

抑制pull输出

--read-only

将容器的根文件系统装载为只读

--restart string

重新启动策略以在容器退出时应用(默认为“否”)

--rm

容器退出时自动拆卸

--runtime string

用于此容器的运行时

--security-opt list

安全选项

--shm-size bytes

/dev/shm的大小

--sig-proxy

代理接收到进程的信号(默认为true)

--stop-signal string

停止容器的信号(默认为“sigterm”)

--stop-timeout int

停止容器超时(秒)

--storage-opt list

容器的存储驱动程序选项

--sysctl map

sysctl选项(默认映射[])

--tmpfs list

装入tmpfs目录

-t, --tty

分配一个伪tty

--ulimit ulimit

ulimit选项(默认值[])

-u, --user string

用户名或uid(格式[])

--userns string

要使用的用户命名空间

--uts string

要使用的uts命名空间

-v, --volume list

绑定装入卷

--volume-driver string

容器的可选卷驱动程序

--volumes-from list

从指定容器装入卷

-w, --workdir string

容器内的工作目录

推荐阅读
cjavapy编程之路首页