SlideShare a Scribd company logo
1 of 40
Download to read offline
Dockerの導入 
FUNTERACTIVE OPEN MEETING VOL.04
FUNTERACTIVE OPEN MEETING VOL.04  
Yuji Tsukaguchi 
ファンタラクティブ株式会社 
COO, Web Designer 
無料写真素材サイト ぱくたそ 
Enginner 
@regret_raym
■ 本番環境のアプリケーションバージョン 
・WordPress、PHP、MySQL、Apache、Nginx… 
! 
■ それに合わせた開発環境 
・VirtualBox、VPS、Heroku… 
! 
■ 早い、軽いで話題のDockerを試す 
FUNTERACTIVE OPEN MEETING VOL.04  
はじめに
FUNTERACTIVE OPEN MEETING VOL.04 
Under the hood, Docker is built on the following components: 
・The cgroup and namespacing capabilities of the Linux 
kernel; 
・AUFS, a powerful union filesystem with copy-on-write 
capabilities; 
・The Go programming language; 
・lxc, a set of convenience scripts to simplify the creation of 
Linux containers. 
FUNTERACTIVE OPEN MEETING VOL.04  
Docker? 
https://github.com/docker/docker/blob/master/README.md#under-the-hood
AUFSとLXCを使って 
いい感じにコンテナ化してくれる 
FUNTERACTIVE OPEN MEETING VOL.04 
Apps Apps 
ゲストOS ゲストOS 
仮想マシン仮想マシン 
ユーザー空間 
OS process process process 
カーネル空間 
FUNTERACTIVE OPEN MEETING VOL.04  
VirtualBox 
物理マシン 
ハードウェアごと仮想化
ユーザー空間 
カーネル空間 
FUNTERACTIVE OPEN MEETING VOL.04  
LXC 
Linux Containers 
物理マシン 
Apps 
OS 
process 
process 
Apps 
process 
process 
ユーザー空間を分割して仮想化
AUFS 
DVD-ROM 
FUNTERACTIVE OPEN MEETING VOL.04  
AUFS 
Another Union File System 
File System 
modify new 
read-write 
read-only 
A’ B C 
A’ C 
A B 
http://itpro.nikkeibp.co.jp/article/Keyword/20090209/324482/?SS=imgview&FD=-692683090&ST=oss
Docker file system 
http://docs.docker.com/terms/layer/ 
FUNTERACTIVE OPEN MEETING VOL.04  
Container 
writable 
! 
Image 
read-only 
! 
Base image
Docker install 
FUNTERACTIVE OPEN MEETING VOL.04 
FUNTERACTIVE OPEN MEETING VOL.04  
Install 
# yumからインストール 
$ sudo yum install docker-io 
! 
# docker起動 
$ sudo service docker start 
! 
# サービス登録 
$ sudo chkconfig docker on 
! 
# バージョン確認 
$ docker -v 
Docker version 1.3.1, build c78088f/1.3.1 
※VirtualBox、Vagrantを使ってインストール
FUNTERACTIVE OPEN MEETING VOL.04  
Docker Pull 
docker indexからcentosのDocker Imageを取得
FUNTERACTIVE OPEN MEETING VOL.04  
docker image取得 
# 公式リポジトリからcentosのイメージを取得 
$ sudo docker pull centos 
! 
# 取得したイメージを確認 
$ sudo docker images centos
$ sudo docker run -i -t centos /bin/bash 
OS ユーザー空間 
カーネル空間 
物理マシン 
FUNTERACTIVE OPEN MEETING VOL.04  
container a52e5157470c 
base image 
process 
process 
centos 
コンテナ作成
コンテナ内にwget入れる 
$ yum install -y wget 
OS ユーザー空間 
カーネル空間 
物理マシン 
FUNTERACTIVE OPEN MEETING VOL.04  
container wget 
base image 
process 
process 
centos
FUNTERACTIVE OPEN MEETING VOL.04  
コンテナをコミット 
$ sudo docker ps -a 
! 
$ sudo docker commit a52e5157470c centos/wget 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
a52e515747 
0c centos:latest "/bin/ 
bash" 
10 minutes 
ago 
Exited (0) 2 
minutes 
ago 
agitated_poincare 
docker ps -aで確認できる項目
read-onlyのイメージ 
OS ユーザー空間 
カーネル空間 
物理マシン 
FUNTERACTIVE OPEN MEETING VOL.04  
image centos/wget 
base image 
process 
process 
centos
centos/wgetを元に新規コンテナ 
$ sudo docker run -i -t centos/wget /bin/bash 
OS ユーザー空間 
カーネル空間 
物理マシン 
FUNTERACTIVE OPEN MEETING VOL.04  
image centos/wget 
base image 
process 
process 
centos 
container 
921e5f3f895e
centos/wgetを元に新規コンテナ 
OS ユーザー空間 
カーネル空間 
物理マシン 
FUNTERACTIVE OPEN MEETING VOL.04  
image centos/wget 
base image 
process 
process 
centos 
container 
$ yum install -y vim 
vim
vimを入れたコンテナをコミット 
$ sudo docker commit 921e5f3f895e centos/vim 
OS ユーザー空間 
カーネル空間 
物理マシン 
FUNTERACTIVE OPEN MEETING VOL.04  
image centos/vim 
image centos/wget 
base image 
process 
process 
centos
複数のコンテナ起動 
$ sudo docker run -i -t centos/wget /bin/bash 
$ sudo docker run -i -t centos/vim /bin/bash 
OS ユーザー空間 
カーネル空間 
物理マシン 
FUNTERACTIVE OPEN MEETING VOL.04  
container 
image 
image 
base image 
process 
process 
container 
image 
base image 
process 
process 
centos/wget 
centos/vim
FUNTERACTIVE OPEN MEETING VOL.04  
コマンド一例 
# リモートリポジトリからイメージ取得 
$ docker pull REPOSITORY[:TAG] 
! 
# イメージ一覧 
$ docker images 
! 
# イメージからコンテナを起動接続 
$ docker run -i -t IMAGE /bin/bash 
! 
# コンテナを起動 
$ docker start CONTAINER 
! 
# コンテナを終了 
$ docker stop CONTAINER 
! 
# コンテナを削除 
$ docker rm CONTAINER 
# イメージを削除 
$ docker rmi IMAGE 
! 
# 起動しているコンテナに接続 
$ docker attach CONTAINER 
! 
# 起動しているコンテナ一覧 
$ docker ps 
! 
# 全てのコンテナ 
$ docker ps -a 
! 
# コンテナを全て停止 
$ docker stop `docker ps -aq` 
! 
# コンテナを全て削除 
$ docker rm `docker ps -aq`
SSHで接続 
FUNTERACTIVE OPEN MEETING VOL.04 
FUNTERACTIVE OPEN MEETING VOL.04  
SSH 
# コンテナ起動 
$ docker run -t -i centos /bin/bash 
! 
# 必要なパッケージインストール 
$ yum install -y passwd openssh openssh-clients openssh-server 
! 
# rootパスワード変更 
$ passwd 
! 
# sshdの変更 
$ vi /etc/ssh/sshd_config 
UsePAM no 
! 
$ exit
FUNTERACTIVE OPEN MEETING VOL.04  
コンテナ起動と接続 
# コンテナ確認 
$ sudo docker ps -a 
! 
# 先ほどのコンテナをコミット 
$ sudo docker commit XXXXXXX centos/sshd 
! 
# -dオプションでデーモン化、SSHが起動した状態でコンテナ起動 
$ sudo docker run -d -p 22 centos/sshd /usr/sbin/sshd -D 
! 
# docker ps -aでフォワードと、ifconfigでIPを確認する 
$ ssh root@XXX.XX.XX.X -p PORT
Supervisor 
FUNTERACTIVE OPEN MEETING VOL.04 
FUNTERACTIVE OPEN MEETING VOL.04  
Supervisor 
Dockerでは、プロセスを起動させるコマンドが一つしか選択できな 
いようなので、Python製のプロセス管理ツールSupervisorを使う。 
# yum install 
$ yum install -y python-setuptools 
! 
# supervisord インストール 
$ easy_install supervisor 
! 
# supervisord起動スクリプト 
$ vi /etc/init.d/supervisord 
! 
https://gist.github.com/regret/da56a239cb581089c813
FUNTERACTIVE OPEN MEETING VOL.04  
Supervisord設定 
# Supervisord config include 
! 
$ echo_supervisord_conf > /etc/supervisord.conf 
! 
$ echo "[include]" >> /etc/supervisord.conf 
! 
$ echo "files = supervisord/conf/*.conf" >> /etc/ 
supervisord.conf 
! 
$ mkdir -p /etc/supervisord/conf/
FUNTERACTIVE OPEN MEETING VOL.04  
Supervisord設定 
# Supervisord service.conf 
$ vi /etc/supervisord/conf/service.conf 
! 
[supervisord] 
nodaemon=true 
! 
[program:sshd] 
command=/usr/sbin/sshd -D 
autostart=true 
autorestart=true 
! 
[program:httpd] 
command=/usr/sbin/httpd -c "ErrorLog /dev/stdout" - 
DFOREGROUND 
redirect_stderr=true
FUNTERACTIVE OPEN MEETING VOL.04  
コンテナ起動と接続 
# コミット 
$ sudo docker commit XXXXXXX centos/supervisord 
! 
# 開放ポートを指定して起動 
$ sudo docker run -d -p 22 -p 80 centos/supervisord /usr/ 
bin/supervisord 
! 
# ポートマッピング確認 
$ sudo docker ps -a 
! 
# SSHログイン 
$ ssh root@127.0.0.1 -p PORT
Dockerで複数Webサーバ 
FUNTERACTIVE OPEN MEETING VOL.04 
Dockerに複数Webサーバ 
80 
FUNTERACTIVE OPEN MEETING VOL.04  
container 
container 
Domain A 
Apache 
Domain B 
Nginx 
proxy 
80 
Nginx 
Supervisord 
run プロセス管理ツール
Domain AのSupervisord 
# sshdとhttpdを設定 
$ vi /etc/supervisord/conf/service.conf 
! 
[supervisord] 
nodaemon=true 
[program:sshd] 
command=/usr/sbin/sshd -D 
autostart=true 
autorestart=true 
[program:httpd] 
command=/usr/sbin/httpd -c "ErrorLog /dev/stdout" - 
DFOREGROUND 
redirect_stderr=true 
FUNTERACTIVE OPEN MEETING VOL.04 
Domain BのSupervisord 
# sshdとnginxを設定 
$ vi /etc/supervisord/conf/service.conf 
! 
[supervisord] 
nodaemon=true 
[program:sshd] 
command=/usr/sbin/sshd -D 
autostart=true 
autorestart=true 
[program:nginx] 
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf 
redirect_stderr=true 
FUNTERACTIVE OPEN MEETING VOL.04 
FUNTERACTIVE OPEN MEETING VOL.04  
ホスト側のnginx設定 
# コンテナのポートマッピング確認 
$ sudo docker ps -a 
! 
# プロキシ設定 
$ sudo vi /etc/nginx/conf.d/proxy.conf 
! 
proxy_redirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-Host $host; 
proxy_set_header X-Forwarded-Server $host; 
proxy_set_header X-Forwarded-For 
$proxy_add_x_forwarded_for; 
!
FUNTERACTIVE OPEN MEETING VOL.04  
ホスト側のnginx設定 
# nginxのリバースプロキシ設定 
$ sudo /etc/nginx/conf.d/virtual.conf 
! 
server { 
listen 80; 
server_name hogehoge.jp; 
location / { 
proxy_pass http://127.0.0.1:XXXXX; 
} 
} 
server { 
listen 80; 
server_name piyopiyo.jp; 
location / { 
proxy_pass http://127.0.0.1:XXXXX; 
} 
} 
調べたポート番号
Docker registry 
FUNTERACTIVE OPEN MEETING VOL.04 
FUNTERACTIVE OPEN MEETING VOL.04 
ご清聴ありがとうございました 
FFUUNNTTEERRAACCTTIIVVEE OOPPEENN MMEEEETTIINNGG VVOOLL..0034 

