BUNSEN

個人的な学習ログ

Dockerチートシート

概要

Dockerについて勉強しましたが、コマンド多くてなかなか覚えられない。そんな私のためによく使用しそうなコマンドをかき出しました。

Dockerコマンド一覧

docker

for docker images

  • docker run <DockerImage> [<command> [<command option>]] pull->create->startを実行
    • --name <container name>: 任意のコンテナ名でImageを起動する
    • -p <host port>:<container port>: コンテナのポートとホストマシンのポートどこにホスティングするか指定する
    • -d: dettachモードで起動する。コンテナの動作をバックグラウンドで実行する。主にデーモンプログラムをコンテナで起動する際に指定する。
    • -i: コンテナの標準入力を取得し、双方向に操作できるようにする
    • -t: コンテナ内にホストをttyとして設定する(ホストを入出力用の実端末として登録する)
    • --rm: コンテナが停止した時点で自動的に削除される
    • <command>,<command option>: 指定した場合、コンテナ起動後にコンテナ上で実行される
    • --link <DockerContainer>:<alias>: 作成されるコンテナからAliasで別コンテナへの通信経路が確立される。※レガシー機能のため削除される予定
    • --network <dockerhost network name>: 作成時点で指定したDockerNetworkのみに接続される(デフォルトはbridge)
    • -h <container host name>: 作成されるコンテナのホスト名を指定する
    • --mount src=<src>,dst=<dst>[,type=<type>][,tmpfs-size=<memory size>][,tmpfs-mode=<tmpfs mode>][,<option>]
      • <src>: <dockerhost volume name>or<dockerhost dir path>or<dockerhost file path>
      • <dst>: <container dir path>or<container file path>
      • <type>: 使用するマウントタイプを指定する
        • bind: bind mount
        • tmpfs: tmpfs
      • <memory size>: tmpfsでマウントする場合に使用するために確保するメモリの上限
      • <tmpfs mode>: ファイルモードを設定する
      • <option>
        • readonly: read-only
  • docker pull <DockerImage> DockerImageの取得(未ダウンロードの場合はDocker Hub上からダウンロード)
  • docker push <DockerImage> レジストリサーバへDockerImageを登録する
  • docker create <DockerImage> Dockerコンテナの作成
  • docker images ローカルのDockerImage情報を表示する
  • docker tag <DockerImage> <DockerImageAlias> 取得済みのDockerImageのAliasを作成する
  • docker inspect (<docker image name> | <docker image id>) DockerImageの詳細情報を表示する
  • docker rmi <DockerImage> 削除時に対象Imageを使用したコンテナが起動中の場合はコンテナを終了する必要がある
    • -f: コンテナが存在する状態であっても強制的にImageを削除する
  • docker buid [option] <build context> DockerFileからDockerImageを作成する <build context>で指定されたディレクトリ上のファイルがすべてDockerデーモンに送信され、そこにあるDockerFileでビルドされる
    • -t <docker image name>: 作成するImageの名前を付ける
    • --no-cache: ビルドキャッシュが存在する場合でも強制的に再ビルドする

for docker containers

  • docker start <DockerContainer> Dockerコンテナの起動
  • docker stop <DockerContainer> Dockerコンテナの停止
  • docker pause <DockerContainer> Dockerコンテナの一時停止
  • docker unpause <DockerContainer> Dockerコンテナの一時停止解除
  • docker restart <DockerContainer> Dockerコンテナの再起動
  • docker rm <DockerContainer> 停止状態のDockerコンテナの削除
    • -f: 停止状態以外でも強制的に削除(一度停止状態に変更してから)
  • docker ps ステータスがRunningのDockerコンテナ一覧表示
    • -a: その他ステータスのコンテナを含めて表示
  • docker cp <src file path> <DockerContainer>:<dst file path> ホスト上のファイルをコンテナ上に転送する
  • docker cp <DockerContainer>:<src file path> <dst file path> コンテナ上のファイルをホスト上に転送する
  • docker inspect <DockerContainer> コンテナの詳細情報を表示
  • docker attach <DockerContainer> コンテナのPID1の標準入出力に接続 exitで抜けるとPID1のプロセスも終了し、コンテナが終了する Ctrl+P->Ctrl+Qで抜けることができるが、コンテナ起動時に-itオプションを指定していない場合は使用不可
  • docker exec <DockerContainer> <command> コンテナ内で任意のコマンドを実行することができる exitで抜ける
    • -i: コンテナの標準入力を取得し、双方向に操作できるようにする
    • -t: コンテナ内にホストをttyとして設定する(ホストを入出力用の実端末として登録する)
    • docker exec -it <DockerContainer> /bin/bashで任意のコンテナの標準入出力をマウントできる

