のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

そろそろ本気でDockerを始めるためのTips

去年あたりから急激にDockerが騒がれてますな〜と
ここいらで本気で慣れておきたいところなので、Dockerコマンド〜Dockerfileの作成をまとめてみました。

Dockerとは

Docker Inc. がオープンソースで開発しているコンテナ型仮想化技術、ソフトウェア。
各コンテナは独立した環境になっており、その中でアプリケーションをパッケージング、デプロイ、実行することができる。
また、このコンテナは簡単に再利用することが出来、コンテナを複数起動することにより容易にアプリケーションサーバ複数実行することが可能。 Dockerfileに設定を記述していきコンテナを構成していく。GO言語で記述できる。

コンテナとは

一つのホスト上で複数の隔離されたLinuxシステム(コンテナ)を走らせる、OSレベルの仮想化ソフトウェア。 VMに比べ、消費リソースが少い、起動が早い、オーバヘッドが少いというメリットがある。

VMとの比較

  • ローカル環境でコンテナを作成すればどこでも動作する
  • 起動が高速
  • VMに比べサイズが少ない
  • 必要な部分のみのポータビリティーを確保できる
  • ハードウェア仮想化も行う完全仮想型に比べオーバヘッドが小さい

MacへDockerのインストール

MacでDockerを利用するためには、boot2dockerをインストールする必要がある。
boot2dockerはあらかじめDockerサーバがインストールされている仮想マシンVirtualBox上で実行可能。 Macではbrewでインストール可能。

$ brew install boot2docker

boot2dockerの起動

$ boot2docker init
$ boot2docker up

完了すると環境変数を設定るするようにメッセージが表示されるので、設定する。

export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://192.168.xx.xx:port
export DOCKER_CERT_PATH=/Users/<username>/.boot2docker/certs/boot2docker-vm

boot2dockerサーバに接続
boot2dockerサーバ内で、もちろんdockerコマンドは使用可能

$ boot2docker ssh

Dockerコンテナの実行

とりあえずubuntuを起動してみる

$ docker pull ubuntu
$ docker ps -a

docker psコマンドでコンテナの実行状態を確認できる。

最低限覚えておきたいコマンド

コンテナの実行状態をリスト表示

$ docker ps -a

オプション -a は全てのコンテナを表示、-lは最後に実行したコンテナを表示する

イメージの取得

$ docker pull NAME[:TAG]

Docker Hubで公開されているイメージを取得することができる。

https://hub.docker.com

コンテナの停止

$ docker stop <CONTAINER ID> or <CONTAINER NAME>

コンテナIDは省略可能。被ってなければ3~4文字程度入力すればいい。

コンテナの実行

$ docker start <CONTAINER ID> or <CONTAINER NAME>

コンテナの再実行

$ docker restart <CONTAINER ID> or <CONTAINER NAME>

コンテナへのアタッチ

$ docker attach <CONTAINER ID> or <CONTAINER NAME>

コンテナの強制終了

$ docker kill <CONTAINER ID> or <CONTAINER NAME>

コンテナ内プロセスの監視

$ docker top <CONTAINER ID> or <CONTAINER NAME>

コンテナの状態確認

$ docker inspect <CONTAINER ID> or <CONTAINER NAME>

出力はJSON形式

コンテナの削除

$ docker rm <CONTAINER ID> or <CONTAINER NAME>

イメージ一覧の確認

$ docker images -a

-a オプションで全てのイメージが確認できる。

イメージの削除

$ docker rmi <IMAGE ID>

Dockerfileのフォーマット

FROM

FROMはBase Imageを設定する命令で必ず記述する必要がある。
Docker Hubから利用したいImageを記述するといい。

FROM <image>:<tag>

MAINTAINER

Imageの作成者を記述
必須ではない

MAINTAINER <name> <mail>

RUN

任意のコマンドを実行

RUN <command>
# exec form style
RUN ["executable", "param1", "param2"...]

CMD

コンテナで実行するメインのコマンド
Dockerfile内で1つしか記述できない

CMD <command>
# exec form style
CMD ["executable", "param1", "param2"...]

EXPOSE

コンテナが公開するポート番号を記述

EXPOSE [port1, port2]

ENV

環境変数をセットする
セットした環境変数は永続化される

ENV <key> <value>

ADD

ホストのファイルをコンテナ内にコピーする

ADD <src> <dest>

VOLUME

VOLUMEはホスト、他のコンテナにマウントするポイントを設定することができる
マウントすることで、ホスト、他のコンテナとファイルシステムを共有することが可能

VOLUME ["/data"]

USER

実行するusername、あるいはUIDをセット

USER <name>

WORKDIR

作業ディレクトリを設定

WORKDIR /path/to/workdir

Dockerfileのビルド

Dockerコンテナーの起動、構成、Dockerイメージの作成まで一気に実行

$ docker build -t <Image Name:Tag Name> <Dockerfile current directory>

コンテナの起動

$ docker run --name <CONTAINER NAME> <Image Name>