More Related Content

What's hot

DockerをRed Hatはどのように見ているのか
DockerをRed Hatはどのように見ているのかDockerをRed Hatはどのように見ているのか
DockerをRed Hatはどのように見ているのかEmma Haruka Iwao
 
Dive into dockerネットワーク
Dive into dockerネットワークDive into dockerネットワーク
Dive into dockerネットワークKazuyuki Mori
 
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオンJAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオンRyo Nakamaru
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?Masahito Zembutsu
 
Alpine linuxを触ってみよう
Alpine linuxを触ってみようAlpine linuxを触ってみよう
Alpine linuxを触ってみようRyo Adachi
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2Masahide Yamamoto
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイoshiro_seiya
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西Masahide Yamamoto
 
清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~harupong
 
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
 
DockerでGUIアプリケーションを動かす
DockerでGUIアプリケーションを動かすDockerでGUIアプリケーションを動かす
DockerでGUIアプリケーションを動かすigjit
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。Masahito Zembutsu
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker74th
 
Docker lifecycle event hooks
Docker lifecycle event hooksDocker lifecycle event hooks
Docker lifecycle event hooksRyo Nakamaru
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化Yuki Kanazawa
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみようRyo Adachi
 
Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 

What's hot (20)

DockerをRed Hatはどのように見ているのか
DockerをRed Hatはどのように見ているのかDockerをRed Hatはどのように見ているのか
DockerをRed Hatはどのように見ているのか
 