for docker networks

  • docker network ls DockerHostの構成するネットワークの一覧を表示する
  • docker network inspect <dockerhost network name> DockerNetworkの詳細情報を表示する
  • docker network create <dockerhost network name> ユーザ定義のBridgeNetworkを作成する
    • --driver <network type>: 作成されるネットワークの種別を指定する
  • docker network connect <dockerhost network name> <DockerContainer> コンテナをDockerNetworkに接続する
  • docker network disconnect <dockerhost network name> <DockerContaier> コンテナをDockerNetworkから外す

for docker volunes

  • docker volume create <dockerhost volume name> DockerHost上にDockerVolumeを作成する
  • docker volume ls DockerHost上のDockerVolumeの一覧を表示する
  • docker volume inspect <dockerhost volume name> DockerVolumeの詳細情報を表示する
  • docker volume rm <dockerhost volume name> DockerVolumeを削除する

for docker swarm

  • docker swarm init 現在のDockerHostをMasterとするDocker Swarmを初期構築する
    • --advertise-addr <docker host ip address>: 指定したアドレスをSwarmに参加するDockerHostへ通知する
  • docker swarm join-token (manager | worker) DockerSwarmに参加するためのコマンドを表示する(only manager node)
  • docker node ls DockerSwarmに参加しているDockerHostの一覧を表示する(only manager node)
  • docker service create <DockerImage> DockerSwarmで稼働するServiceを生成する
    • --replicas <number>: 生成するタスクの数を指定する
    • -d: detachモードでコンテナを起動
    • --name <container name>: コンテナの名称
    • -p <host port>:<container port>: コンテナのポートとホストマシンのポートどこにホスティングするか指定する
    • --constraint <condition>: タスクを起動するNodeの条件を指定する
  • docker service update <service name> Serviceの情報を変更する
    • -d: detach
    • --XXX-add <value>: 設定の追加
    • --XXX-rm <value>: 設定の削除
  • docker service rollback <service name> Serviceの変更を一つ前の状態に戻す(2回連続で実行するとrollbackの取り消しになる)
    • -d: detach
  • docker service ps <service name> サービスにおけるタスクの状況を表示
  • docker service ls DockerSwarm上で稼働しているService一覧を表示する
  • docker service inspect <service name> Service の情報を詳細に表示
    • --pretty: 表示を見やすくする
  • docker service rm <service name> Service を削除する

for others

  • docker login [<hosting site>] レジストリサーバへログインする <hosting site>が省略された場合は、DockerHubが指定される
  • docker commit <DockerContainer> <DockerImage> コンテナの状態をイメージ化する ※DockerImage内にコンテナの操作履歴は残らないため透明性が低いDockerImageが完成する。

docker-machine

General

  • docker-machine ls DockerHostの一覧を表示する
  • docker-machine create <DockerHost> DockerHostの作成
    • --driver <hosted hypervisor>: 使用する仮想化ソフトウェアを指定する(default:virtualbox)
    • --swarm: SwarmClusterに追加する
    • --swarm-master: SwarmCluster内での役割をマスターに設定する
    • --swarm-discovery="<keyvalue store type>:<keyvalue store ip>:<keyvalue store connection port>": Swarmが使用するキーバリューストアの場所を指定する
    • --engine-opt="cluster-store=<keyvalue store type>:<keyvalue store ip>:<keyvalue store connection port>": オーバーレイネットワーク用にキーバリューストアの場所を指定する。DockerEngineがコンテナ・ネットワーク・ボリュームの情報を共有するのに使用する
    • --engine-opt="cluster-advertise=<dockerhost nwif>:<dockerhost port>": DockerHost間の通信に使用するNWIFとポートを指定する
  • docker-machine stop <DockerHost> DockerHostを停止する
  • docker-machine start <DockerHost> DockerHostを起動する
  • docker-machine env <DockerHost> dockerコマンドを実行するDockerHost(ActiveなDockerHost)の切り替えを行うための環境変数一覧を表示する
    • -u: DockerHostのActive解除用の環境変数一覧を表示する
    • --swarm: Dockerコマンドの情報がSwarmのみになるSwarmActive用環境変数一覧になる
    • | Invoke-Expression: 環境変数を一度に設定する
  • docker-machine ssh <DockerHost> DockerHostへSSH接続をする
  • docker-machine ip <DockerHost> DockerHostのIPアドレスを表示する

    DockerHost on AWS

  • docker-machine create --driver amazonec2 <DockerHost> 認証情報は事前に~/.aws/credentials設定されていること(オプション指定も可)
    • --amazonec2-open-port <port num>: EC2の公開するポートを指定
    • --amazonec2-region <aws region>: EC2の作成されるAWSリージョンを指定。東京リージョン:ap-noutheast-1
    • --amazonec2-access-key <aws access key>: AWSへのアクセスキーを指定する
    • --amazonec2-secret-key <aws secret key>: AWSへのシークレットキーを指定する

      DockerHost on GCP

  • docker-machine create --driver google 認証情報は事前にダウンロードし、GOOGLE_APPLICATION_CREDENTIALSに認証ファイルパスを指定する
    • --google-project <gcp project id>:
    • --google-zone <gcp region>: DockerHostが作成されるGCPのリージョンを指定。東京リージョン:asia-northeast1-a

