はじめに
こちらはDockerコンテナについてまとめた記事になります。情報が陳腐化している箇所があるかもですがご了承いただければ幸いです。
以下は、私がDocker関連についてまとめている記事になります。もし興味がありましたらご覧になってください。
Dockerコンテナとは
Dockerコンテナは実行に必要なすべての依存関係(ライブラリ、実行環境、設定ファイルなど)をカプセル化し、実行するための環境を提供します。
Dockerコンテナに関連するコマンドを説明していきます。
最初にコンテナを作成、起動するために一番使われるdocker run
コマンドについて確認したいと思います。
コンテナを作成、起動するdocker runコマンド
$ docker run hello-world
docker run コマンドの流れ
- DockerクライアントからDockerデーモンに対して
hello-world
のimageファイルを探しに行く。もしimageファイルがあればDocker Hubに対してimageファイルを探しに行かない。 - DockerデーモンがDocker Hubに対してimageファイルを探しにいく。
- imageが見つかったらダウンロードしてPC上に保存する。
- Dockerデーモンは保存したimageを元にコンテナを立ち上げて、コンテナで定義されたコマンドを実行する。
実はdocker run
は、イメージを取得するコマンドdocker pull
、コンテナを作成するdocker create
、コンテナを起動するdocker start
をひとまとめにしたコマンドです。
docker runに引数を渡して実行
以下のように、docker run dokcer/whalesay
の後に、cowsay Hello!
と記述することでコンテナが立ち上がった後にコマンドを実行することができます。
$ docker run docker/whalesay cowsay Hello!
docker runにオプションを渡して実行
$ docker run --name <コンテナ名> -d -p <ホスト側のポート番号>:<コンテナ側のポート番号> <イメージ名>
コマンドで、オプションを渡してコンテナを立ち上げることも可能です。
$ docker run --name some-nginx -d -p 8080:80 some-content-nginx
--rm
オプションはコンテナを停止した際に、コンテナそのものも破棄するオプションです。
$ docker run --name tmp-nginx --rm -d nginx
docker run --name <コンテナ名> -d -v <ホスト側のディレクトリ>:<コンテナ側のマウントポイント>:<オプション>
コマンドの-v
オプションは、dockerホストのファイルやディレクトリをコンテナに紐づけるバインドマウントが設定できるオプションです。
-vオプションで指定するディレクトリは絶対パスで書く必要があります。
$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
また、Dockerコンテナと対話式にやり取りする場合には-it
オプションを使います。
$ docker create --name status-test -it alpine /bin/sh
コンテナのライフサイクル
以下は、コンテナの状態遷移図です。コンテナの状態はdocker ps -a
やdocker inspect コンテナ名orID
コマンドで確認することができます。
どのDockerコマンドを実行したら、どう状態が遷移するかを箇条書きでまとめました。
コンテナのライフサイクル
-
Created
状態はdocker create
コマンドでコンテナを作成した時の状態です。 -
Running
状態はdocker start
コマンドでコンテナを起動したときの状態です。 -
docker run
コマンドはイメージの取得⇒コンテナの作成⇒コンテナの起動を行うので、Created
からRunning
と1つのコマンドで状態が遷移します。 -
Paused
はdocker pause
コマンドでRunning
からPaused
状態へ遷移します。そして、docker unpause
コマンドでPaused
からRunning
状態へ戻ります。 -
Exited
はdocker stop
コマンドでコンテナを停止した時の状態です。 -
Restart
はdocker restart
コマンドでコンテナを再起動したときに一瞬遷移します。ただRestart
からRunning
に遷移するのではなく一度Exited
に遷移してからRunning
状態に戻ります。 -
Dead
状態はコンテナ内でエラーが発生した時などに遷移することがあります。 -
Removing
はdocker rm
コマンドでコンテナを破棄するときの状態です。
コンテナへの接続
コンテナには、docker exec
コマンドを使って接続することができます。
$ docker run -d --name connect-test ubuntu tail -f /dev/null
$ docker exec -it connect-test /bin/bash
- Ubuntuイメージを基にしたconnect-testという名前のコンテナがバックグラウンドで作成・実行されます。
- tail -f /dev/nullは、無限に継続するプロセスであり、コンテナが実行中のままになります。
- 外部からDockerコンテナ内に対話的なセッションを開き、コンテナ内部でBashシェルを利用できます。
終わりに
最後まで記事をご覧いただきありがとうございました。
間違い等ありましたらご指摘いただけると幸いです
参考