事前準備#
docker hub アカウント取得
PlayWithDocker にログイン#
ブラウザ上で Docker を動かす環境をタダで使える
https://labs.play-with-docker.com
インスタンスを 1 台起動する
コンソールから linux の操作ができる
[node1] (local) root@192.168.0.58 ~
$ pwd
/root
$ lsコンソールから docker hub にログイン#
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: tenn25
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeededサンプルリポジトリを clone#
たまたま inductor さんのリポジトリにサンプルがあるので clone する。
git clone git@github.com:inductor/dockertest.gitDockerfile があるディレクトリに移動#
$ cd dockertest
$ ls
Dockerfile LICENSE README.mdDockerHub からイメージを取ってくる#
(tenn25 は自分の DockerHub の ID)
(タグ名はなくても大丈夫だけど適当につける)
$ docker build -t tenn25/dockertest:tag1 .
Sending build context to Docker daemon 70.14kB
Step 1/1 : FROM nginx:1.15
1.15: Pulling from library/nginx
6ae821421a7d: Pull complete
da4474e5966c: Pull complete
eb2aec2b9c9f: Pull completepush する(すでに 1 度 push 済みなので already exists ってなってます)
$ docker push tenn25/dockertest:tag1
The push refers to repository [docker.io/tenn25/dockertest]
6b5e2ed60418: Layer already exists
92c15149e23b: Layer already exists
0a07e81f5da3: Layer already existsDockerHub を確認#
自分の DockerHub のリポジトリを確認
タグをつけた場合は dockertest:tag1 があることを確認
タグつけなかったら dockertest:latest かな?
Dockerfile を編集してみる#
例えば Dockerfile に 1 行追加して git をインストールする
FROM nginx:1.15
RUN apt update && apt install -y git改めてビルドする#
別のタグをつけてビルド
git のインストールだけでめっちゃエラーでるけど、
最小構成のスリム(?)イメージだと こうなるっぽい 。
$ docker build -t tenn25/dockertest:tag2 .
〜〜〜中略〜〜〜
Setting up git (1:2.11.0-3+deb9u4) ...
Processing triggers for libc-bin (2.24-11+deb9u3) ...
Processing triggers for ca-certificates (20161130+nmu1+deb9u1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Removing intermediate container fe05a00373e4
---> 83eb7133fc48
Successfully built 83eb7133fc48
Successfully tagged tenn25/dockertest:git再度 push する#
追加の 4 つ目だけ新たに push されたことが分かる。
$ docker push tenn25/dockertest:tag2
The push refers to repository [docker.io/tenn25/dockertest]
995a3e14eeff: Pushed
6b5e2ed60418: Layer already exists
92c15149e23b: Layer already exists
0a07e81f5da3: Layer already exists再度 DockerHub を確認#
tag2 が push されてることを確認
Docker イメージを起動してみよう#
起動するコマンドを指定できる
bush をつければ bash が起動してコンテナ内で操作できる
docker run -it name/dockertest bashQ. コンテナ内でlsとか打てるけど、表示されてるディレクトリの実態はどこ?
A. コンテナの中のファイルシステム。Dockerコンテナの中。Docker のイメージ一覧確認#
docker image ls でもおk
$ docker images
tenn25/dockertest latest f09fe80eb0e7 5 days ago 109MB
tenn25/dockertest tag1 f09fe80eb0e7 5 days ago 109MB
tenn25/dockertest tag2 d3a331ab32c9 24 minutes ago 209MBdocker コンテナ起動#
docker run -it tenn25/dockertest別コンソールでプロセス確認
[node1] (local) root@192.168.0.58 ~
$ ps aux | grep nginx
13995 root 0:00 nginx: master process nginx -g daemon off;
14047 101 0:00 nginx: worker process
14063 root 0:00 grep nginxコメントとか所感とか#
手を動かすのはやっぱり良い
play-with-docker とても良い
- けどコンソールが重くて typo しまくりんぐ
docker build で.(ドット)つけ忘れた人が多そうだった
dcker build した実態は/var/lib/docker
Docker ホストとコンテナ内で uname -a やっても表示されるカーネルバージョンは一緒
Mac は Docker for Mac は内部で linux 動かしてる?ので別のカーネル出てきた(当たり前だけど)
MacBookAir:dockertest tenn25$ uname -a
Darwin MacBookAir.local 17.7.0 Darwin Kernel Version 17.7.0: Fri Nov 2 20:43:16 PDT 2018; root:xnu-4570.71.17~1/RELEASE_X86_64 x86_64
root@e30941e321f3:/# uname -a
Linux e30941e321f3 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 GNU/Linuxcattle vs pet
- コンテナは家畜のように使い捨て。
- オンプレは手塩にかけたペットのようだと・・なるほど w
cutler さん曰く「永続化(保存しときたいやつ、DB みたいなやつ) だけはペット扱いの、使い続ける場所に置いときます」
- あー、DB がますますデリバリーの遅いボトルネックになっていく・・・