はじめに
docker初心者の自分が同じようにdocker初心者の方向けに作成したものです。
Dockerfileやdocker-composeでよく使われている用語を抜粋してこの記事を書かせていただきました。皆さんの参考になれば幸いです。✊
対象者
- Docker, docker-compose 初心者の方
- ファイルの書き方を忘れてしまった方
Dockerfile とは
Dockerfile は、命令を取り込み自動的にイメージをビルドしてくれるテキストファイルである。pull しなくても自分で Dockerfile を書けば好きなようにイメージを作成することができる。
Dockerfile よく使われる命令解説(例付き)
FROM
Docker イメージを指定(ローカルにイメージがなくても勝手に作成する)
FROM python:3.7
ENV
環境変数(key, value)を設定する
ENV PYTHONUNBUFFERED 1
RUN
イメージ作成前にシェルを実行する
RUN mkdir /code
CMD
イメージ作成後にシェルを実行、複数用いても最後の 1 つだけ実行する
CMD python3 app.py
WORKDIR
docker コンテナ がコマンドを開始するディレクトリを指定
WORKDIR /usr/share/nginx/html
COPY
ホストからファイルを Docker イメージにコピー、圧縮ファイルの場合解凍されない
# /~/で囲うと絶対パス、無いとWORKDIRの相対パス
COPY index.html index.html
ADD
ホストからファイルを Docker イメージにコピー、圧縮ファイルの場合解凍される
# /~/で囲うと絶対パス、無いとWORKDIRの相対パス
ADD requirements.txt /code/
VOLUME
ホスト側のデータをマウントするディレクトリを指定
VOLUME /code
docker-compose とは
docker-compose は、YAML ファイルを使って複数のコンテナを定義し実行する Docker アプリケーションのためのツール。
docker-compose 解説(例付き)
サンプル
version: '3'
services:
db:
image: postgres
container_name: docker_compose_postgres
ports:
- "5555"
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
networks:
- docker_link
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
networks:
- docker_link
networks:
docker_link:
- version:docker-compose のバージョン
-
service:動かすアプリケーション
- image:Docker イメージ指定
- container_name:コンテナ名
- ports:ホスト側とコンテナ側の両方のポートを指定だけでなく公開用のみも指定できる
- environment:環境変数を追加
- build:Dockerfile の存在するディレクトリを指定
- command:デフォルトのコマンドを上書き
- volumes:ホストのディレクトリをマウントするディレクトリを指定
- depends_on:サービス間の依存関係を指定
- networks:どのネットワークに接続するかを指定
- networks:ネットワークの指定