【読書】Docker入門

最近プライベートでPythonを使った分析をしたいと思い、環境を作成しています。

ローカルで動くようになったのは良いのですが、分析の基盤をどのようにサーバにデプロイしたら良いのかも、ローカル以外の環境で動かすために何をして良いのかもよく分かりません。

Dockerを使うことで、分析環境構築自体もある程度楽にしたり、アプリケーションとDBを分けたりしてデプロイができるようになるのかなと思い、興味本位でDockerを学び始めました。

読んだ本

Docker入門

Docker入門

学んだこと

  • Dockerとは何か
  • Dockerのインストール方法
  • イメージ・コンテナ・プロセスの関係
  • DockerFileについて
  • DockerComposeについて

後々使用する際に忘れないように、学んだことを自分なりに噛み砕いて、ざっくり書き残しておこうと思います。

間違っていることや、表現する上での間違いなどあるかと思います、ご指摘など頂けますと幸いです。

Dockerとは何か

仮想化環境のこと。

メリット

  • コンテナ技術によって、軽量な仮想化を実現
  • 設定ファイルに基づいて、Dockerエンジンで稼働可能なアプリケーション実行環境を簡単に、自動的に構築できる
  • アプリケーション実行環境の構成に必要なイメージを配布する「Docker Hub」などのレジストリサービスを利用できる

誰でも簡単に、同じ実行環境を作ることができる。

イメージ・コンテナ・プロセスの関係

  • イメージ:コンテナを作成するためのテンプレート
  • コンテナ:ホストOSとは隔離されたプログラム実行環境
  • プロセス:コンテナ内で稼働中のプログラムの実行状態のこと

Dockerサブコマンド

筆者が推奨していたコマンド8つを覚えました。

  • commit:コンテナに加えた変更を基に新しいイメージを作成(コンテナ→イメージ)
  • images:イメージの一覧表示
  • ps:コンテナの一覧表示
  • run:新しいコンテナ内でコマンドを実行
  • rm:1つ以上のコンテナを削除する
  • rmi:1つ以上のイメージを削除する
  • search:レジストリからイメージを検索
  • stop(start):稼働(停止)中のコンテナを停止(稼働)

Dockerfile

イメージ作成の手順を記述した設定ファイル。docker buildで設定ファイルに記述されているイメージを作成することができる。

  • FROM:作業のベースとなるイメージを指定
  • ADD / COPY:イメージ内にファイルやディレクトリをコピーする
  • ARG:値をbuildサブコマンド実行時に指定できる変数を設定
  • CMD / ENTRYPOINT:コンテナ起動時に最初に実行するコマンドを指定
  • ENV:イメージ作成時やコンテナ実行時の環境変数を設定
  • EXPOSE:コンテナが通信を待ち受ける通信ポート番号を指定
  • LABEL:イメージに付加する管理情報(メタデータ)を指定
  • MAINTAINER:イメージ作成者の名前を指定
  • ONBUILD:生成したイメージを元に再度イメージをビルドする際に実行するコマンドを指定
  • RUN:作業用コンテナ内で実行するコマンドを指定:
  • USER:イメージ作成時やコンテナ実行時のユーザを指定
  • VOLUME:ホストの一時ディレクトリを割り当てるディレクトリを指定
  • WORKDIR:イメージ作成時やコンテナ実行時のカレントディレクトリを指定

Docker Compose

複数コンテナの連携などの管理を簡単に行うことができる。

Docker Composeをインストールして、docker-compose.ymlに記述することで使用できる。

ymlファイルの書き方は、Dockerの公式サイトに書いてある。

docs.docker.com

最低限必要な命令は、下記の7種類。

  • command:コンテナの既存コマンドや引数を置き換えるコマンド
  • environment:コンテナに設定する環境変数を設定
  • expose:コンテナが通信を待ち受ける通信ポート番号を指定
  • image:サービスで使用するイメージを指定
  • links:リンク先のコンテナを「サービス名:別名」の書式で指定
  • ports:コンテナの待ち受け通信ポートで外部からの通信を受信できるように、ホストにポート転送設定を施す
  • volumes:ホストのディレクトリをマウントするコンテナ内ディレクトリを指定