去年あたりから急激に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で公開されているイメージを取得することができる。
コンテナの停止
$ 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