Dive into dockerネットワーク
Dive into dockerネットワークDive into dockerネットワーク
Dive into dockerネットワーク
 
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオンJAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?
 
Alpine linuxを触ってみよう
Alpine linuxを触ってみようAlpine linuxを触ってみよう
Alpine linuxを触ってみよう
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~
 
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
 
DockerでGUIアプリケーションを動かす
DockerでGUIアプリケーションを動かすDockerでGUIアプリケーションを動かす
DockerでGUIアプリケーションを動かす
 
Jenkins with Docker
Jenkins with DockerJenkins with Docker
Jenkins with Docker
 
Docker入門
Docker入門Docker入門
Docker入門
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
 
Docker lifecycle event hooks
Docker lifecycle event hooksDocker lifecycle event hooks
Docker lifecycle event hooks
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
 
Docker handson
Docker handsonDocker handson
Docker handson
 

Viewers also liked

Top Ruby Gems to Start A Project
Top Ruby Gems to Start A ProjectTop Ruby Gems to Start A Project
Top Ruby Gems to Start A ProjectMichel Pigassou
 
Social Media Tips Infographic, November, 2013
Social Media Tips Infographic, November, 2013Social Media Tips Infographic, November, 2013
Social Media Tips Infographic, November, 2013Leslie Drate
 
