Docker run 命令实战

时间:2022-10-31 13:12:21

Docker run 命令用来创建一个新的容器并运行,相当于 docker create和docker start的组合。

用 docker run -help可以显示命令的使用说明。

docker run --help

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

Options:
      --add-host value              Add a custom host-to-IP mapping (host:ip) (default [])
  -a, --attach value                Attach to STDIN, STDOUT or STDERR (default [])
      --blkio-weight value          Block IO (relative weight), between 10 and 1000
      --blkio-weight-device value   Block IO weight (relative device weight) (default [])
      --cap-add value               Add Linux capabilities (default [])
      --cap-drop value              Drop Linux capabilities (default [])
      --cgroup-parent string        Optional parent cgroup for the container
      --cidfile string              Write the container ID to the file
      --cpu-percent int             CPU percent (Windows only)
      --cpu-period int              Limit CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int               Limit CPU CFS (Completely Fair Scheduler) quota
  -c, --cpu-shares int              CPU shares (relative weight)
      --cpuset-cpus string          CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string          MEMs in which to allow execution (0-3, 0,1)
  -d, --detach                      Run container in background and print container ID
      --detach-keys string          Override the key sequence for detaching a container
      --device value                Add a host device to the container (default [])
      --device-read-bps value       Limit read rate (bytes per second) from a device (default [])
      --device-read-iops value      Limit read rate (IO per second) from a device (default [])
      --device-write-bps value      Limit write rate (bytes per second) to a device (default [])
      --device-write-iops value     Limit write rate (IO per second) to a device (default [])
      --disable-content-trust       Skip image verification (default true)
      --dns value                   Set custom DNS servers (default [])
      --dns-opt value               Set DNS options (default [])
      --dns-search value            Set custom DNS search domains (default [])
      --entrypoint string           Overwrite the default ENTRYPOINT of the image
  -e, --env value                   Set environment variables (default [])
      --env-file value              Read in a file of environment variables (default [])
      --expose value                Expose a port or a range of ports (default [])
      --group-add value             Add additional groups to join (default [])
      --health-cmd string           Command to run to check health
      --health-interval duration    Time between running the check (default 0s)
      --health-retries int          Consecutive failures needed to report unhealthy
      --health-timeout duration     Maximum time to allow one check to run (default 0s)
      --help                        Print usage
  -h, --hostname string             Container host name
  -i, --interactive                 Keep STDIN open even if not attached
      --io-maxbandwidth string      Maximum IO bandwidth limit for the system drive (Windows only)
      --io-maxiops uint             Maximum IOps limit for the system drive (Windows only)
      --ip string                   Container IPv4 address (e.g. 172.30.100.104)
      --ip6 string                  Container IPv6 address (e.g. 2001:db8::33)
      --ipc string                  IPC namespace to use
      --isolation string            Container isolation technology
      --kernel-memory string        Kernel memory limit
  -l, --label value                 Set meta data on a container (default [])
      --label-file value            Read in a line delimited file of labels (default [])
      --link value                  Add link to another container (default [])
      --link-local-ip value         Container IPv4/IPv6 link-local addresses (default [])
      --log-driver string           Logging driver for the container
      --log-opt value               Log driver options (default [])
      --mac-address string          Container MAC address (e.g. 92:d0:c6:0a:29:33)
  -m, --memory string               Memory limit
      --memory-reservation string   Memory soft limit
      --memory-swap string          Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --memory-swappiness int       Tune container memory swappiness (0 to 100) (default -1)
      --name string                 Assign a name to the container
      --network string              Connect a container to a network (default "default")
      --network-alias value         Add network-scoped alias for the container (default [])
      --no-healthcheck              Disable any container-specified HEALTHCHECK
      --oom-kill-disable            Disable OOM Killer
      --oom-score-adj int           Tune host's OOM preferences (-1000 to 1000)
      --pid string                  PID namespace to use
      --pids-limit int              Tune container pids limit (set -1 for unlimited)
      --privileged                  Give extended privileges to this container
  -p, --publish value               Publish a container's port(s) to the host (default [])
  -P, --publish-all                 Publish all exposed ports to random ports
      --read-only                   Mount the container's root filesystem as read only
      --restart string              Restart policy to apply when a container exits (default "no")
      --rm                          Automatically remove the container when it exits
      --runtime string              Runtime to use for this container
      --security-opt value          Security Options (default [])
      --shm-size string             Size of /dev/shm, default value is 64MB
      --sig-proxy                   Proxy received signals to the process (default true)
      --stop-signal string          Signal to stop a container, SIGTERM by default (default "SIGTERM")
      --storage-opt value           Storage driver options for the container (default [])
      --sysctl value                Sysctl options (default map[])
      --tmpfs value                 Mount a tmpfs directory (default [])
  -t, --tty                         Allocate a pseudo-TTY
      --ulimit value                Ulimit options (default [])
  -u, --user string                 Username or UID (format: <name|uid>[:<group|gid>])
      --userns string               User namespace to use
      --uts string                  UTS namespace to use
  -v, --volume value                Bind mount a volume (default [])
      --volume-driver string        Optional volume driver for the container
      --volumes-from value          Mount volumes from the specified container(s) (default [])
  -w, --workdir string              Working directory inside the container
