Tenn25 Blog
インフラ勉強会-初めてのDockerメモ
11.02.20197 Min Read — In others

事前準備

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.git

Dockerfile があるディレクトリに移動

$ cd dockertest
$ ls
Dockerfile	LICENSE		README.md

DockerHub からイメージを取ってくる

(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 を確認

自分の 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 bash
Q. コンテナ内で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      209MB

docker コンテナ起動

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/Linux
  • cattle vs pet

    • コンテナは家畜のように使い捨て。
    • オンプレは手塩にかけたペットのようだと・・なるほど w
  • cutler さん曰く「永続化(保存しときたいやつ、DB みたいなやつ) だけはペット扱いの、使い続ける場所に置いときます」

    • あー、DB がますますデリバリーの遅いボトルネックになっていく・・・