Dockerコマンド、新旧どちらを覚えるべきか?

【2020.12.17】LPI-Japanからの回答を最後に追記しました。

Dockerコマンドは、2017年1月リリースのv1.13以降、コマンドラインの命令体系が再編成されています。理由はトップレベル・コマンド群が増えすぎたことと、使用頻度にばらつきが出たことらしいです。

新体系コマンドの概要

docker 対象 操作 オプション

新たな体系では、

対象に対してどう操作するか

という形で扱います。

対象はコンテナを管理するcontainerやイメージを管理するimage、操作がコンテナを実行するrunや動作を制御するstart/stopなどです。

例えば、使用頻度の高いサブコマンドのrunですが、これまでなら、

docker run hello-world

と記述しましたが、新体系では、

docker container run hello-world

になります。

これまでなら必要のなかったcontainerという単語を入力する必要があり、面倒に感じますが、ルールなのでこればかりは慣れるしかありません。ちなみに、contaまで入力すれば補完機能が働きます。

主な新旧コマンドを比較するとこんな感じ。

新コマンド旧コマンド説明
docker container createdocker新しいコンテナの作成
docker container execdocker exec実行中のコンテナ内でコマンド実行
docker container lsdocker psコンテナ一覧の表示
docker container pruneなし停止中の全コンテナを削除
docker container rmdocker rmコンテナの削除
docker container rundocker run新しいコンテナを実行
docker container startdocker start停止中のコンテナを起動
docker container statsdocker statsコンテナのリソース使用状況を表示
docker container stopdocker stop実行中のコンテナを停止

ちなみに、新旧コマンドの比較については以下のQiitaの投稿を参考にさせていただきました。さらに多くの比較が載っているので確認してみてください。

参考 docker container / image コマンド新旧比較Qiita

上記のように、新コマンドは、一部を除いて、旧コマンドと互換性があるので、継続して利用可能なのですが、Dockerとしては新コマンド体系の採用を推奨しているようです。

いずれは新体系に統合される可能性もあるので、早いうちから新体系のコマンドで覚えてしまう方が良さそうです。

わからなくなったらヘルプを活用

新体系コマンドでわからないことが出てきたらヘルプ機能を活用しましょう。

ヘルプは対象や動作など階層ごとで利用できます。図示してみると以下のようなイメージになります。

docker  help
   L    container --help
           L      run --help
   L    image  --help
           L   pull --help

注意すべき点は、dockerコマンドのヘルプはハイフンが不要ということ。それ以外はハイフンを2つ(–)が必要です。

ちょっと長いですが、主だったサブコマンドでヘルプを表示してみましょう。

docker help
$ docker help

Usage:	docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/home/ymizusawa/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker
                           context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/home/ymizusawa/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/home/ymizusawa/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/home/ymizusawa/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes
docker container --help
$ docker container --help

Usage:	docker container COMMAND

Manage containers

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  inspect     Display detailed information on one or more containers
  kill        Kill one or more running containers
  logs        Fetch the logs of a container
  ls          List containers
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  prune       Remove all stopped containers
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  run         Run a command in a new container
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes
docker container run --help
$ docker container run --help

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

Run a command in a new container

