コピペコードで快適生活

明日使えるソースを自分のために

Dockerの基本的な使い方メモ

Dockerを触ることになったので、基本的な使い方をメモしておく。

用語

イメージ: コンテナのベースとなるファイル群
コンテナ: イメージから作成されたインスタンス

pullできるdockerのイメージはここから確認できる
https://hub.docker.com/explore/

基本的なコマンド

# イメージの取得
docker pull keymetrics/pm2

# イメージの確認
docker images

# イメージからコンテナを作成
# 末尾のコマンドを指定すると起動時に実行される。
# 指定しないとDockerfileで指定したCMDが実行される。
docker run --name [コンテナ名] -d [イメージID] /sbin/init

# コンテナにログイン(exitでログアウト)
docker exec -it [コンテナ名] /bin/sh

# コンテナの一覧
docker ps -a

# コンテナを起動する
docker start [コンテナ名]

# コンテナを止める
docker stop [コンテナ名]

# コンテナを削除する(事前にstopしておく必要がある)
docker rm [コンテナ名]

# イメージの削除
docker rmi [イメージID]
docker rmi -f [イメージID] # 強制削除

こちらで勉強させていただきました。
https://qiita.com/butada/items/3e6cd338cb703eef64b4

Dockerfile作る

↓みたいな感じでDockerfileを作る

FROM keymetrics/pm2:8-alpine        # 使用するイメージ

ARG app_dir=/usr/src/app            # 変数の定義
WORKDIR ${app_dir}                  # 以下のコマンドをこのディレクトリで実行する
ENV DEBIAN_FRONTEND noninteractive  # 環境変数の設定 入力待ちでブロックしなくなる
ENV TZ JST-9                        # 環境の設定 タイムゾーンをJSTにする
RUN apk add --update perl           # perlのインストール(Alpine Linuxのコマンド)

# COPYでローカルのファイルをコンテナへコピー
# RUNでシェルを実行
COPY ./package.json .
COPY ./yarn.lock .
COPY ./tools ./tools
COPY ./.npmrc .
COPY ./public ./public
COPY ./ecosystem.config.js ./ecosystem.config.js
RUN touch ./public/healthCheck.html

RUN yarn install --production --no-progress
COPY build/public/assets/ public/assets
COPY build/server.js .
COPY build/assets.json .

# 以降の実行をnodeユーザで行う
# CMDはコンテナ実行時のコマンド。Dockerfileの中では1度だけ指定できる。ここではpm2を起動している。
USER node
CMD [ "pm2-runtime", "start", "ecosystem.config.js", "--env", "production", "-i", "max"]

Dockerfileのあるディレクトリで実行することで、記載された内容に基づいてイメージを作る。

docker build .

他メモ

## --rmオプションつきで起動して終了するとコンテナ破棄する
docker run --rm -t -i ubuntu /bin/bash

# ポートフォワード
# -pオプションで、外部からアクセスされるポート番号:コンテナ側のポート番号を指定
# -dオプションはバックグラウンドで実行
$ docker run --name some-nginx -d -p 8080:80 nginx

参考
http://docs.docker.jp/engine/reference/builder.html#