docker hub アカウント取得
ブラウザ上で Docker を動かす環境をタダで使える
https://labs.play-with-docker.com
インスタンスを 1 台起動する
コンソールから linux の操作ができる
[node1] (local) root@192.168.0.58 ~
$ pwd
/root
$ ls
$ 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
たまたま inductor さんのリポジトリにサンプルがあるので clone する。
git clone git@github.com:inductor/dockertest.git
$ cd dockertest
$ ls
Dockerfile LICENSE README.md
(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 complete
push する(すでに 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 exists
自分の DockerHub のリポジトリを確認
タグをつけた場合は dockertest:tag1 があることを確認
タグつけなかったら dockertest:latest かな?
例えば 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
追加の 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
tag2 が push されてることを確認
起動するコマンドを指定できる
bush をつければ bash が起動してコンテナ内で操作できる
docker run -it name/dockertest bash
Q. コンテナ内でlsとか打てるけど、表示されてるディレクトリの実態はどこ?
A. コンテナの中のファイルシステム。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 209MB
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 とても良い
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/Linux
cattle vs pet
cutler さん曰く「永続化(保存しときたいやつ、DB みたいなやつ) だけはペット扱いの、使い続ける場所に置いときます」