Options:
      --add-host list                  Add a custom host-to-IP mapping (host:ip)
  -a, --attach list                    Attach to STDIN, STDOUT or STDERR
      --blkio-weight uint16            Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
      --blkio-weight-device list       Block IO weight (relative device weight) (default [])
      --cap-add list                   Add Linux capabilities
      --cap-drop list                  Drop Linux capabilities
      --cgroup-parent string           Optional parent cgroup for the container
      --cidfile string                 Write the container ID to the file
      --cpu-period int                 Limit CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int                  Limit CPU CFS (Completely Fair Scheduler) quota
      --cpu-rt-period int              Limit CPU real-time period in microseconds
      --cpu-rt-runtime int             Limit CPU real-time runtime in microseconds
  -c, --cpu-shares int                 CPU shares (relative weight)
      --cpus decimal                   Number of CPUs
      --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 list                    Add a host device to the container
      --device-cgroup-rule list        Add a rule to the cgroup allowed devices list
      --device-read-bps list           Limit read rate (bytes per second) from a device (default [])
      --device-read-iops list          Limit read rate (IO per second) from a device (default [])
      --device-write-bps list          Limit write rate (bytes per second) to a device (default [])
      --device-write-iops list         Limit write rate (IO per second) to a device (default [])
      --disable-content-trust          Skip image verification (default true)
      --dns list                       Set custom DNS servers
      --dns-option list                Set DNS options
      --dns-search list                Set custom DNS search domains
      --domainname string              Container NIS domain name
      --entrypoint string              Overwrite the default ENTRYPOINT of the image
  -e, --env list                       Set environment variables
      --env-file list                  Read in a file of environment variables
      --expose list                    Expose a port or a range of ports
      --gpus gpu-request               GPU devices to add to the container ('all' to pass all GPUs)
      --group-add list                 Add additional groups to join
      --health-cmd string              Command to run to check health
      --health-interval duration       Time between running the check (ms|s|m|h) (default 0s)
      --health-retries int             Consecutive failures needed to report unhealthy
      --health-start-period duration   Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s)
      --health-timeout duration        Maximum time to allow one check to run (ms|s|m|h) (default 0s)
      --help                           Print usage
  -h, --hostname string                Container host name
      --init                           Run an init inside the container that forwards signals and reaps processes
  -i, --interactive                    Keep STDIN open even if not attached
      --ip string                      IPv4 address (e.g., 172.30.100.104)
      --ip6 string                     IPv6 address (e.g., 2001:db8::33)
      --ipc string                     IPC mode to use
      --isolation string               Container isolation technology
      --kernel-memory bytes            Kernel memory limit
  -l, --label list                     Set meta data on a container
      --label-file list                Read in a line delimited file of labels
      --link list                      Add link to another container
      --link-local-ip list             Container IPv4/IPv6 link-local addresses
      --log-driver string              Logging driver for the container
      --log-opt list                   Log driver options
      --mac-address string             Container MAC address (e.g., 92:d0:c6:0a:29:33)
  -m, --memory bytes                   Memory limit
      --memory-reservation bytes       Memory soft limit
      --memory-swap bytes              Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --memory-swappiness int          Tune container memory swappiness (0 to 100) (default -1)
      --mount mount                    Attach a filesystem mount to the container
      --name string                    Assign a name to the container
      --network network                Connect a container to a network
      --network-alias list             Add network-scoped alias for the container
      --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)
      --platform string                Set platform if server is multi-platform capable
      --privileged                     Give extended privileges to this container
  -p, --publish list                   Publish a container's port(s) to the host
  -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 list              Security Options
      --shm-size bytes                 Size of /dev/shm
      --sig-proxy                      Proxy received signals to the process (default true)
      --stop-signal string             Signal to stop a container (default "SIGTERM")
      --stop-timeout int               Timeout (in seconds) to stop a container
      --storage-opt list               Storage driver options for the container
      --sysctl map                     Sysctl options (default map[])
      --tmpfs list                     Mount a tmpfs directory
  -t, --tty                            Allocate a pseudo-TTY
      --ulimit ulimit                  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 list                    Bind mount a volume
      --volume-driver string           Optional volume driver for the container
      --volumes-from list              Mount volumes from the specified container(s)
  -w, --workdir string                 Working directory inside the container

containerとそれに続くrunだけでもこれだけのオプションがあることに驚きます。

LinuCではどちらで問われるのか?

ともあれ、LinuCバージョン10の試験範囲に加わったコンテナ技術に関して言えば、レベル1では概念の理解と起動や停止といった基本的な動作、レベル2ではそれらに加え、仮想ネットワークの設定やDockerFileをつかたイメージ作成などについても問われますのでDockerコマンドについてはしっかりと覚える必要があります。

LinuC レベル1 Version 10.0 LinuC レベル1 Version 10.0 LinuC レベル2 Version 10.0 LinuC レベル2 Version 10.0 主題1.01:Linuxのインストールと仮想マシン・コンテナの利用(16) 主題1.01:Linuxのインストールと仮想マシン・コンテナの利用(16) 主題2.06:コンテナ(5) 主題2.06:コンテナ(5)

ちなみに、LPI-Japan認定教科書では、出版社とレベルに関係なく、いずれもコマンドの表記が再編成前のものになっています。(2020/12現在)

参考までに、レベル1認定教科書に掲載されているDocker関連コマンド(旧)をまとめておきます。

操作オプションあずき本白本最短突破
run-d
-i
-t
-p
-m
–name
images
start
stop
attach
ps(-a)
rm
pull
rm
rmi
exec
教材紹介:Linux教科書 LinuCレベル1 Version 10.0対応 教材紹介:Linux教科書 LinuCレベル1 スピードマスター問題集 Version10.0対応 教材紹介:最短突破 LinuCレベル1 バージョン10.0 合格教本

レベル2では主題「2.06:コンテナ」の副題「2.06.2 Dockerコンテナとコンテナイメージの管理」でより深い知識が問われますが、レベル2対応のあずき本でも旧体系でコマンドが記載されていることを確認しました。

教材紹介:Linux教科書 LinuCレベル2 Version 10.0対応

実際の出題で新旧どちらのコマンドが使われているのか。また記述式の場合、新旧どちらのコマンドでも正解となるのか。現時点で不明ですので、LPI-Japanに問い合わせしてみたいと思います。

Ping-tでは

参考までに、オンライン学習サービスを提供するPing-tでも旧体系のDockerコマンドで問題を出題していました。

> 最強WEB問題集LinuC Lv1-101 (Ver10.0) (ユーザー登録すれば無料で利用可能)

追記:LPI-Japanからの回答

LPI-Japanの試験開発担当者から回答をいただいたので転載します。


現時点では、現場での実態も踏まえ試験範囲は旧体系となっております。
出題については基本的にコマンドの新旧体系により影響が出ないように考えております。  

とのことでした。どちらで覚えても問題のない、出題方式になると考えても良いみたいです。とはいえ、認定教材のほとんどが旧体系を採用しているので、旧体系で覚えてしまう方が何かと融通が効きそうですね。

参考にさせていただいたサイト

参考 docker container / image コマンド新旧比較Qiita 参考 docker 1.13におけるCLIコマンドの再構築についてOpensourcetechブログ