Cloud Migration - Few Pointers
Cloud Migration - Few PointersCloud Migration - Few Pointers
Cloud Migration - Few PointersNavin Malhotra
 
are you paying attention
are you paying attentionare you paying attention
are you paying attentionkrybal
 
Presentation2 (1)
Presentation2 (1)Presentation2 (1)
Presentation2 (1)Fadi Hweidi
 
Still photo assignment
Still photo assignment Still photo assignment
Still photo assignment StephanieUNCA
 
Prudential the great company
Prudential the great companyPrudential the great company
Prudential the great companyNnoffie Khaa
 
Artist ego and context
Artist ego and contextArtist ego and context
Artist ego and contextTae wook kang
 
Snapshot On Mobile Data Growth
Snapshot On Mobile Data GrowthSnapshot On Mobile Data Growth
Snapshot On Mobile Data GrowthAshutosh Pandey
 
Grace of Mother Nature.
Grace of Mother Nature.Grace of Mother Nature.
Grace of Mother Nature.Makala (D)
 
Worksheet Listening
Worksheet ListeningWorksheet Listening
Worksheet Listeningsycindyng
 

Viewers also liked (18)

Top Ruby Gems to Start A Project
Top Ruby Gems to Start A ProjectTop Ruby Gems to Start A Project
Top Ruby Gems to Start A Project
 
Social Media Tips Infographic, November, 2013
Social Media Tips Infographic, November, 2013Social Media Tips Infographic, November, 2013
Social Media Tips Infographic, November, 2013
 
Gypsy Girl
Gypsy Girl Gypsy Girl
Gypsy Girl
 
Cloud Migration - Few Pointers
Cloud Migration - Few PointersCloud Migration - Few Pointers
Cloud Migration - Few Pointers
 
Bag powerpoint
Bag  powerpoint  Bag  powerpoint
Bag powerpoint
 
アバター量産CGM
アバター量産CGMアバター量産CGM
アバター量産CGM
 
are you paying attention
are you paying attentionare you paying attention
are you paying attention
 
1st day ar tmud
1st day ar tmud1st day ar tmud
1st day ar tmud
 
Presentation2 (1)
Presentation2 (1)Presentation2 (1)
Presentation2 (1)
 
