マンガっぽくDockerを布教してみる
Dockerとの出会い
という訳で、dockerについて教えるよ
はいっ♪さすが、ふわ先輩!頼りになる〜
この記事の目的
dockerを触ったことないけど、気になっている人向け。
この記事をさらっと読んで、ざっくり雰囲気が伝われば良いと思っている。
Dockerについてざっくり
Linuxのコンテナ型仮想化技術を使ったソフトウェア。
Dockerをインストールした環境上で、アプリやファイルをまるっとパッケージしたものを
コンテナとして動かせる。
うーん?コンテナにすると何が嬉しいんですか?
コンテナは1つのOS上で他プロセスと分離された領域で動くから、別のアプリにも影響が無いの
じゃあインストール失敗してもやり直し放題!?助かる〜♪
VMと違ってOS(kernel)は共有だから、起動も早い
おおっ♪(かーねる?)
更にDockerが動いてる環境ならコンテナごと持ってきてそのまま動かせる!
早い(起動が)安い(構築コストが)うまい(効率がいい)ですね!
あ、うん…?
Dockerをインストール
Docker公式とか、他のブログとか参考にしてください!
(あ、丸投げした…)
日本語版ドキュメント: Docker のインストール — Docker-docs-ja 17.06.Beta ドキュメント
Dockerの使い方
コンテナを使う方法は大きく2つあるよ
①dockerコマンドでコンテナを起動
以下コマンドを実行すると、コンテナが起動してイメージに定義されたコマンドが実行される。
docker run -it <イメージ名>:<タグ名>
ふ〜ん、わかんないけど、docker runでイイってこと?
オプションは他にも色々あるけどね。ここで書いた<イメージ名>に対応するDockerイメージを元にコンテナが作られるよ
また、引数としてコマンドを指定すると、そのコマンドが優先的に実行される。
そして、コマンドの処理が終わるとコンテナは停止する。
# centOS7のイメージ上でbashが起動する。exitでコンソールを抜けるとコンテナは停止する。 # -itのオプションはコンテナ内のコンソールを操作するコマンドを実行する時に付ける。 docker run -it centos:7 /bin/bash # centOS7のイメージ上でechoが起動する。echoが処理が終わるとコンテナは停止する。 docker run centos:7 /bin/echo test > test
イメージ…コンテナとは違うの??
イメージは、変更することができないよう固められた、コンテナの元となるもの。
ローカルに無ければDockerHub(Docker社のホスティングサービス)からダウンロードされる。
そのイメージに変更可能な領域を加えたものがコンテナとして動く。
DockerHubにはOSSの公式イメージとか、個人が作成したものが登録されてるよ
なるほど!じゃあわたしが使いたいOSSのイメージがあれば、 インストールの手間が無くなるってコトね!
あれ…でもインストール後の設定とか、自作アプリとかは 結局コンテナ起動後に作業しないとダメ…?
そういう細かいことしたい時には、もう1つの方法、Dockerfile を使う手があるよ
②Dockerfileでイメージを作ってからコンテナを起動
Dockerfileにベースとなるイメージと、各種操作を定義することで オリジナルのDockerイメージを作成できる。
FROM python:3.7.4 ARG project_directory WORKDIR ${project_directory} COPY ./run.py RUN pip install flask sqlalchemy CMD ["python", "run.py"]
こんな感じで設計書を作ってdocker buildコマンドを実行したらイメージが作られるよ
# 最後の引数はdockerfileの置き場所を指定 docker build -t <タグ名> .
なんか色々書いてある…
まぁこれもまた色々文法があるんだけど…まずはこの3つを覚えたら大丈夫かな。
- FROM ベースとなるイメージ名を指定
- RUN イメージビルド時に実行するコマンドを指定
- CMD コンテナ起動時のコマンドを指定
ムズカシイけど、一回作っちゃえば手順書いらないっていうか、使い回しカンタンじゃん!!
そういうこと!楽したいよね!慣れてきたら続きは公式で!!
(徹底している…)
日本語版ドキュメント: Dockerfile リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
portとvolume
なんとなくフンイキはわかった!さっそくコンテナ動かそ!
docker run -it centos:7 /bin/bash
ちなみにこのままだと外からコンテナ内のアプリとかファイルには アクセスできない
ええっー!?それじゃ意味ないんですけど!?
コンテナへのアクセスはポートフォワードでの橋渡しを定義する必要がある。
また、コンテナ内のディレクトリとホスト側のディレクトリを
共有することができる。
結果的にこういうコマンドで起動することになるよ
docker run -it -p 80:80 -v `pwd`:/work centos:7 /bin/bash
な、なんか長い…!これじゃあDockerfileだけじゃなくて コマンドもメモしておかないと、使い回せないね…
そんなギャルちゃんにオススメのツールがこちら!
?!
docker-composeがとても便利
起動するコンテナ毎にportやvolume、利用イメージを定義する。
version: "3.0" services: web: image: centos:7 ports: - "80:80" volumes: - "`pwd`:/work" command: "/bin/bash" # 以下、複数定義可
あとはこのコマンドを打つだけでコンテナが一気に起動するよ
docker-compose up
コマンドもスッキリだぁ!これならdockerfileとymlファイルさえあれば 必要な環境まるっと使い回せますね!
(スッ)
日本語版ドキュメント: Compose ファイル・リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
わー
抱負
Kubernetesを勉強しながら記事にしたい!