docker-compose

  • docker-compose run <service name> [<command>] DockerComposeを起動する。初回ファイルの作成など一度だけの実行の場合に実行する。 <service name>docker-compose.ymlで定義したサービス名を記述する
  • docker-compose up DockerComposeを開始/再起動する
    • -d: デタッチモードで起動する
  • docker-compose build docker-composeに記述されているImageBuildを明示的に実行する。

Docker用語説明

DockerImage

<DockerImage> = [<repository name>/]<docker image name>[:<docker image tag>] * <repository name>を指定しない場合はDocker社の提供するオフィシャルレポジトリが参照される。 * <docker image tag>を指定しない場合は自動的にlatestが指定される。 * latestが最新版である保証はない * AUFSと呼ばれるファイルシステムをもとにコンテナに必要なファイルを積み上げたファイルシステム * DockerImageレイヤは読み取り専用 * コンテナレイヤのみ読み書き可能(コンテナ作成時またはコンテナからの操作によってDockerImageレイヤの上に積み上げられる) * 同一イメージを利用する複数のイメージがある場合は、同一のデータを参照するため合計データ量が削減される

DockerContainer

<DockerContainer> = (<docker container name> | <docker container ID>) * <docker container name>docker runまたはdocker createコマンドで--nameオプションで指定した値 * <docker container ID>docker psコマンドで確認できる値

Status

  • Createdorcreated コンテナが作成された状態
  • Uporrunning コンテナが起動している状態
  • Up (Paused)orpaused コンテナが一時停止された状態
  • restarting コンテナが再起動中の状態
  • Exitedorexited コンテナの動作が終了し、停止している状態
  • removing コンテナ削除中の状態
  • dead コンテナの異常状態(削除するしかない)

DockerFile

  • DockerFile→DockerImageの作業をイメージビルドと呼ぶ
  • イメージビルドはDockerFileが更新されない限り再実行してもキャッシュが使用されてビルドされない

構文

  • FROM <DockerImage>
    • 作成するDockerImageの継承元DockerImageを指定する
  • RUN <command>
    • イメージビルド時に実行され、結果がDockerImage内に保存される
  • CMD <command>
    • docker create実行時にコンテナで実行される
  • COPY <host src path> <containers dst abs-path>
    • イメージビルド時にホスト上のファイルがDockerImage内に転送される
  • ENV <environmental variable name> <value>
    • 作成されたコンテナ上に環境変数を設定する
  • WORKDIR <path>

DockerHub

  • Docker社が提供する公式のImage公開サイト
  • Imageの登録・公開が可能

AutomatedBuild

  • Githubなどでビルドコンテキストを管理し、変更があるとDockerHubが自動的にビルドを行い、そのDockerImageをDockerHubに登録する

Docker Machine

  • DockerHostを管理するツール

DocekrHost

<DockerHost> = <docker host name> * <docker host name>は指定しないことも可能。その場合defaultというDockerHostを指定したことになる

  • DockerHostはDockerEngineを積んだ仮想マシンのこと
  • DockerHostの起動には仮想化ソフトウェアを利用する
  • DockerHostのOSはboot2docker軽量LinuxでDockerEngineのインストールが自動的に行われる
  • docker-machine env <DockerHost> | Invoke-Expressionを実行することでdockerコマンドの実行するDockerDeamonを指定したDockerHostのDockerDeamonに切り替えることが可能(Active化)
  • ActiveなDockerHostはdocker-machine ls*が付加されているDockerHost

BridgeNetwork

  • DockerHost内で構成されるネットワーク
    • bridge driver
      • 同一DockerHost上のコンテナ同士で通信することができる
      • ユーザ定義型の場合はネットワーク上にてDockerDNSの機能を提供し、コンテナ名にて通信を行うことが可能
      • 外部接続可能(コンテナのポートを開放する必要あり)
    • host driver
      • DockerHostと同じネットワーク設定を提供
      • コンテナのポート開放をしなくても接続できる
    • null driver
      • Loopbackインターフェースのみを提供する
      • その他NWへのコネクトをすべて解除する必要あり

MultiHostNetwork

  • StandAloneSwarm
    • キーバリューストアが必要(サービスディスカバリ)

DockerDataManagement

  • Volume
    • DockerHost上の/var/lib/docker/volumesが作成されコンテナ内に任意のディレクトリにマウントされる
    • 複数のコンテナで同一のVolumeを参照することができる
  • bind mount
    • Host上のディレクトリやファイルをコンテナにマウントすることができる
  • tmpfs
    • Hostのメモリ上にデータを置き、コンテナにマウントすることができる

DockerCompose

ymlファイルに設定を記述することでアプリケーション環境を一度に起動する