SlideShare a Scribd company logo
1 of 41
コンテナの基本
~Docker実践~
2018年8月5日
内山 良介
step63r
環境構築が面倒くさい
マシンリソースが少ない
コイツで解決していきましょう
コンテナとは?
←くじら
←???
コンテナ
Container
容器
컨테이너
コンテナには環境を詰め込める
• アプリケーション
• Webサーバ
• メールサーバ
• ストレージ
コンテナはそのまま配布できる
コンテナは軽量
ハードウェア ハードウェアハードウェア
カーネル / ドライバ カーネル / ドライバ カーネル / ドライバ
ホストOS ホストOS ホストOS
各種サービス / ランタイム
アプリケーション
ゲストOS
カーネル
ゲストOS
カーネル
各種サービス 各種サービス
ランタイム ランタイム
アプリケーション アプリケーション
サービス用
コンテナ
管理用
コンテナ
アプリケーション
+
ランタイム
アプリケーション
+
ランタイム
物理基盤 ハイパーバイザー型 コンテナ型
かいつまんで言えば……
ソフトウェア開発の本質により工数を割ける
ソフトウェアの価格競争力を高められる
Demo
とりあえず “Hello, World”
# docker run hello-world
何が起こった!?
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/
Demo
基本のコマンドを使いこなす
Dockerのリソースモデル
Docker
Repository
イメージ コンテナ コンテナ
イメージ
プロセス
pull
run
stop
start
commit
push
rm
docker pull
Docker
Repository
イメージ コンテナ コンテナ
イメージ
プロセス
pull
run
stop
start
commit
push
rm
# docker pull centos:latest
docker run
Docker
Repository
イメージ コンテナ コンテナ
イメージ
プロセス
pull
run
stop
start
commit
push
rm
# docker run --name test01 -it centos:latest /bin/bash
docker start / stop
Docker
Repository
イメージ コンテナ コンテナ
イメージ
プロセス
pull
run
stop
start
commit
push
rm
# docker start[stop] test01
docker commit
Docker
Repository
イメージ コンテナ コンテナ
イメージ
プロセス
pull
run
stop
start
commit
push
rm
# docker commit test01 docker.io/step63r/osaka-ai-03-demo-02
docker push
Docker
Repository
イメージ コンテナ コンテナ
イメージ
プロセス
pull
run
stop
start
commit
push
rm
# docker push docker.io/step63r/osaka-ai-03-demo-02
docker rm
Docker
Repository
イメージ コンテナ コンテナ
イメージ
プロセス
pull
run
stop
start
commit
push
rm
# docker rm -f test01
Demo
Dockerfile
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
Dockerfileを使うべき理由
構築の手間を 省力化 できる
人的ミスの リスク が 低減 される
Dockerfileそれ自体が 手順書 になる
Demo
docker-compose
例えばこんなWebサーバを立ててみる
記事保存
記事読出
普通にやったらこうなる
# 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 コマンドがいちいち長い!!
じゃあ docker-compose でやってみよう
docker-compose.yml
wordpress:
image: wordpress:latest
links:
- db:mysql
ports:
- "1888:80"
db:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: password123
で、
# docker-compose up -d
まとめ
3W:コンテナの最大のメリット
いつ
どこで
だれが
環境構築をしても、ミスなく、同じものができあがること
When
Where
Who
Dockerの理念
Build, Ship, and Run Any App, Anywhere
一度ビルドしたコンテナはどんな環境でも、どんなアプリケーションでも動く
Appendix
参考文献
Docker 実践ガイド
インプレス
2015年12月
古賀 正純
impress top gearシリーズ
参考文献
• Dockerでよく使うコマンドまとめ | 酒と涙とRubyとRailsと
• はじめてのDocker
• Docker Registry Hub にイメージをpushしたい
• CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する
• Dockerでwordpressの環境構築
Thank you!!

More Related Content

What's hot

小さく始める Docker container の deploy
小さく始める Docker container の deploy小さく始める Docker container の deploy
小さく始める Docker container の deployYoshinori Teraoka
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker74th
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化Yuki Kanazawa
 
クラウドネットワークの仮想化そしてVxLAN Offloadによる高速化
クラウドネットワークの仮想化そしてVxLAN Offloadによる高速化クラウドネットワークの仮想化そしてVxLAN Offloadによる高速化
クラウドネットワークの仮想化そしてVxLAN Offloadによる高速化Midokura
 
Alpine linuxを触ってみよう
Alpine linuxを触ってみようAlpine linuxを触ってみよう
Alpine linuxを触ってみようRyo Adachi
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud FoundryKazuto Kusama
 
Cloudstack Day 2014 ここまできた、VSC for ACSが 実現する先進的なプライベートクラウド
Cloudstack Day 2014 ここまできた、VSC for ACSが実現する先進的なプライベートクラウドCloudstack Day 2014 ここまできた、VSC for ACSが実現する先進的なプライベートクラウド
Cloudstack Day 2014 ここまできた、VSC for ACSが 実現する先進的なプライベートクラウドMasaomi Kudo
 
Containerで変わるDevOps
Containerで変わるDevOpsContainerで変わるDevOps
Containerで変わるDevOpsshokiri
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginxngi group.
 
Introduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing DockerfilesIntroduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing DockerfilesYukiya Hayashi
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2Masahide Yamamoto
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみようRyo Adachi
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例Koichi Shimozono
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)Akihiro Suda
 
Docker で xxxxxxサーバ を つくれませんでした
Docker で xxxxxxサーバ を つくれませんでしたDocker で xxxxxxサーバ を つくれませんでした
Docker で xxxxxxサーバ を つくれませんでしたkrs_mizuno
 
Drone.io のご紹介
Drone.io のご紹介Drone.io のご紹介
Drone.io のご紹介Uchio Kondo
 
AWSをコードで定義する
AWSをコードで定義するAWSをコードで定義する
AWSをコードで定義するSugawara Genki
 

What's hot (20)

小さく始める Docker container の deploy
小さく始める Docker container の deploy小さく始める Docker container の deploy
小さく始める Docker container の deploy
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化
 
クラウドネットワークの仮想化そしてVxLAN Offloadによる高速化
クラウドネットワークの仮想化そしてVxLAN Offloadによる高速化クラウドネットワークの仮想化そしてVxLAN Offloadによる高速化
クラウドネットワークの仮想化そしてVxLAN Offloadによる高速化
 
Alpine linuxを触ってみよう
Alpine linuxを触ってみようAlpine linuxを触ってみよう
Alpine linuxを触ってみよう
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundry
 
Cloudstack Day 2014 ここまできた、VSC for ACSが 実現する先進的なプライベートクラウド
Cloudstack Day 2014 ここまできた、VSC for ACSが実現する先進的なプライベートクラウドCloudstack Day 2014 ここまできた、VSC for ACSが実現する先進的なプライベートクラウド
Cloudstack Day 2014 ここまできた、VSC for ACSが 実現する先進的なプライベートクラウド
 
Containerで変わるDevOps
Containerで変わるDevOpsContainerで変わるDevOps
Containerで変わるDevOps
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginx
 
Introduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing DockerfilesIntroduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing Dockerfiles
 
20170124 linux basic_1
20170124 linux basic_120170124 linux basic_1
20170124 linux basic_1
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
 
Docker で xxxxxxサーバ を つくれませんでした
Docker で xxxxxxサーバ を つくれませんでしたDocker で xxxxxxサーバ を つくれませんでした
Docker で xxxxxxサーバ を つくれませんでした
 
Drone.io のご紹介
Drone.io のご紹介Drone.io のご紹介
Drone.io のご紹介
 
AWSをコードで定義する
AWSをコードで定義するAWSをコードで定義する
AWSをコードで定義する
 
Twemproxy (nutcracker)
Twemproxy (nutcracker)Twemproxy (nutcracker)
Twemproxy (nutcracker)
 

Similar to コンテナの基本 ~Docker実践~

Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-Saki Homma
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイoshiro_seiya
 
KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)Akihiro Suda
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Naoki Nagazumi
 
今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門Toru Miyahara
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSnpsg
 
20170329 container technight-第一回勉強会
20170329 container technight-第一回勉強会20170329 container technight-第一回勉強会
20170329 container technight-第一回勉強会Minehiko Nohara
 
20170329 container technight-第一回勉強会
20170329 container technight-第一回勉強会20170329 container technight-第一回勉強会
20170329 container technight-第一回勉強会Minehiko Nohara
 

Similar to コンテナの基本 ~Docker実践~ (20)

Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 
KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
20170329 container technight-第一回勉強会
20170329 container technight-第一回勉強会20170329 container technight-第一回勉強会
20170329 container technight-第一回勉強会
 
20170329 container technight-第一回勉強会
20170329 container technight-第一回勉強会20170329 container technight-第一回勉強会
20170329 container technight-第一回勉強会
 

コンテナの基本 ~Docker実践~

Editor's Notes

  1. 開発環境を作ろうと思ったけど何か上手くいかなかったり……
  2. 色々な仮想マシンを立てたらリソース不足に陥った…… こんな経験はありませんか?
  3. 今回ご紹介するDockerはそんな問題を解決してくれるスグレモノです。
  4. Dockerの説明をする前にまず現代ITにおける「コンテナ」の意味について見ていきましょう。
  5. これは先ほどお見せしたDockerのロゴマークです。 下の動物は当然くじらです。ではその上に乗っているものは何でしょうか?
  6. これこそが「コンテナ」なのです。 コンテナ、と聞くと普通、どのようなものを思い浮かべるでしょうか?
  7. 例えば荷物を詰め込む……
  8. あるいは詰め込んだ荷物を積んで運ぶことができる、これを「コンテナ」を呼ぶのではないでしょうか。
  9. Dockerなどにおける「コンテナ」も大枠は一緒で、OS~ミドルウェア~アプリケーションまでをひとかたまりにして固めたパッケージをコンテナと呼んでいます。
  10. そして実際のコンテナと同様、Dockerにおけるコンテナもあらゆる環境にそのまま配布することができます。
  11. ここまで説明すると「仮想マシンと何が違うんだ」となるかもしれません。ハイパーバイザー型の仮想マシンは通常のOSと同様の運用が必要になります。例えばハイパーバイザー型マシンが起動するには仮想ディスク上のMBRにブートローダが存在している必要がありますし、シャットダウンも適当にやるとディスクが損傷する危険があります。 一方コンテナ環境ではゲストOSに相当する空間においてそもそも「MBRに応じたカーネルを起動する」とか「ランレベルに応じた起動スクリプトを使ってブート」といった「OSのブート手順」が存在しません。そのため、ハイパーバイザー型に比べホストに対するオーバーヘッドはコンテナの方が格段に少ないといえます。
  12. これからご紹介しますが、Dockerを使う最大の利点は「環境構築が劇的に簡素化される」ということにあります。環境構築に時間を割かなくていい、ということはすなわちそれ以外のこと(=開発そのもの)により集中できるということであり、簡単に言えばDockerを使わず作られたソフトウェアに比べDockerを使って作られたソフトウェアの方がそれだけ品質が向上するということになります。現在のIT業界において「いかに開発者が開発に集中できるか」の追求は非常に重要なテーマとなっています。
  13. というわけで例によってデモから始めましょう。
  14. DockerHubというサイトから主なコンテナを引っ張ってくることができるようになっています。例えばPythonの開発環境だったり、Gitリポジトリだったり。Hello, Worldに使うコンテナもここからダウンロードします。
  15. では実際に手を動かします。DockerにおけるHello, Worldはこのコマンド1行だけで完成します。 →デモ
  16. 内部で何が起こったのでしょうか。このサーバには既にDockerがインストールされており、dockerコマンドが有効になっています。 この状態でさっきのコマンドを打つとDockerHubから「Hello, World」という文字を出力するしか能がないLinux OSがダウンロードされてきます。 そして、runにより自動実行され、所定の文字を表示して、コンテナが破棄されます。
  17. さすがに今のだけではよく分からないと思うので、Dockerでよく使うコマンドを紹介しながら覚えていきましょう。
  18. これはDockerコンテナを動かす流れです。この図は非常に重要なので必ず覚えておいてください。 プロセスを動かすコンテナはイメージから立ち上げます。イメージはDockerHubから持ってきたり、自分でビルドすることで作成します。
  19. デモ
  20. デモ
  21. デモ
  22. デモ
  23. デモ
  24. デモ
  25. 「イメージは自分でビルドできる」とお話ししました。それには「Dockerfile」というファイルを作成します。
  26. 例えばApacheというサーバアプリケーションを使ってHello, Worldみたいなことをやってみます。色々書いてますが見るべきはcat Dockerfileの下です。 →デモ
  27. Dockerコンテナは基盤のOSだけpullしてあとはその環境にアタッチしてチクチク環境構築、ということもできなくはないですが、できるならDockerfileを使うべきです。理由はここに挙げた3つ。 自動化できるならとにかく自動化した方がいいに決まっているのです。
  28. Dockerfileで更に込み入った環境を作ってみることを考えます。
  29. 例えば代表的なCMSであるWordPressを使ってブログサーバでも立ててみます。 WordPressはPHPサーバとMySQL互換DBサーバの二つで成り立ちます。
  30. 何も知らない人が作ったらWordPressのコンテナとMySQLのコンテナをpullして環境変数やネットワーク、コンテナ間通信の許可などオプションを色々つけてrunすることでしょう。 確かにこれでも問題なく動作はしますが、例えばサービスを再起動するときなどは毎回ここの二つの長いrunコマンドを打たなくてはなりません。 何度も言いますがDockerの最大の目的は自動化です。人の手が加われば加わるほど、環境構築というのはミスが出るものです。
  31. お待たせしましたサブタイ回収。docker-composeでこの環境を作りましょう。
  32. docker-composeはDockerとは別に提供されているサポートツール的なもので、Dockerfileの代わりにdocker-compose.ymlというYMLファイルでコンテナを定義します。
  33. 立ち上げのコマンドは超簡単。 →デモ
  34. Dockerの利点です。再三言っていますが、これだけでも覚えて帰ってください。
  35. Docker社の理念です。コンテナに適する環境、適さない環境とあるかもしれませんが、今後拡大していくであろうサービス型ビジネスの拡大をより高速なものにしていくためにはコンテナは今や欠かせない技術となっています。 若手エンジニアの我々としては、是非押さえておきたいスキルセットの一つといえるのではないでしょうか。