PTFE Components & Parts
PTFE Components & PartsPTFE Components & Parts
PTFE Components & Parts
 
من اللمبي إلى توشكى في
من اللمبي إلى توشكى فيمن اللمبي إلى توشكى في
من اللمبي إلى توشكى في
 
Still photo assignment
Still photo assignment Still photo assignment
Still photo assignment
 
Prudential the great company
Prudential the great companyPrudential the great company
Prudential the great company
 
Artist ego and context
Artist ego and contextArtist ego and context
Artist ego and context
 
Snapshot On Mobile Data Growth
Snapshot On Mobile Data GrowthSnapshot On Mobile Data Growth
Snapshot On Mobile Data Growth
 
Grace of Mother Nature.
Grace of Mother Nature.Grace of Mother Nature.
Grace of Mother Nature.
 
Richard avedon
Richard avedonRichard avedon
Richard avedon
 
Worksheet Listening
Worksheet ListeningWorksheet Listening
Worksheet Listening
 

Similar to Dockerの導入

Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKon Yuichi
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料teruyaono1
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と DockerのキホンNaoki Nagazumi
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン啓介 大橋
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見るzhengen lin
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSnpsg
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンRyo Nakamaru
 
LAMP環境にDocker環境を追加してみた
LAMP環境にDocker環境を追加してみたLAMP環境にDocker環境を追加してみた
LAMP環境にDocker環境を追加してみたHiroshi Hatta
 

Similar to Dockerの導入 (20)

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社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見る
 
20230128.pptx
20230128.pptx20230128.pptx
20230128.pptx
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
 
LAMP環境にDocker環境を追加してみた
LAMP環境にDocker環境を追加してみたLAMP環境にDocker環境を追加してみた
LAMP環境にDocker環境を追加してみた
 

More from regret raym

React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示するregret raym
 
SlackにHubotを設定して対話する
SlackにHubotを設定して対話するSlackにHubotを設定して対話する
SlackにHubotを設定して対話するregret raym
 
CreateJSを使ったアニメーション表現の基礎
CreateJSを使ったアニメーション表現の基礎CreateJSを使ったアニメーション表現の基礎
CreateJSを使ったアニメーション表現の基礎regret raym
 
1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ
1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ
1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそregret raym
 
FluentdとGrothForecastをインストールする
FluentdとGrothForecastをインストールするFluentdとGrothForecastをインストールする
FluentdとGrothForecastをインストールするregret raym
 
Chefで作る開発環境
Chefで作る開発環境Chefで作る開発環境
Chefで作る開発環境regret raym
 
Jenkinsの導入 vol.02 Bitbucketと連携する
Jenkinsの導入 vol.02 Bitbucketと連携するJenkinsの導入 vol.02 Bitbucketと連携する
Jenkinsの導入 vol.02 Bitbucketと連携するregret raym
 
Jenkinsの導入 Vol.01
Jenkinsの導入 Vol.01Jenkinsの導入 Vol.01
Jenkinsの導入 Vol.01regret raym
 
MT東京 ぱくたそ/PAKUTASO
MT東京 ぱくたそ/PAKUTASOMT東京 ぱくたそ/PAKUTASO
MT東京 ぱくたそ/PAKUTASOregret raym
 
今から始めるPhotoshopによるWeb制作-初期設定編
今から始めるPhotoshopによるWeb制作-初期設定編今から始めるPhotoshopによるWeb制作-初期設定編
今から始めるPhotoshopによるWeb制作-初期設定編regret raym
 
Web制作のアレコレ
Web制作のアレコレWeb制作のアレコレ
Web制作のアレコレregret raym
 
WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法regret raym
 
WordCamp Tokyo2012 handson Portfolio
WordCamp Tokyo2012 handson PortfolioWordCamp Tokyo2012 handson Portfolio
WordCamp Tokyo2012 handson Portfolioregret raym
 
WordCamp Tokyo2012 Session
WordCamp Tokyo2012 SessionWordCamp Tokyo2012 Session
WordCamp Tokyo2012 Sessionregret raym
 
Movable typeでモバイルギャラリーサイト
Movable typeでモバイルギャラリーサイトMovable typeでモバイルギャラリーサイト
Movable typeでモバイルギャラリーサイトregret raym
 
Css拡張言語のコトハジメ
Css拡張言語のコトハジメCss拡張言語のコトハジメ
Css拡張言語のコトハジメregret raym
 

