Docker/Kubernetes実践コンテナ入門 復習(2)
Dockerコンテナのデプロイ
コンテナでアプリケーションを実行する
- Dockerイメージ
- Dockerコンテナを構成するファイルシステム、実行するアプリケーションをまとめた、コンテナを作成するテンプレートとなるもの
- Dockerコンテナ
- Dockerイメージから作成され、具現化されたファイルシステムとアプリケーションが実行されている状態
簡単なアプリケーションとDockerイメージを作る
- DockerfileにはDocker独自のDSL(ドメイン固有言語)で構成を定義する
FROMやRUNはインストラクション(命令)と呼ばれる
FROM
- Dockerイメージのベースイメージを指定
- 取得するイメージはDocker Hubというホスティングサービスに公開されているもの
- タグを指定することで特定のバージョンのイメージを識別する
RUN
- Dockerイメージビルド時にDockerコンテナ内で実行するコマンド
COPY
- Dockerを動作させているホストマシンのファイルやディレクトリをDockerコンテナ内にコピーする
CMD
- Dockerコンテナとして実行する際に、コンテナ内で実行するプロセスを指定
- RUNでアプリケーションの更新や配置、CMDでアプリケーションそのものを動かす
Dockerイメージをビルドする
- Dockerイメージを
docker image build
によりビルドする-
docker image build -t イメージ名[:タグ名] Dockerfileディレクトリパス
-
- -tオプションとイメージ名なしだとハッシュ値で管理ことになるため、必ずつける
- イメージ名の衝突回避のため、名前空間をつけることを推奨
example/test
ENTRYPOINTでコマンドの実行の仕方を工夫する
- ENTRYPOINTはCMDと同じくコンテナ内で実行するプロセスを指定可能
- CMDの引数がENTRYPOINTで実行するファイルへの引数となる
- コンテナの用途を制限したい場合に使用する
Dockerコンテナを実行する
docker container run Dokerイメージ
- -dオプションでバックグラウンド実行
ポートフォワーディング
- ホストマシンのポートをコンテナポートに紐付け、コンテナの外からきた通信をコンテナポートに転送する(コンテナポートは通常ホストからアクセス不可のため)
-p ホスト側ポート:コンテナポート
Dockerイメージの操作
- Dockerの基本操作はイメージに関する操作かコンテナに関する操作
- DockerイメージはDockerコンテナを作成するテンプレート
- DockerfileからDockerイメージを構築することをDockeイメージをビルドするという
docker image build イメージのビルド
- Dockerfileを元にDockerイメージを作成する
- -tオプションはイメージ名・タグ名子弟のため必須
- -fオプションはデフォルトのDockerfile以外のファイルを使う
- --pullオプションはFROMで指定したイメージをレジストリから取得する(取得ずみでもベースイメージを再取得する)
docker search イメージの検索
- Docker hubではリポジトリでDockerイメージを管理している
docker search オプション 検索キーワード
で登録リポジトリを検索可能- 表示はSTARSの降順
- --limit オプションで表示数制限
docker image pull イメージの取得
- Dockerレジストリからイメージを取得
docker image pull リポジトリ[:タグ名]
- タグを省略した場合、デフォルトのタグが利用される
docker image ls イメージの一覧
- ホストに保持されているイメージの一覧を表示する
docker image ls リポジトリ[:タグ名]
- docker pull/docker image buildしたイメージ
- コンテナIDとイメージIDは別物
docker image tag イメージのタグ付け
- Dockerイメージの特定のバージョンにタグ付けする
Dockerイメージのバージョン
- Dockerイメージのバージョン=イメージID(バージョン番号)
イメージIDへのタグ付け
- タグはイメージIDを持つDockerイメージを識別するためのもの
- タグを指定しない場合はlatestのタグがつく
- ビルド後のイメージにもタグ付け可能
docker image tag 元イメージ名 新イメージ名
docker image push イメージの公開
- DockerイメージをDoceker Hubに登録する
docker image push リポジトリ名:[タグ]
- 公開リポジトリのため、パスワードなどの機密情報は含めないようにする
Dockerコンテナの操作
Dockerのライフサイクル
- コンテナは実行中、停止、破棄の状態がある
- 作成されたコンテナは同じイメージを利用していても個別に状態を持つ
実行中
- Dockerイメージからコンテナが作成され、CMDやENTRYPONTで定義したアプリケーションの実行を開始する
- アプリケーションが実行中ならコンテナは実行中にある
停止
- 明示的に停止するかコンテナのアプリが終了した場合に自動停止する
- ディスクにコンテナの状態は残るため、再実行可能
破棄
- 停止したコンテナは明示的に破棄しない限りディスクに残り続けるため、不要なコンテナは破棄する
- 一度作成されたコンテナは開始時間などが異なるため、同じ状態のコンテナは作成不可
docker container run コンテナの作成と実行
- イメージからコンテンを作成・実行する
docker container run イメージ名/イメージID コマンド コマンド引数
- コンテナに名前をつけることで開発時の検証でコンテナIDやコンテナ名を頻繁に確認せずに済む
docker container run --name コンテナ名 イメージ名
docker contailer ls コンテナの一覧
- 実行中および終了したコンテナの一覧を表示
docker container ls
- -qオプションでコンテナIDだけ取得
- -filterオプションでイメージ名指定など特定のコンテナだけ取得
- -aオプションで終了したコンテナも含め取得
docker container stop コンテナの停止
- 実行しているコンテナを終了する
docker container stop コンテナIDまたはコンテナ名
docker container restart コンテナの再起動
- 停止したコンテンを再起動する
docker container restart コンテナIDまたはコンテナ名
docker container rm コンテナの破棄
- 停止したコンテナを削除する
docker container rm コンテナIDまたはコンテナ名
- -fオプションで実行中のコンテンを強制削除が可能
docker container run --rm
で停止後に自動削除する
docker container logs 標準出力の取得
- Dockerコンテナの標準出力を表示
- コンテナ内のアプリケーションがファイル出力したログは確認できない
docker container log コンテナIDまたはコンテナ名
docker container exec 実行中コンテナでコマンド実行
- 実行中コンテナで任意のコマンド実行
docker container exec コンテナID/コンテナ名 コンテナ内で実行するコマンド
docker container cp ファイルのコピー
- コンテナ同士、ホストとコンテナでファイルをコピーする
- 主にデバッグで使用する
docker container cp コピー元 コピー先
運用管理向けコマンド
prune 破棄
- 実行していないコンテナやイメージを一括削除する
docker container prune
docker image prune
docker container stats 利用状況の取得
- コンテナ単位のシステムリソースの利用状況を表示
Docker Composeでマルチコンテナを実行する
docker-composeによるコンテナの実行
- yaml形式の設定ファイルで複数コンテナの実行を管理できる
- Dockerイメージのビルドも行い、実行もできる
- イメージを頻繁に更新する開発時には--buildオプションをつけることでイメージのビルドが必ず実行される