Docker(ドッカー)イメージはコンテナの元だ。例えば、MySQLを運用するコンテナはMySQLイメージで起動する。ドッカーイメージはDockerfile (ドッカーファイル)で定義する。単純なネイティブなコードは入っていないプロジェクトを下記のドッカーファイルでイメージに生成できる:
# FROM <イメージ名>:<バージョンタグ>
# このイメージを元に使って
FROM node:8.2.1-alpine
# イメージの中にアプリ用ディレクトリを作成
RUN mkdir -p /opt/myapp
# イメージの中の"cd"
WORKDIR /opt/myapp
# Dockerfileのディレクトリの中身をイメージの中のWORKDIRにコピー
COPY . .
# コンテナのポート8000をホストに開示
EXPOSE 8000
# イメージの起動の時実行されるコマンド
CMD ["npx", "http-server", "-p", "8000"]
上記のドッカーファイルはAlpineと言う軽いLinuxを利用する。
ネイティブなコードをコンテナの中でコンパイルする必要がある場合、Dockerfileにコンパイルステップが必要:
# FROM <イメージ名>:<バージョンタグ>
# このイメージを元に使って
FROM node:8.2.1-alpine
# イメージの中にアプリ用ディレクトリを作成
RUN mkdir -p /opt/myapp
# イメージの中の"cd"
WORKDIR /opt/myapp
# Dockerfileのディレクトリの中身をイメージの中のWORKDIRにコピー
COPY . .
# コンパイルステップは一つのRUNだけで行う
RUN \
# コンパイルに必要な依存をインストール
apk add --no-cache --virtual build-deps \
python=2.7.13-r1 \
make=4.2.1-r0 \
g++=6.3.0-r4 && \
# コンパイル
npm rebuild && \
# コンパイル依存はもういらないのでイメージに無駄に入らないように同じRUNの中でアンインストール
apk del build-deps
# コンテナのポート8000をホストに開示
EXPOSE 8000
# イメージの起動の時実行されるコマンド
CMD ["npx", "http-server", "-p", "8000"]
ドッカーイメージの生成
Dockerfileのディレクトリの中で:
docker build --tag <organization>/<project>:<tag> .
organization(任意): 普通にDocker Hubでのアカウント名
project(必須): プロジェクト名
tag(任意): 設定しないといつもlatestタグがイメージに付けられる。
コンテナの起動
docker run --publish 8000:3000 --detach --name mycontainer --env PORT=3000 <organization>/<project>:<tag>
上記のコマンドでPORT=3000という環境変数がコンテナに渡されて、コンテナのポート3000がホストOSのポート8000でアクセスできるように起動される。
最新のMySQLイメージでコンテナを起動:
docker run --name my-mysql-container --env MYSQL_ROOT_PASSWORD=mypassword --detach mysql:latest