More from regret raym (18)

React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示する
 
SlackにHubotを設定して対話する
SlackにHubotを設定して対話するSlackにHubotを設定して対話する
SlackにHubotを設定して対話する
 
CreateJSを使ったアニメーション表現の基礎
CreateJSを使ったアニメーション表現の基礎CreateJSを使ったアニメーション表現の基礎
CreateJSを使ったアニメーション表現の基礎
 
1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ
1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ
1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ
 
FluentdとGrothForecastをインストールする
FluentdとGrothForecastをインストールするFluentdとGrothForecastをインストールする
FluentdとGrothForecastをインストールする
 
Chefで作る開発環境
Chefで作る開発環境Chefで作る開発環境
Chefで作る開発環境
 
Jenkinsの導入 vol.02 Bitbucketと連携する
Jenkinsの導入 vol.02 Bitbucketと連携するJenkinsの導入 vol.02 Bitbucketと連携する
Jenkinsの導入 vol.02 Bitbucketと連携する
 
Jenkinsの導入 Vol.01
Jenkinsの導入 Vol.01Jenkinsの導入 Vol.01
Jenkinsの導入 Vol.01
 
MT東京 ぱくたそ/PAKUTASO
MT東京 ぱくたそ/PAKUTASOMT東京 ぱくたそ/PAKUTASO
MT東京 ぱくたそ/PAKUTASO
 
今から始めるPhotoshopによるWeb制作-初期設定編
今から始めるPhotoshopによるWeb制作-初期設定編今から始めるPhotoshopによるWeb制作-初期設定編
今から始めるPhotoshopによるWeb制作-初期設定編
 
Web制作のアレコレ
Web制作のアレコレWeb制作のアレコレ
Web制作のアレコレ
 
Yurufuwa007
Yurufuwa007Yurufuwa007
Yurufuwa007
 
WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法
 
WordCamp Tokyo2012 handson Portfolio
WordCamp Tokyo2012 handson PortfolioWordCamp Tokyo2012 handson Portfolio
WordCamp Tokyo2012 handson Portfolio
 
WordCamp Tokyo2012 Session
WordCamp Tokyo2012 SessionWordCamp Tokyo2012 Session
WordCamp Tokyo2012 Session
 
Movable typeでモバイルギャラリーサイト
Movable typeでモバイルギャラリーサイトMovable typeでモバイルギャラリーサイト
Movable typeでモバイルギャラリーサイト
 
Css拡張言語のコトハジメ
Css拡張言語のコトハジメCss拡張言語のコトハジメ
Css拡張言語のコトハジメ
 
Wp html5
Wp html5Wp html5
Wp html5
 

