はじめに
今回、Dockerを使用するのにあたって学習したことをまとめてみました。
Dockerとは
Dockerとは、軽量で高速に動作するコンテナ型仮想環境用のプラットフォームです。Dockerを使うことで、1台のサーバー上で様々なアプリケーションを手軽に仮想化・実行できる。
Dockerの利点
- 1台のサーバー上に複数のアプリケーション実行環境(Dockerコンテナ)を作成・利用できる
- アプリケーション実行環境(Dockerコンテナ)の他サーバーなどへの移転、他ユーザーとの共有※Dockerコンテナの移転や共有は複雑で手間のかかる操作を必要とせず、簡単に実行可能
- Dockerコンテナでアプリケーションの開発環境を作成し、インターネット上で他エンジニアと簡単に共有できる
基本用語
- イメージ(image)
- Dockerイメージはアプリケーションやその実行環境をまとめたテンプレートである。コンテナはこのイメージを元に実行される。例えば、Node.jsを動かす場合はnode:14やMySQLの場合はmysql:5.7など公式に提供されている
- コンテナ(Container)
- コンテナは、イメージから作成される実行環境そのものであり、一つのコンテナは一つのプロセスを実行するのが基本である
- Dockerfile
- Dockerfileはカスタムイメージを作成するための設定ファイルである。Dockerfileに記述された手順に従ってDockerがイメージを構築する
- Docker Compose
- Docker Composeは、複数のコンテナをまとめて管理するツールである。YAML形式の設定ファイルを使い、どのイメージを使用するか、どのポートを公開するかなどを記述できる
Dockerfile
Dockerfileは、イメージ作成のための「レシピ」である。
Dockerfile
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
EXPOSE 3000
-
FROM
- 使用するベースイメージを指定。この場合はnode:14を使用している
-
WORKDIR
- 作業ディレクトリを設定。以降の操作はこのディレクトリを基準に実行
-
COPY
- ホストのファイルをコンテナ内にコピーする
-
RUN
- コンテナ作成時に実行されるコマンド。この場合では依存関係をインストールしている
-
CMD
- コンテナ起動時に実行されるコマンドを指定
-
EXPOSE
- コンテナが使用するポートを指定
Docker Compose
Docker Composeは複数のコンテナを一括で管理するツールである。
docker-compose.yml
version: "3.8"
services:
wordpress:
image: wordpress
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
db:
image: myspl:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: password
-
version:
- docker-compose.ymlのバージョンを指定
-
services:
- サービス名をwardpressと定義。
docker-compose up
コマンドを使うと、この名前でコンテナが作成される
- サービス名をwardpressと定義。
-
image:
- 使用するDockerイメージを指定。この場合はWordPressの公式イメージを使用している
-
ports:
- ホストとコンテナ間のポートマッピングを指定。この場合はホストの8000番ポートをコンテナ内の80番ポートに紐付けしている
-
environment:
- 環境変数を設定。ここではWordPressが使用するデータベース接続情報をここで指定
- WORDPRESS_DB_HOST: データベースのホスト名
- WORDPRESS_DB_USER: データベースのユーザー名
- WORDPRESS_DB_PASSWORD: データベースのパスワード
- WORDPRESS_DB_NAME: 使用するデータベース名
- 環境変数を設定。ここではWordPressが使用するデータベース接続情報をここで指定
-
depends_on:
- wordpressサービスがdbサービスに依存していることを指定している。これにより、dbサービスが先に起動される
-
db:
- MySQLデータベースの設定
- image:使用するイメージ(mysql:5.7)を指定
- environment:MySQLの初期設定を指定
- MySQLデータベースの設定
Docker Composeコマンド
設定ができたらdocker-composeコマンドでDockerを起動
-
docker-compose --build
- Dockerイメージを構築する
-
docker-compose up
- 構築したDockerを起動する
-
docker-compose stop
- 起動したDockerを一時停止する
-
docker-compose down
- 構築したDockerを削除する
まとめ
Dockerはアプリケーションの開発・デプロイをするために便利なツールであり、どの環境でも同じアプリが動作する一貫性のある環境を提供でき、必要なリソースをすぐにセットアップ可能なので迅速なデプロイの実現を可能。軽量で高速なため仮想マシンよりリソース消費が少ない、Docker Composeで簡単に連携し複数のサービス管理をしやすいメリットがある。