目次
1. Dockerについて
Docker超入門講座 合併|ゼロから実践する4時間のフルコース
Dockerとはなにかを説明してくれている動画。
2. Dockerの導入について
3. Dockerfile、Docker Composeについて
3.1 Dockerfileについて
Dockerfileとは、口述するDockerイメージを作るための設計図である。
よくDockerfileとDockerイメージの違いについてわからなくなることがあるが、定義的には以下のように捉えると良い:
- Dockerfile:設計図
- Dockerイメージ:システムの完成品(実体なし)
- Dockerコンテナ:システムの完成品(実体あり)
料理に例えると以下の通り:
- Dockerfile:レシピ
- Dockerイメージ:料理の完成品(写真)
- Dockerコンテナ:提供された料理の完成品(実物)
3.2 Dockerfileの構成
FROM ベースイメージ名
ベースイメージでは、すでに用意された環境を仮想環境に搭載することができる。
例:
FROM php:8.2-apache
RUN コマンド
イメージ構築時に実行されるコマンドを記述する。
RUN apt-get update && apt-get install -y git
この場合はイメージ構築時にapt-getの更新とgitのダウンロードを行う。
WORKDIR ディレクトリ名
WORKDIRではその後の作業でのカレントディレクトリ(現在のディレクトリ)を設定する。
WORKDIR /var/www/html
この場合は/var/www/htmlを作業ディレクトリとする。
COPY 自身のファイルパス イメージ内のコピー先
自身のファイルをイメージにコピーする
COPY index.php /var/www/html/
この場合は自身のindex.phpをイメージ内の/var/www/html/にコピーする。
ADD URL or ファイル
COPYと違いURLなどからファイルをダウンロードする場合はADDを使う。
EXPOSE port番号
外部に公開するポート番号(いわゆる送受信のための出入口)を設定。設定する場合はDocker container run -pコマンドを使う必要がある。
その他の設定(必須じゃないけど知っとくと便利)
VOLUME 保存用のファイル
Dockerコンテナ内で作成されたファイルはコンテナを削除するとすべて消える。それらを保存するためにVOLUMEがある。
VOLUME /data
この場合は/dataがボリュームとして自動的にDockerに管理される。
3.3 Docker composeについて
LAMP環境などは基本役割ごとにサーバーをDocker開発環境下ではコンテナを分けるべきである。ただ一つ一つのコンテナを定義実行管理するのは面倒くさい。その仕事を行うのがDocker composeである。
Docker composeの仕事は主に複数コンテナの起動・停止、状態確認、実行中サービスのログ確認をする。Doker composeは基本ymlを拡張子に持つ。
3.4 Docker composeの構成
version: '3.8'
使用しているDocker composeのバージョンを指定する。
seveices:
このセクションの仮想でコンテナを複数定義できる。
services:
任意の名前:
各設定
任意の名前:
...
services内の設定
image: ベースイメージ名
そのコンテナのベースイメージの設定
container_name: コンテナ名
コンテナ名を指定、指定しない場合はランダム
volumes:ホスト側のフォルダ:コンテナ内のフォルダ
ホスト側の変更をコンテナ内の変更と同期させる(マウント)
port: "ホスト側のポート:コンテナ内のポート"
ホスト側のポートをコンテナのポートにマッピングする
高度な設定
depends_on:サービス名
ほかのサービスがある場合、ここに書くとそのサービスが先に起動するようになる。
restart:
設定されたコンテナが停止しても自動的に再起動する設定。(本番環境向き)。引数は以下の4つが存在する。
- "no" : default 再起動しない
- always : コンテナが削除されるまで停止しても起動し続ける
- on-failure : exitコードがエラーを出した時だけ再起動する
- unless-stopped : alwaysとほとんど同じだが手動で止めたら起動しない
environment: 環境変数設定
環境変数を設定する。MYSQLの設定などで使う
3.4 Docker composeのTips
volumeについて
基本volumeは前述したようにホスト側のファイル:コンテナ内のファイルという書き方をするが、単純に以下のように書くこともある。
volume:ホスト側のファイル
これは何がマウントされているかを明示するためだ。実際はDockerが自動でそのファイルをvolumeしてくれるが、開発規模が大きくなったときどのファイルをvolumeしているかわからなくなるため明示するほうがいい。
Docker composeとDockerfileの併用
コンテナ内に追加のライブラリを入れあい場合や設定ファイルを変更したい場合、テスト環境と開発環境を分けたい場合などは、各コンテナの招請を設定できるDockerfileを使うことができる。その時は以下の文章をDocker composeの任意のコンテナ設定内に追加する。
build:
context: ./web
dockerfile: Dockerfile
4 Docker基本コマンド
dockerのイメージとは作りたい仮想環境の設計図のようなもの。イメージではDockerfileが指示書、Dockerイメージは設計図、Dockerコンテナが完成品のようなものである。
コンテナが一つの場合
4.1 Dockerのイメージを作成
docker image build [オプション] パス/URL
よく使うオプション
-t イメージに名前とタグを付与
例)docker image build -t myapp:1.0 .
-f Dockerfileのファイル名を指定する(デフォルトはDockerfile)
例) docker image build -f Dockerfile.dev .
--build-arg Dockerfileに引数を入力
例) docker image build --build-arg VERSION=18 .
--pull ベースイメージを常に最新のものにする
例) docker image build --pull -t myapp .
例文
docker image build -t test:1.0 .
カレントディレクトリ下にDockerfileがあり、imageの名前をtest, versionが1.0の場合
4.2 Dockerコンテナの操作
コンテナの起動
docker container run [オプション] イメージ名
よく使うオプション
-d バックグラウンドでコンテナを起動
例) docker container run -d image_name
-it コンテナに接続して中でコマンド実行できるようになる(対話モード)
例) docker container run -it image_name bash
‼ コンテナが起動してもすぐ閉じてしまう場合は-itをつける必要がある
--name コンテナに任意の名前をつける
例) docker container run -d --name image_name
-p ホストのポートをコンテナのポートに転送する
docker container run -p 8080:80 image_name
-v コンテナ内で行った変更をマウントしてローカル環境に反映
例)
docker volume create mydata
docker container run -d -v mydata:コンテナ内のディレクトリ image_name
--network コンテナにネットワークを指定(複数のコンテナを同一ネットワーク内で使用するときに使う)
例) docker network create mynet
docker container run -d --network=mynet image_name
コンテナ内のshellを起動
docker exec -it コンテナ名 bash
コンテナの状態確認
docker image ls イメージの表示 -aで実行されてないコンテナも確認可能
docker container ls コンテナの表示
docker container logs コンテナがどのように動いているかわかる
コンテナの削除、停止
docker system prune -a 使っていないコンテナを止めることができる
docker stop コンテナ名 特定のコンテナを止める
コンテナが複数の場合
4.3 複数コンテナの操作
複数コンテナの起動
docker-compose up
-d バックグラウンド起動
-y コンテナ起動時の回答をYesにする
複数コンテナの状態確認
docker-compose ps コンテナの一覧表示
docker-compose logs ログの表示(-f でリアルタイム監視)
複数コンテナの停止、削除、再起動
docker-compose stop 停止
docker-compose down 削除
docker-compose restart 再起動
コンテナ内に入る
docker-compose exec サービス名 bash