Dockerを使ってみました。メモしておきます。
Dockerはコンテナと呼ばれる技術に分類されるそうです。Docker以外にもコンテナ技術を使用した経験がある方は馴染みやすいそうです。
docker-compose に関する内容も徐々に追加しています。
環境構築
環境は Mac です。Mac への Docker 環境のインストールはDocker Desktopがスタンダードとなりました。
左にあるクジラのアイコンをタップすると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が出ていない場合は起動で失敗しているかもしれません。
Dockerの流れ
dockerでよくある簡単な流れを書きます。
Dockerのリポジトリなどからimageを持ってくる。あるいはDockerfileを作成してimageを作る。
↓
Dockerのimageからコンテナを生成する。
docker build でイメージを作成
ローカルに置いていあるDockerfileからイメージを作成する場合です。
docker build -t 任意のイメージ名 .
この後に、docker imagesでイメージが作成されているか確認できます。
docker-compose build でサービス名を指定
特定のサービスだけ build したい場合サービス名指定が使えます。
docker-compose build サービス名
bot という名前のサービスをビルドしたいケースです。
docker-compose build bot
キャッシュさせないときには --no-cache をつけます。
docker-compose build --no-cache bot
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イメージからコンテナを作成した場合です。
docker run hello-world
この後に、作成されたコンテナを確認するには docker ps -a です。
docker run のオプション
docker run のよく見るオプションを追加していきます。
| オプション | 概要 |
|---|---|
| -d | バックグラウンドでコンテナ生成 |
| -v | 共有システムファイル -v ホスト側ディレクトリ:コンテナ側ディレクトリのようにカンマ区切りで指定 |
| --name | コンテナ名 |
| --link | 他のコンテナのリンクを追加 コンテナ名 か id:エイリアス もしくは コンテナ名 か id
|
--name オプションの使用例です。
docker run --name node_container node
node イメージから node_container という名前のコンテナ名でコンテナを作成しました。
docker run でコマンドの実行
docker run でコマンドの実行を行うころができます。
docker run --help からヘルプを表示すると多くのオプションがあります。
docker-compose run でコマンドの実行
サービス名を指定してコマンドを実行する例です。
docker-compose run phpfpm composer update
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の例です。
docker stop 1768a24cbce3
この後に、docker psを実行すると停止したコンテナが表示されなくなっています。
#docker rm でコンテナの削除
コンテナを削除したい場合は、docker rmを使用します。
docker rm コンテナ名
docker rm ab29e88d861f
docker-compose で紐付くコンテナを削除
docker-compose rm
紐づいたコンテナが一気に削除されます。
stop していないコンテナは削除できません。
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を起動します。
docker exec -it nauseous_kare bash
bash-4.3# whoami
root
rootのユーザーでログインできました。
docker-compose に exec でログイン
docker-compose exec も便利です。
docker-compose exec phpfpm /bin/sh
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