Dockerとは
Dockerとは、OSレベルの仮想化プラットフォームソリューションです。Dockerイメージを用いたコンテナ仮想化システムを構築し、仮想化実行環境を実現します。Dockerにより環境の複製と配布が容易にできますので、開発のスクラップアンドビルドが効率的に実施できます。DevOps開発運用には欠かせないソリューションです。 【参考】:Docker
Docker環境構築の事前作業
Dockerでは、Windows版・Mac版・Linux版のダウンロードモジュールが用意されています。Mac版・Windows版では、Docker Desktopを利用します。 Docker Desktopには、ダッシュボード・Docker Engine・Docker CLI・Docker Compose等が含まれます。Linux版ではDocker Engineをインストールしておきます。 【参考】:Get Started with Docker
Docker Windows版のセットアップ概要
Docker Desktopは、Docker Hubのサイトまたはドキュメントサイトからダウンロードできます。 【参考】:Docker Desktop for Windows 【参考】:Install Docker Desktop on Windows
インストール方法は以下の通りです。 ・ダウンロードモジュールの起動 Docker Desktop Installer.exeを起動します。
・Configuration画面の確認 「Enable Hyper-V Windows Features」と「 Install required Windows components for WSL 2」のオプション設定を確認します。
・インストール実行 手順に従い「Install」を選択し、終了後「Close」を選択します。
・管理者アカウントの追加 管理者アカウントのadministratorとComputer Managementをdocker-usersグループに追加します。
最初の起動時には新しいライセンス条項が表示されますので、「Accept」をクリックすることで利用可能です。これでセットアップが完了しましたので、環境構築を行います。
Docker Mac版のセットアップ概要
Docker Desktopは、Docker Hubのサイトまたはドキュメントサイトからダウンロードできます。 【参考】:Docker Desktop for Mac 【参考】:Install Docker Desktop on Mac
インストール方法は以下の通りです。 ・ダウンロードモジュールの起動 Docker.dmgをダブルクリックしインストーラを起動します。
・アプリケーションフォルダに登録 Dockerアイコン(Docker.app)をアプリケーションフォルダーにドラッグアンドドロップします。
Windows同様、最初の起動時には新しいライセンス条項が表示されますので、「Accept」をクリックすることで利用可能です。これでセットアップが完了しましたので、環境構築を行います。
Docker環境構築の流れ
Dockerのモジュールセットアップが完了したら、Docker実行のために必要な環境構築を進めていきます。Dockerの利用は以下の流れで行います。DockerfileからDockerイメージが作成できたら実行可能な状態になります。
・Dockerfileの作成 必要な構成ファイルをDockerfileとして作成します。 テキスト形式の構成ファイルなため、テキストエディタまたは統合開発環境(IDE)を使って作成します。
・Dockerイメージの作成 Dockerfileからコンテナ動作させるDockerイメージを生成します。Dockerイメージはアプリケーション実行に必要な変数・コマンド・メタデータを含んだテンプレートファイルです。”docker build”でDockerfileからDockerイメージを作成します。
・コンテナの実行 Dockerイメージは静的なテンプレートファイルなため、”docker run”で起動します。Dockerイメージは起動することでコンテナで実行されます。実行されているコンテナはメモリー上の実行インスタンスと言われます。
Docker CLIは、コマンドラインインターフェイスでコンテナの「生成と削除」「起動・停止」「プロセスの実行・一時停止と解除」「操作・保全」「稼働状況とログ出力」等のコマンドが提供されています。また、イメージの利用やリポジトリの活用もCLIで実施します。WindowsやMacでは、Docker DesktopでGUIベースで作業を行うこともできます。
上記の流れで運用上問題がない場合は、標準テンプレートとしてイメージを配布活用します。Docker Hubのような公開リポジトリを用いて、イメージを共有することも可能です。
Dockerfileの書き方
Dockerfileは、Dockerにイメージビルドの指定を行うファイルです。テキストファイルなため、エディタまたは標準入力からリダイレクトしファイルを生成します。”docker build”コマンドでイメージをビルドします。
”docker build”では、DockerfileとPATHやURLのコンテキストを用いてイメージをビルドします。実際のビルド処理はDockerデーモンが実行しています。Dockerfileの記述は命令(instruction)と引数(arguments)のセットで記述します。”#”で始まる行はコメント行です。
命令(instruction)は以下が指定可能です。 ・FROM イメージビルドの処理ステージを初期化し、ベースとなるイメージを設定します。 通常にARGを除き、最初に記述します 例:FROM base:latest
・ARG 変数を宣言します。 例:ARG VERSION=latest FROM base:${VERSION}
・RUN コマンドを実行し、イメージビルドを確定します。 シェル実行形式、またはexec形式で記載します。 例:RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME' または RUN ["/bin/bash", "-c", "echo hello"]
・CMD デフォルト処理を設定するために1つだけ記述します。 イメージが起動されたときに実行する命令です。 シェル実行形式・ENTRYPOINTのデフォルトパラメータまたはexec形式で記載します。
・ENTRYPOINT コンテナを実行モジュールのように実行する際に設定します。 シェル実行形式またはexec形式で記載します。 ”docker run --entrypoint”でENTRYPOINTを置き換えることもできます。 DockerfileにはCMD、またはENTRYPOINTのいずれかが必要です。
・LABEL
イメージにメタデータを追加する命令です。
・EXPOSE コンテナ実行時のネットワークのリッスンポートを指定できます。 例:EXPOSE 80/tcp
・ENV
環境変数に値を設定します。
変数が1つの場合は”ENV
・ADD 指定するファイルやディレクトリ・リモートファイルURLを指定パスに追加します。 例:ADD files /somedir/
・COPY 指定するファイルやディレクトリをコピーし、指定パスに追加します。 例:COPY files /somedir/
・VOLUME 指定した名称でマウントポイントを生成します。
・USER ユーザ名と、必要に応じてユーザグループを指定します。
・WORKDIR ワークディレクトリを指定します。
・ARG ビルド時の変数のデフォルト値を指定します。 この他にも、トリガー命令やシグナル処理の指定等を行うことができます。 【参考】:Best practices for writing Dockerfiles 【参考】:Dockerfile reference
Dockerfileの具体例
Dockerfileは1から作成することができますが、「Docker Official Images」を利用することをおすすめします。理由としては、これまでのDockerの運用経験からより安定した構成情報が公開されており、そのベストプラクティスを活かしたDockerイメージが構成可能となるためです。Docker Official Imageは以下のリンクに格納されています。 【参考】:Docker Official Images
この「Repositories」からリポジトリを検索し、利用します。Docker公式サイトでは、Bitbucket・circleci・elastic・GitLab・Jenkins・JFrog・kubernetes・mongo DB・NGiNX・GitHub・redis・Visual Studio Code・VMware Tanzu等がDockerパートナーとして紹介されており、活発に情報公開されています。
Python・PHP・Ruby on Rails等の主要開発言語やフレームワーク、httpd・postgres・ubuntuも良く利用されていますので、効率的にイメージ構築が可能です。
WordpressのようにPHPとApacheを組み合わせて運用するケースでは、リポジトリをそのまま利用するだけではなく、Dockerfileの記述を理解する情報源としても有効です。参考までに、2021年12月15日のWordpress latest版では、PHP8.1とApacheの組み合わせがDockerfileに記述されています。ご興味あれば参考にしてください。 【参考】:GitHub docker-library wordpress / latest / php8.1 / apache / Dockerfile
Docker Composeを用いた環境構築
Docker Composeは、YAML形式のファイルを用いて複数のコンテナを定義・実行することができます。アプリケーションサービスの生成や起動が効率的に行うことができます。本番稼働のワークフローを効率化することが可能です。大規模で複雑な運用を行う場合に、効率的なワークフローを実現します。
Docker Composeの作業ステップとしては以下の手順に従います。 ・Dockerfileの定義 アプリケーション環境を定義することで再構築可能となります。
・docker-compose.ymlの定義 ファイルにアプリケーション構成サービスを定義します。
・docker-composeの実行 ”docker-compose up” でアプリケーションの起動・実行をします。
【参考】:Overview of Docker Compose
Dockerfileを作成し環境構築を効率的に実施しましょう
Dockerのセットアップが完了したら、Dockerfileがあれば環境構築が可能です。公開リポジトリでは、多くのソフトウェアライブラリが「Docker Official Images」に公開されています。
ベストプラクティスの利用は環境構築と運用効率化に欠かせないものであり、さらに知識吸収にはうってつけの蓄積情報です。公開リポジトリの登録情報やファイルを参照し理解を深めていきましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから