SlideShare a Scribd company logo
1 of 28
Download to read offline
Docker HandsOn
@konpyu
Agenda
• dockerとは何でしょう & インストール

• コンテナを立ち上げる

• コンテナをDockerfileでbuildする

• 複数のコンテナをリンクさせる

• docker-composeで管理する
What’s Docker?
• コンテナ型仮想化技術の一つです

• ホストOSの中にゲストOSを起動するのではなく、ホストOSのリ
ソースにnamespeceを切って分離した空間内でゲストを起動します
(メモリ、プロセス、ディスクなどにnamespeceを設ける技術は昔か
らあります。Dockerはそれらを統合したものです)

• パフォーマンスの劣化が殆ど無く、ゲストの起動が数秒で可能

• GoogleやRed Hat、AWS、Microsoftなどの大手ベンダーが採用
Docker Registory
• ビルドしたイメージをホストする場所

• Docker社公式のDockerHubにはCentOSやUbuntuといったベースと
なるイメージや、MySQLやnginxといったミドルウェア、Rubyやjsな
どの実行環境コミのイメージがなどが用意されている

• 本番用のコンテナをホストするには、当然Privateなレポジトリが必
要。SaaSとして提供しているサービスもある(ex: Quay.io)し、自 に
立てるタイプ(ex: Docker Registry)もある
• CentOS7(ami-89634988)

• EC2 with PublicIP

• Security Group allowing 22 80 8080 8081

• fyi: CoreOS コンテナのホスティングに特化した軽
量OS. ( http://deeeet.com/writing/
2014/11/17/coreos/ )
Host
Install & boot
# yum -y install docker

# docker -v

Docker version 1.6.2, build ba1f6c3/1.6.2

# systemctl start docker
download image
# docker pull ubuntu:latest

# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

docker.io/ubuntu latest d2a0ecffe6fa 36 hours ago 188.3 MB
docker.ioからDownloadされる
docker run
# docker run -it d2a0ecffe6fa /bin/bash

=> イメージから起動

=> -i : 標準出力 -t : 仮想端末

=> フォアグラウンドで起動
Docker Image
Docker
Container
docker run
Docker
Container
docker run
Exit from container
[root@f321de9c1e76 /]# exit

=> コンテナからログアウトする

# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f321de9c1e76 7322fbe74aa5:latest "/bin/bash" About a minute ago Exited (0) 1 seconds ago romantic_lalande

=> ログアウトしてもコンテナのプロセスは生きてる

# docker rm f321de9c1e76

=> docker rmで完全に削除する
Install nginx
# docker pull nginx

# docker run --name mynginx -d -p 8080:80 nginx

=> -d : バックグラウンドで起動(デーモン)

=> -name : コンテナに名前をつける

=> -p : ホストのポートアクセスをコンテナにフォワード
ホストへの8080番へのアクセスが
コンテナの80番にフォワードされる
Dockerfile
- dockerイメージの自動作成

- シンプルなテキストファイル

- docker build command do this
Docker Image
Dockerfile
+
docker build
New
Docker Image
sample redis container
# mkdir -p ~/redis && cd ~/redis

# vi Dockerfile

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y redis-server
EXPOSE 6379
ENTRYPOINT ["/usr/bin/redis-server"]
# docker build -t konpyu/redis .

# docker run -d [image_id]
 redisが起動するイ
メージが完成
FROM ubuntu:14.04
#=> コンテナのベースとなるイメージを指定する。必ず1行目に書く。
RUN apt-get update && apt-get install -y redis-server
#=> コンテナでコマンドを実行
EXPOSE 6379
#=> そのコンテナが開放するポート。主にデーモンとして動かすとき利用。
ENTRYPOINT [“/usr/bin/redis-server"]
#=> 起動時に自動的に実行するコマンド。主にデーモンとして動かすときに指定
ENTRYPOINTはコンテナ
内でPID 1として実行される
# docker build -t konpyu/redis .
Talk with other container
Redis
Container
Client
Container
Host
docker0
TCP: 6379
PrivateIP: 172.17.XX.XX
Docker用のネットワーク
ブリッジが自動作成される
Linking container
#docker run --link [container_id]:db -it ubuntu:14.04 /bin/bash
- 先ほど作ったRedisコンテナに接続するためのコン
テナを別に立ててみましょう

- linkオプションで、通信をしたいイメージを指定する

- エイリアスを指定する
Connect from Client
Container
#root@container_id:/ # env | grep DB_

DB_NAME=/tender_curie/db

DB_PORT_6379_TCP_PORT=6379

DB_PORT=tcp://172.17.0.7:6379

DB_PORT_6379_TCP=tcp://172.17.0.7:6379

DB_PORT_6379_TCP_ADDR=172.17.0.7

DB_PORT_6379_TCP_PROTO=tcp
エイリアス名を元に環境変
数が自動作成される
#root@container_id:/# apt-get update

#root@container_id:/# apt-get install redis-server

#root@container_id:/# redis-cli -h $DB_PORT_6379_TCP_ADDR

$ redis 172.17.0.33:6379>

$ redis 172.17.0.33:6379>set hoge ikemen
Connect from Client
Container
Redisにつないでみましょう
docker-compose
- linkは複数あると管理や実行が面倒

- 何回もdocker runを打つのはたるい

- docker-composeはコンテナの起動を宣言的に書ける公式ライ
ブラリ

https://github.com/docker/compose
install docker-compose
@host 

#curl -L https://github.com/docker/compose/releases/
download/1.3.1/docker-compose-`uname -s`-`uname -m` > /usr/
local/bin/docker-compose

#chmod +x /usr/local/bin/docker-compose
docker-compose
- linkは正直複数あると面倒

- 何回もdocker runを打つのは面倒

- docker-composeはコンテナの起動を宣言的に書ける公式ライ
ブラリ

- docker-compose upだけで複数のコンテナを起動できる
sample: wordpress
- docker-composeでwordpressの環境を作ってみましょう
sample: wordpress
- mkdir ~/wp && cd ~/wp

# cat docker-compose.yml

web:

image: wordpress

links:

- db:mysql

environment:

- WORDPRESS_DB_PASSWORD=ageman

ports:

- 8081:80

db:

image: mysql:5.7

environment:

- MYSQL_ROOT_PASSWORD=ageman

- MYSQL_DATABASE=wordpress
設定しないといけない環境
変数はdockerhubのrepoに記述
されています
sample: wordpress
# docker-compose build => びるどする

# docker-compose up

=> http://xx.xx.xx.xx:8081
docker-compose ps で、コンテナの状況を確認できる
docker-compose stop で、コンテナの停止
Productionで使える?
- シングルホストだと簡単だが、マルチホストで本番運用しよう
とすると難易度がUP

- コンテナの監視は?ホストの監視は?Deployは? 冗長化は? ログ
管理は? セキュリティは? パフォーマンスは?

- Registry選定問題。Dockerhub? Quay.io? CoreOS Registory?
docker-registry? cf: ( http://qiita.com/Vexus2/items/
e84f5869c01e08438538 )
参考資料
Docker+CoreOSを本番環境に乗せるためにやったこと
http://blog.nanapi.co.jp/tech/2015/04/10/nanapi_on_docker/
=> nanapiの事例
Dockerを支える技術
http://www.slideshare.net/enakai/docker-34668707
=> 技術面の詳細な説明
本番運用を見据えたDocker Registry選定
http://qiita.com/Vexus2/items/e84f5869c01e08438538
Dive into dockerネットワーク
http://www.slideshare.net/mainya/dive-into-docker-36622210?related=1

More Related Content

What's hot

オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門Tsukasa Kato
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Masahito Zembutsu
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討Masahito Zembutsu
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
Dockerについて
DockerについてDockerについて
Dockerについて74th
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
DockerクイックツアーEtsuji Nakai
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座Masahito Zembutsu
 
何者(Dockerって)
何者(Dockerって)何者(Dockerって)
何者(Dockerって)Koji Saiki
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~harupong
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようmookjp
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 

What's hot (20)

オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
Dockerについて
DockerについてDockerについて
Dockerについて
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
何者(Dockerって)
何者(Dockerって)何者(Dockerって)
何者(Dockerって)
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 

Similar to Dockerハンズオン

Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見るzhengen lin
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Microsoft Corporation
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料teruyaono1
 
Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker74th
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修Suguru Yazawa
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方Kento Aoyama
 
今さら聞けない人のためのDocker超入門 - KOF
今さら聞けない人のためのDocker超入門 - KOF今さら聞けない人のためのDocker超入門 - KOF
今さら聞けない人のためのDocker超入門 - KOFVirtualTech Japan Inc.
 
明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築MILI-LLC
 

Similar to Dockerハンズオン (20)

Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見る
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Dockerの導入
Dockerの導入Dockerの導入
Dockerの導入
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
 
Docker入門
Docker入門Docker入門
Docker入門
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
Docker handson
Docker handsonDocker handson
Docker handson
 
Docker v14
Docker v14Docker v14
Docker v14
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方
 
今さら聞けない人のためのDocker超入門 - KOF
今さら聞けない人のためのDocker超入門 - KOF今さら聞けない人のためのDocker超入門 - KOF
今さら聞けない人のためのDocker超入門 - KOF
 
明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築
 

More from Kon Yuichi

データ活用をするための組織
データ活用をするための組織データ活用をするための組織
データ活用をするための組織Kon Yuichi
 
noteの決して止まらないカイゼンを支える、 エンジニアリングへの挑戦
noteの決して止まらないカイゼンを支える、 エンジニアリングへの挑戦noteの決して止まらないカイゼンを支える、 エンジニアリングへの挑戦
noteの決して止まらないカイゼンを支える、 エンジニアリングへの挑戦Kon Yuichi
 
One Time Binding & Digest Loop
One Time Binding & Digest LoopOne Time Binding & Digest Loop
One Time Binding & Digest LoopKon Yuichi
 
スキスキIonic
スキスキIonicスキスキIonic
スキスキIonicKon Yuichi
 
AngularJSの高速化
AngularJSの高速化AngularJSの高速化
AngularJSの高速化Kon Yuichi
 
Directiveで実現できたこと
Directiveで実現できたことDirectiveで実現できたこと
Directiveで実現できたことKon Yuichi
 
noteをAngularJSで構築した話
noteをAngularJSで構築した話noteをAngularJSで構築した話
noteをAngularJSで構築した話Kon Yuichi
 

More from Kon Yuichi (7)

データ活用をするための組織
データ活用をするための組織データ活用をするための組織
データ活用をするための組織
 
noteの決して止まらないカイゼンを支える、 エンジニアリングへの挑戦
noteの決して止まらないカイゼンを支える、 エンジニアリングへの挑戦noteの決して止まらないカイゼンを支える、 エンジニアリングへの挑戦
noteの決して止まらないカイゼンを支える、 エンジニアリングへの挑戦
 
One Time Binding & Digest Loop
One Time Binding & Digest LoopOne Time Binding & Digest Loop
One Time Binding & Digest Loop
 
スキスキIonic
スキスキIonicスキスキIonic
スキスキIonic
 
AngularJSの高速化
AngularJSの高速化AngularJSの高速化
AngularJSの高速化
 
Directiveで実現できたこと
Directiveで実現できたことDirectiveで実現できたこと
Directiveで実現できたこと
 
noteをAngularJSで構築した話
noteをAngularJSで構築した話noteをAngularJSで構築した話
noteをAngularJSで構築した話
 

Dockerハンズオン