Dockerの導入

  • 2. FUNTERACTIVE OPEN MEETING VOL.04  Yuji Tsukaguchi ファンタラクティブ株式会社 COO, Web Designer 無料写真素材サイト ぱくたそ Enginner @regret_raym
  • 3. ■ 本番環境のアプリケーションバージョン ・WordPress、PHP、MySQL、Apache、Nginx… ! ■ それに合わせた開発環境 ・VirtualBox、VPS、Heroku… ! ■ 早い、軽いで話題のDockerを試す FUNTERACTIVE OPEN MEETING VOL.04  はじめに
  • 5. Under the hood, Docker is built on the following components: ・The cgroup and namespacing capabilities of the Linux kernel; ・AUFS, a powerful union filesystem with copy-on-write capabilities; ・The Go programming language; ・lxc, a set of convenience scripts to simplify the creation of Linux containers. FUNTERACTIVE OPEN MEETING VOL.04  Docker? https://github.com/docker/docker/blob/master/README.md#under-the-hood
  • 7. Apps Apps ゲストOS ゲストOS 仮想マシン仮想マシン ユーザー空間 OS process process process カーネル空間 FUNTERACTIVE OPEN MEETING VOL.04  VirtualBox 物理マシン ハードウェアごと仮想化
  • 8. ユーザー空間 カーネル空間 FUNTERACTIVE OPEN MEETING VOL.04  LXC Linux Containers 物理マシン Apps OS process process Apps process process ユーザー空間を分割して仮想化
  • 9. AUFS DVD-ROM FUNTERACTIVE OPEN MEETING VOL.04  AUFS Another Union File System File System modify new read-write read-only A’ B C A’ C A B http://itpro.nikkeibp.co.jp/article/Keyword/20090209/324482/?SS=imgview&FD=-692683090&ST=oss
  • 10. Docker file system http://docs.docker.com/terms/layer/ FUNTERACTIVE OPEN MEETING VOL.04  Container writable ! Image read-only ! Base image
  • 11. Docker install FUNTERACTIVE OPEN MEETING VOL.04 
  • 12. FUNTERACTIVE OPEN MEETING VOL.04  Install # yumからインストール $ sudo yum install docker-io ! # docker起動 $ sudo service docker start ! # サービス登録 $ sudo chkconfig docker on ! # バージョン確認 $ docker -v Docker version 1.3.1, build c78088f/1.3.1 ※VirtualBox、Vagrantを使ってインストール
  • 13. FUNTERACTIVE OPEN MEETING VOL.04  Docker Pull docker indexからcentosのDocker Imageを取得
  • 14. FUNTERACTIVE OPEN MEETING VOL.04  docker image取得 # 公式リポジトリからcentosのイメージを取得 $ sudo docker pull centos ! # 取得したイメージを確認 $ sudo docker images centos
  • 15. $ sudo docker run -i -t centos /bin/bash OS ユーザー空間 カーネル空間 物理マシン FUNTERACTIVE OPEN MEETING VOL.04  container a52e5157470c base image process process centos コンテナ作成
  • 16. コンテナ内にwget入れる $ yum install -y wget OS ユーザー空間 カーネル空間 物理マシン FUNTERACTIVE OPEN MEETING VOL.04  container wget base image process process centos
  • 17. FUNTERACTIVE OPEN MEETING VOL.04  コンテナをコミット $ sudo docker ps -a ! $ sudo docker commit a52e5157470c centos/wget CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a52e515747 0c centos:latest "/bin/ bash" 10 minutes ago Exited (0) 2 minutes ago agitated_poincare docker ps -aで確認できる項目
  • 18. read-onlyのイメージ OS ユーザー空間 カーネル空間 物理マシン FUNTERACTIVE OPEN MEETING VOL.04  image centos/wget base image process process centos
  • 19. centos/wgetを元に新規コンテナ $ sudo docker run -i -t centos/wget /bin/bash OS ユーザー空間 カーネル空間 物理マシン FUNTERACTIVE OPEN MEETING VOL.04  image centos/wget base image process process centos container 921e5f3f895e
  • 20. centos/wgetを元に新規コンテナ OS ユーザー空間 カーネル空間 物理マシン FUNTERACTIVE OPEN MEETING VOL.04  image centos/wget base image process process centos container $ yum install -y vim vim
  • 21. vimを入れたコンテナをコミット $ sudo docker commit 921e5f3f895e centos/vim OS ユーザー空間 カーネル空間 物理マシン FUNTERACTIVE OPEN MEETING VOL.04  image centos/vim image centos/wget base image process process centos
  • 22. 複数のコンテナ起動 $ sudo docker run -i -t centos/wget /bin/bash $ sudo docker run -i -t centos/vim /bin/bash OS ユーザー空間 カーネル空間 物理マシン FUNTERACTIVE OPEN MEETING VOL.04  container image image base image process process container image base image process process centos/wget centos/vim
  • 23. FUNTERACTIVE OPEN MEETING VOL.04  コマンド一例 # リモートリポジトリからイメージ取得 $ docker pull REPOSITORY[:TAG] ! # イメージ一覧 $ docker images ! # イメージからコンテナを起動接続 $ docker run -i -t IMAGE /bin/bash ! # コンテナを起動 $ docker start CONTAINER ! # コンテナを終了 $ docker stop CONTAINER ! # コンテナを削除 $ docker rm CONTAINER # イメージを削除 $ docker rmi IMAGE ! # 起動しているコンテナに接続 $ docker attach CONTAINER ! # 起動しているコンテナ一覧 $ docker ps ! # 全てのコンテナ $ docker ps -a ! # コンテナを全て停止 $ docker stop `docker ps -aq` ! # コンテナを全て削除 $ docker rm `docker ps -aq`
  • 24. SSHで接続 FUNTERACTIVE OPEN MEETING VOL.04 
  • 25. FUNTERACTIVE OPEN MEETING VOL.04  SSH # コンテナ起動 $ docker run -t -i centos /bin/bash ! # 必要なパッケージインストール $ yum install -y passwd openssh openssh-clients openssh-server ! # rootパスワード変更 $ passwd ! # sshdの変更 $ vi /etc/ssh/sshd_config UsePAM no ! $ exit
  • 26. FUNTERACTIVE OPEN MEETING VOL.04  コンテナ起動と接続 # コンテナ確認 $ sudo docker ps -a ! # 先ほどのコンテナをコミット $ sudo docker commit XXXXXXX centos/sshd ! # -dオプションでデーモン化、SSHが起動した状態でコンテナ起動 $ sudo docker run -d -p 22 centos/sshd /usr/sbin/sshd -D ! # docker ps -aでフォワードと、ifconfigでIPを確認する $ ssh root@XXX.XX.XX.X -p PORT
  • 27. Supervisor FUNTERACTIVE OPEN MEETING VOL.04 
  • 28. FUNTERACTIVE OPEN MEETING VOL.04  Supervisor Dockerでは、プロセスを起動させるコマンドが一つしか選択できな いようなので、Python製のプロセス管理ツールSupervisorを使う。 # yum install $ yum install -y python-setuptools ! # supervisord インストール $ easy_install supervisor ! # supervisord起動スクリプト $ vi /etc/init.d/supervisord ! https://gist.github.com/regret/da56a239cb581089c813
  • 29. FUNTERACTIVE OPEN MEETING VOL.04  Supervisord設定 # Supervisord config include ! $ echo_supervisord_conf > /etc/supervisord.conf ! $ echo "[include]" >> /etc/supervisord.conf ! $ echo "files = supervisord/conf/*.conf" >> /etc/ supervisord.conf ! $ mkdir -p /etc/supervisord/conf/
  • 30. FUNTERACTIVE OPEN MEETING VOL.04  Supervisord設定 # Supervisord service.conf $ vi /etc/supervisord/conf/service.conf ! [supervisord] nodaemon=true ! [program:sshd] command=/usr/sbin/sshd -D autostart=true autorestart=true ! [program:httpd] command=/usr/sbin/httpd -c "ErrorLog /dev/stdout" - DFOREGROUND redirect_stderr=true
  • 31. FUNTERACTIVE OPEN MEETING VOL.04  コンテナ起動と接続 # コミット $ sudo docker commit XXXXXXX centos/supervisord ! # 開放ポートを指定して起動 $ sudo docker run -d -p 22 -p 80 centos/supervisord /usr/ bin/supervisord ! # ポートマッピング確認 $ sudo docker ps -a ! # SSHログイン $ ssh root@127.0.0.1 -p PORT
  • 33. Dockerに複数Webサーバ 80 FUNTERACTIVE OPEN MEETING VOL.04  container container Domain A Apache Domain B Nginx proxy 80 Nginx Supervisord run プロセス管理ツール
  • 34. Domain AのSupervisord # sshdとhttpdを設定 $ vi /etc/supervisord/conf/service.conf ! [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D autostart=true autorestart=true [program:httpd] command=/usr/sbin/httpd -c "ErrorLog /dev/stdout" - DFOREGROUND redirect_stderr=true FUNTERACTIVE OPEN MEETING VOL.04 
  • 35. Domain BのSupervisord # sshdとnginxを設定 $ vi /etc/supervisord/conf/service.conf ! [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D autostart=true autorestart=true [program:nginx] command=/usr/sbin/nginx -c /etc/nginx/nginx.conf redirect_stderr=true FUNTERACTIVE OPEN MEETING VOL.04 
  • 36. FUNTERACTIVE OPEN MEETING VOL.04  ホスト側のnginx設定 # コンテナのポートマッピング確認 $ sudo docker ps -a ! # プロキシ設定 $ sudo vi /etc/nginx/conf.d/proxy.conf ! proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; !
  • 37. FUNTERACTIVE OPEN MEETING VOL.04  ホスト側のnginx設定 # nginxのリバースプロキシ設定 $ sudo /etc/nginx/conf.d/virtual.conf ! server { listen 80; server_name hogehoge.jp; location / { proxy_pass http://127.0.0.1:XXXXX; } } server { listen 80; server_name piyopiyo.jp; location / { proxy_pass http://127.0.0.1:XXXXX; } } 調べたポート番号
  • 38. Docker registry FUNTERACTIVE OPEN MEETING VOL.04