docker

Docker コマンドなどメモ。

Dockerを使ってみました。メモしておきます。
Dockerはコンテナと呼ばれる技術に分類されるそうです。Docker以外にもコンテナ技術を使用した経験がある方は馴染みやすいそうです。

環境構築

環境はMacです。Macへの環境のインストールはDocker for MacDOCKER TOOLBOXがあるようなのですが、前者が良かったです。

Docker for Mac

Docker for Macのページから、Docker.appをインストールします。

Docker.app

Docker.appをインストールするとMacのターミナルでdockerコマンドが使えるようになりました。

DOCKER TOOLBOX

最初はdocker-toolboxをインストールしました。
https://www.docker.com/products/docker-toolbox

Docker app
左にあるクジラのアイコンをタップするとdockerコマンドが使えるターミナルが立ち上がり、クジラが表示されます。

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

ここで192.168.99.100みたいにIPが出ていない場合は起動で失敗しているかもしれません。

Kitematic.appも視覚的にわかるので起動しておくと助かりました。

Dockerの流れ

dockerでよくある簡単な流れを書きます。

Dockerのリポジトリなどからimageを持ってくる。あるいはDockerfileを作成してimageを作る。

Dockerのimageからコンテナを生成する。

docker build でイメージを作成

ローカルに置いていあるDockerfileからイメージを作成する場合です。

イメージを作成
docker build -t 任意のイメージ名 .

この後に、docker imagesでイメージが作成されているか確認できます。

docker images で一覧を確認

イメージ一覧を確認したい場合は、docker imagesを使用します。

イメージ一覧
docker images

以下はdocker images実行例です。

イメージ一覧
docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
gcr.io/tensorflow/tensorflow   latest              93cef7caeec9        3 weeks ago         959 MB
richarvey/nginx-php-fpm        latest              d7b6d1fa619d        3 months ago        181.9 MB
・・・略

イメージ一覧が表示されました。

docker pull で image を更新

docker pull イメージ名

latest になります。

docker rmi でイメージを削除

docker rmi でコンテナ名を指定するとイメージを削除できます。

イメージ削除
docker rmi コンテナ名

実際にコンテナ名を指定した例です。

イメージ削除
docker rmi ab29e88d861f

複数のイメージを同時に削除したい場合は半角スペースでつなげます。

イメージの複数削除
docker rmi 2733c3e4e82a f6f08705ddde bb4bb84236f1

イメージの強制削除

イメージの強制削除
docker rmi -f イメージ名

-f オプションで強制削除です。

docker run でコンテナの作成

docker runではイメージからコンテナを作成します。

コンテナの作成
docker run イメージ名

以下はhello-worldイメージからコンテナを作成した場合です。

hello-worldコンテナを作成
docker run hello-world

この後に、作成されたコンテナを確認するには docker ps -a です。

docker run のオプション

docker run のよく見るオプションを追加していきます。

オプション 概要
-d バックグラウンドでコンテナ生成
-v 共有システムファイル -v ホスト側ディレクトリ:コンテナ側ディレクトリのようにカンマ区切りで指定
--name コンテナ名
--link 他のコンテナのリンクを追加 コンテナ名 か id:エイリアス もしくは コンテナ名 か id

--name オプションの使用例です。

nodeコンテナを名前を指定して作成
docker run --name node_container node

node イメージから node_container という名前のコンテナ名でコンテナを作成しました。

docker ps でコンテナの確認

稼働しているコンテナ一覧を表示します。

コンテナを確認
docker ps

docker ps実行例です。

コンテナを確認
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
1768a24cbce3        60a61bc4a5b6        "/usr/local/bin/init."   4 minutes ago       Up 2 minutes        8888/tcp            pugy

docker startでコンテナを開始

コンテナを開始したい場合は、docker startを使用します。

コンテナを回
docker start コンテナID

この後に、docker psを実行すると開始したコンテナが表示されます。

docker stopでコンテナを停止

コンテナを停止したい場合は、docker stopを使用します。

コンテナを停止
docker stop コンテナID

以下はdocker stopの例です。

コンテナIDを指定してコンテナを停止
docker stop 1768a24cbce3

この後に、docker psを実行すると停止したコンテナが表示されなくなっています。

docker rm でコンテナの削除

コンテナを削除したい場合は、docker rmを使用します。

コンテナ削除
docker rm コンテナ名
コンテナ削除
docker rm ab29e88d861f

起動中のコンテナを削除

docker exec でコンテナを操作

docker execはコンテナ内でコマンドを実行する場合に使用します。

docker exec でコンテナに入る

サーバーでよくやるようにSSHで入ってbashで色々な設定ファイルを見たりしたいというのはdocker exec からできました。

コンテナを確認
docker ps
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS               NAMES
156e6723afa5        richarvey/nginx-php-fpm   "/start.sh"         8 minutes ago       Up 6 minutes        80/tcp, 443/tcp     nauseous_kare

コンテナの名前がnauseous_kareなのでdocker execにコンテナ名を利用してbashを起動します。

コンテナでbashを起動
docker exec -it nauseous_kare bash

bash-4.3# whoami
root

rootのユーザーでログインできました。

docker cp でファイルをコピー

サーバーへのコピーでscpのようなものはdocker cpが実現できるようです。

docker cp ホストのファイル コンテナID:コンテナのコピー先パス

以下はdocker cpの例です。

docker cp ./plugins/pugiemonn pugiemonn_web:/var/www/html/wp-content/plugins

pugiemonnというディレクトリを、コンテナpugiemonn_webにコピーしています。

docker version でバージョンの表示

バージョン表示
docker version
Client:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:20:08 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:20:08 2016
 OS/Arch:      linux/amd64

docker logs でログを表示

dockerのログを表示したい場合は、docker logsを実行します。

ログ表示
docker logs コンテナID

コンテナIDはdocker psなどで表示すれば確認できます。
オプションを指定する場合です。

ログ表示
docker logs オプション コンテナID

オプションは docker logs --help で確認できます。

docker logs -f でログを垂れ流す

ログを流しっぱなしにしたい場合は、-f を使います。

ログ表示
docker logs -f コンテナID

以下のように、-f オプションとコンテナIDを指定するとログを垂れ流しにできます。

ログ表示例
docker logs -f pugiemonncom_web_1

docker info で情報を表示

dockerの詳細情報を表示したい場合は、docker infoを実行します。

バージョン表示
docker info

docker のコンテナ数などまとめて表示するのに便利です。

参考

http://docs.docker.jp/engine/reference/builder.html
http://qiita.com/yosisa/items/a5670e4da3ff22e9411a
http://www.atmarkit.co.jp/ait/articles/1407/08/news031_2.html
http://yamitzky.hatenablog.com/entry/2015/12/24/113007