More Related Content Similar to コンテナの基本 ~Docker実践~ Similar to コンテナの基本 ~Docker実践~ (20) コンテナの基本 ~Docker実践~12. コンテナは軽量
ハードウェア ハードウェアハードウェア
カーネル / ドライバ カーネル / ドライバ カーネル / ドライバ
ホストOS ホストOS ホストOS
各種サービス / ランタイム
アプリケーション
ゲストOS
カーネル
ゲストOS
カーネル
各種サービス 各種サービス
ランタイム ランタイム
アプリケーション アプリケーション
サービス用
コンテナ
管理用
コンテナ
アプリケーション
+
ランタイム
アプリケーション
+
ランタイム
物理基盤 ハイパーバイザー型 コンテナ型
17. 何が起こった!?
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
22. docker start / stop
Docker
Repository
イメージ コンテナ コンテナ
イメージ
プロセス
pull
run
stop
start
commit
push
rm
# docker start[stop] test01
27. DockerfileでWebサーバを立てる
# mkdir osaka-ai-03-demo-03
# cd osaka-ai-03-demo-03
# ls –al
合計 4
-rw-r--r--. 1 root root 232 8月 1 22:56 Dockerfile
# cat Dockerfile
FROM centos:latest
MAINTAINER minato
ENV container docker
RUN yum update -y && yum clean all
RUN yum install -y httpd && yum clean all
RUN echo "Hello Apache." > /var/www/html/index.html
RUN systemctl enable httpd
EXPOSE 80
# docker build -f ./Dockerfile -t docker.io/step63r/osaka-ai-03-demo-03 --no-cache=true .
# docker run -d --privileged --name web0001 -it -p 13080:80 docker.io/step63r/osaka-ai-03-demo-03 /sbin/init
31. 普通にやったらこうなる
# docker pull wordpress
# git clone git@github.com:docker-library/wordpress.git
# docker pull mysql
# git clone git@github.com:docker-library/mysql.git
# docker build –t hoge:mysql56 ./
# docker run –name hoge_mysql56 –e MYSQL_ROOT_PASSWORD=hogehoge –d hoge:mysql56
# docker build –t hoge:wordpress ./
# docker run –name hoge_wordpress –d –p 8080:80 --link hoge_mysql56:mysql hoge:wordpress
docker run コマンドがいちいち長い!!
40. 参考文献
• Dockerでよく使うコマンドまとめ | 酒と涙とRubyとRailsと
• はじめてのDocker
• Docker Registry Hub にイメージをpushしたい
• CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する
• Dockerでwordpressの環境構築
Editor's Notes 開発環境を作ろうと思ったけど何か上手くいかなかったり…… 色々な仮想マシンを立てたらリソース不足に陥った……
こんな経験はありませんか? 今回ご紹介するDockerはそんな問題を解決してくれるスグレモノです。 Dockerの説明をする前にまず現代ITにおける「コンテナ」の意味について見ていきましょう。 これは先ほどお見せしたDockerのロゴマークです。
下の動物は当然くじらです。ではその上に乗っているものは何でしょうか?
これこそが「コンテナ」なのです。
コンテナ、と聞くと普通、どのようなものを思い浮かべるでしょうか? 例えば荷物を詰め込む…… あるいは詰め込んだ荷物を積んで運ぶことができる、これを「コンテナ」を呼ぶのではないでしょうか。 Dockerなどにおける「コンテナ」も大枠は一緒で、OS~ミドルウェア~アプリケーションまでをひとかたまりにして固めたパッケージをコンテナと呼んでいます。 そして実際のコンテナと同様、Dockerにおけるコンテナもあらゆる環境にそのまま配布することができます。 ここまで説明すると「仮想マシンと何が違うんだ」となるかもしれません。ハイパーバイザー型の仮想マシンは通常のOSと同様の運用が必要になります。例えばハイパーバイザー型マシンが起動するには仮想ディスク上のMBRにブートローダが存在している必要がありますし、シャットダウンも適当にやるとディスクが損傷する危険があります。
一方コンテナ環境ではゲストOSに相当する空間においてそもそも「MBRに応じたカーネルを起動する」とか「ランレベルに応じた起動スクリプトを使ってブート」といった「OSのブート手順」が存在しません。そのため、ハイパーバイザー型に比べホストに対するオーバーヘッドはコンテナの方が格段に少ないといえます。 これからご紹介しますが、Dockerを使う最大の利点は「環境構築が劇的に簡素化される」ということにあります。環境構築に時間を割かなくていい、ということはすなわちそれ以外のこと(=開発そのもの)により集中できるということであり、簡単に言えばDockerを使わず作られたソフトウェアに比べDockerを使って作られたソフトウェアの方がそれだけ品質が向上するということになります。現在のIT業界において「いかに開発者が開発に集中できるか」の追求は非常に重要なテーマとなっています。 というわけで例によってデモから始めましょう。 DockerHubというサイトから主なコンテナを引っ張ってくることができるようになっています。例えばPythonの開発環境だったり、Gitリポジトリだったり。Hello, Worldに使うコンテナもここからダウンロードします。 では実際に手を動かします。DockerにおけるHello, Worldはこのコマンド1行だけで完成します。
→デモ 内部で何が起こったのでしょうか。このサーバには既にDockerがインストールされており、dockerコマンドが有効になっています。
この状態でさっきのコマンドを打つとDockerHubから「Hello, World」という文字を出力するしか能がないLinux OSがダウンロードされてきます。
そして、runにより自動実行され、所定の文字を表示して、コンテナが破棄されます。 さすがに今のだけではよく分からないと思うので、Dockerでよく使うコマンドを紹介しながら覚えていきましょう。 これはDockerコンテナを動かす流れです。この図は非常に重要なので必ず覚えておいてください。
プロセスを動かすコンテナはイメージから立ち上げます。イメージはDockerHubから持ってきたり、自分でビルドすることで作成します。 デモ デモ デモ デモ デモ デモ 「イメージは自分でビルドできる」とお話ししました。それには「Dockerfile」というファイルを作成します。 例えばApacheというサーバアプリケーションを使ってHello, Worldみたいなことをやってみます。色々書いてますが見るべきはcat Dockerfileの下です。
→デモ Dockerコンテナは基盤のOSだけpullしてあとはその環境にアタッチしてチクチク環境構築、ということもできなくはないですが、できるならDockerfileを使うべきです。理由はここに挙げた3つ。
自動化できるならとにかく自動化した方がいいに決まっているのです。 Dockerfileで更に込み入った環境を作ってみることを考えます。 例えば代表的なCMSであるWordPressを使ってブログサーバでも立ててみます。
WordPressはPHPサーバとMySQL互換DBサーバの二つで成り立ちます。 何も知らない人が作ったらWordPressのコンテナとMySQLのコンテナをpullして環境変数やネットワーク、コンテナ間通信の許可などオプションを色々つけてrunすることでしょう。
確かにこれでも問題なく動作はしますが、例えばサービスを再起動するときなどは毎回ここの二つの長いrunコマンドを打たなくてはなりません。
何度も言いますがDockerの最大の目的は自動化です。人の手が加われば加わるほど、環境構築というのはミスが出るものです。 お待たせしましたサブタイ回収。docker-composeでこの環境を作りましょう。 docker-composeはDockerとは別に提供されているサポートツール的なもので、Dockerfileの代わりにdocker-compose.ymlというYMLファイルでコンテナを定義します。 立ち上げのコマンドは超簡単。
→デモ Dockerの利点です。再三言っていますが、これだけでも覚えて帰ってください。 Docker社の理念です。コンテナに適する環境、適さない環境とあるかもしれませんが、今後拡大していくであろうサービス型ビジネスの拡大をより高速なものにしていくためにはコンテナは今や欠かせない技術となっています。
若手エンジニアの我々としては、是非押さえておきたいスキルセットの一つといえるのではないでしょうか。