运行容器,一般有两种场景,1)前台交互模式,2)后台运行模式。

前台交互模式,例如:

docker run --rm -it oliver/centos:v7.2 /bin/bash
参数 --rm 表示运行结束后删除容器实例,-it表示交互并绑定tty。

后台运行模式,需要使用-d参数。这种模式下运行的一般是一些后台服务应用,如各类web应用。它们一般会涉及:端口、存储卷、环境变量、与其它容器连接等参数的设定,这种情形,run命令也会比较复杂,但涉及到的参数主要有 -d、--name、-e、-v、-p、--link、--label等。

以下命令运行4个容器,elasticsearch 、kibana、fluentd-pilot和tomcat,功能是、fluentd-pilot收集tomcat的日志到存储到elasticsearch。

docker run -d --name="quickstart_elasticsearch_1" -p 9200:9200 \
elasticsearch 

docker run -d --name="quickstart_kibana_1" -p 5601:5601 \
-e ELASTICSEARCH_URL="http://elasticsearch:9200/" \
--link=quickstart_elasticsearch_1:elasticsearch  \
--label aliyun.routing.port_5601=kibana \
kibana

docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /:/host \
-e FLUENTD_OUTPUT=elasticsearch \
-e ELASTICSEARCH_HOST=elasticsearch \
-e ELASTICSEARCH_PORT=9200 \
--link=quickstart_elasticsearch_1:elasticsearch  \
registry.cn-hangzhou.aliyuncs.com/acs-sample/fluentd-pilot:latest

docker run -d  -p 10080:8080 \
-v /usr/local/tomcat/logs \
--label aliyun.logs.catalina=stdout \
--label aliyun.logs.access=/usr/local/tomcat/logs/localhost_access_log.*.txt \
tomcat
第一个容器用--name指定了容器的名称,在同一台机器上这是唯一的,-p指定了端口;第二个容器用-e指定环境变量,用--link容器连接了第一个容器,这样在第二个容器的/etc/hosts文件下会有一条记录表示第一个容器的ip和名称,--label是元数据;第三个容器用-v指定了卷。

其它相关命令

curl命令,对应运行web应用的容器,可以用来检查,web应用是否正常工作,如

host=127.0.0.1
http_code=$(curl -m 1 -s -o /dev/null/ -w '%{http_code}' http://$host:9200/)
docker inspect 命令,查看容器的各项参数,不带--format显示所有的数据。

Docker run 命令实战

docker ps 命令,列出运行的容器,docker ps 列出所有的容器,包括不运行的。

docker stop 命令,停止运行的容器。

docker rm 命令,删除已停止运行的容器。

docker logs 命令,查看容器的日志。

docker exec命令,进入容器的内部,如:

docker exec -it <容器id>  /bin/bash