Dockerエンジンのインストール
OSXならばこちら → Docker Store
- 無償のcommunity editionと、有償のenterprise edition がある
- Dockerは、linuxカーネルの機能を使うので、macやwindowsで動かす場合は、小さいLinuxVMを内部で動かしているらしい
色々動かしてみる
こちらを参考に色々やってみた
qiita.com
バージョンの確認
$ docker version
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:40:09 2017
OS/Arch: darwin/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:45:38 2017
OS/Arch: linux/amd64
Experimental: true
Dockerは、クライアント・サーバモデルなので、それぞれの情報が表示される
docker run
新しいコンテナを作成して、起動するコマンド
- イメージを元に、コンテナを起動する
- イメージが無い場合、Docker Hub から探してくる
以下は、nginx
というイメージを元に webserver
というコンテナを起動している
$ docker run -d -p 80:80 --name webserver nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bc95e04b23c0: Pull complete
f3186e650f4e: Pull complete
9ac7d6621708: Pull complete
Digest: sha256:b81f317384d7388708a498555c28a7cce778a8f291d90021208b3eba3fe74887
Status: Downloaded newer image for nginx:latest
8d291801fd815f6bb8112842c4c1df2d0efd96162d3a28067258502186d3b061
複数のデータレイヤをダウンロードして、イメージを作成している
コマンドの解説
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d, --detach
: バックグラウンドで実行
-p, --publish
: ホストマシンとコンテナのポートを接続する。左がホスト
--name
: コンテナの名前
詳細はこちらも参考
docs.docker.com
docker container ls
でコンテナの状況を確認
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d291801fd81 nginx "nginx -g 'daemon ..." 22 seconds ago Up 21 seconds 0.0.0.0:80->80/tcp webserver
localhost:80
にアクセスしてみる
nginxのデフォルト画面が出力される
$ curl http://localhost:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
コンテナ内に入る
docker attach
で入れるのは、コンテナがメインのコマンドとしてシェルが起動している場合のみ
適当にぐぐると、 docker attach
すると言われる
しかし、docker attach
で、コンテナの中をシェルで操作できるのは、メインのコマンドでシェルが起動しているコンテナのみ
今回の nginx
イメージは、docker container ls
の COMMAND
を見ると、メインのコマンドは、nginxをデーモンとして動かしている "nginx -g 'daemon ..."
そのため、docker attach
しても、nginxデーモンの標準出力が見えるばかりで、さらにそこから ^D
して脱出しようとすると、コンテナが終了してしまう...
docker exec -it 〜 /bin/bash
でメインのコマンドがシェルでないコンテナにも入れる
docker exec
は、対象のコンテナに任意のコマンドを実行するコマンド
$ docker exec -it webserver /bin/bash
root@7fec1ea5a77b:/# exit
コマンドの解説
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-i, --interactive
: デタッチされるまで標準入力を受け入れるオプション
-t, --tty
: 仮想端末をコンテナに当てるオプション
- ちなみに仮想でない端末とは出力を物理的にアウトプットする「テレタイプ端末」のこと
コンテナに対して、インタラクティブな状態で、 /bin/bash
を実行している
コンテナの停止
$ docker container stop webserver
停止されたことを確認
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker container ls --all
で、停止中のコンテナも確認可能
$ docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d291801fd81 nginx "nginx -g 'daemon ..." About a minute ago Exited (0) 6 seconds ago webserver
コンテナの再開
$ docker container start webserver
コンテナの削除
$ docker container rm webserver
imageの確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 9e7424e5dbae 4 days ago 108MB
imageの削除
$ docker image rm nginx
Untagged: nginx:latest
Untagged: nginx@sha256:b81f317384d7388708a498555c28a7cce778a8f291d90021208b3eba3fe74887
Deleted: sha256:9e7424e5dbaeb9b28fea44d8c75b41ac6104989b49b2464b7cbbed16ceeccfc3
Deleted: sha256:7fcb1f7f8194a8cd7e706d4fc8a0f864cf48bf3937384c4b0a4797af05cc54c6
Deleted: sha256:70a75f17542ef0e6d2686f6ab9f89c22a859c0fe9f9c3abaddb1a893af4f476d
Deleted: sha256:cec7521cdf36a6d4ad8f2e92e41e3ac1b6fa6e05be07fa53cc84a63503bc5700
削除されたことを確認
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
参考
docker exec を使いこなす – ユニコーンリサーチ
qiita.com