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オプションをつけることでイメージのビルドが必ず実行される