Copyright © 2014 rocros All Rights Reserved.
Dockerをすこーし
さわってみる
Rocros Casual Talk #7
2014.05.13
Yuta Ohashi
2Copyright © 2014 rocros All Rights Reserved.
ゴール
ローカルPCでVagrantでホストOSを起動して、
ホストOSのDockerでコンテナを起動する。
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
コンテナ2
Docker
image
username/centos
インターネット
3Copyright © 2014 rocros All Rights Reserved.
はじめる前に・・・
開いておいてください
https://gist.github.com/blue-goheimochi/5129e21e09c2fdc224ce
4Copyright © 2014 rocros All Rights Reserved.
ローカルPCにVagrantをインストール
ローカルPC
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
【Before】Vagrantインストール前
5Copyright © 2014 rocros All Rights Reserved.
ローカルPCにVagrantをインストール
Vagrant
ローカルPC
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
【After】Vagrantインストール後
6Copyright © 2014 rocros All Rights Reserved.
ローカルPCにVagrantをインストール
公式サイトからOSにあったVagrantをインストールする
http://www.vagrantup.com/downloads.html
7Copyright © 2014 rocros All Rights Reserved.
ホストOSを起動
Vagrant
ローカルPC
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
【Before】ホストOS起動前
8Copyright © 2014 rocros All Rights Reserved.
ホストOSを起動
ホストOS
Vagrant
ローカルPC
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
【After】ホストOS起動後
9Copyright © 2014 rocros All Rights Reserved.
ホストOSを起動
Macの場合
● ターミナルを起動する。
● 下記を入力して「Enter」
Windowsの場合
● 「windows」ボタン+「R」ボタン
● ファイル名を指定して実行に「cmd」と入力して「OK」をクリック
● 下記を入力して「Enter」
vagrant box add centos64 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
vagrant box add centos64 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
10Copyright © 2014 rocros All Rights Reserved.
ホストOSを起動
Macの場合
● ホームディレクトリに適当なディレクトリを作る(ホームディレクトリじゃなくてもお好きな場所に)
Windowsの場合
● デスクトップに適当なフォルダを作る(デスクトップじゃなくてもお好きな場所に)
● 下記コマンドで、作成したフォルダに移動する
cd Desktop¥docker-test
mkdir /Users/ユーザー名/docker-test
● 作成したディレクトリに移動する
cd /Users/ユーザー名/docker-test
11Copyright © 2014 rocros All Rights Reserved.
ホストOSを起動
Macの場合
● 作成したディレクトリに、下記「Vagrantfile」を配置する
https://gist.github.com/blue-goheimochi/1520db0f069fd8ec4b8a
Windowsの場合
● 作成したフォルダに、下記「Vagrantfile」を配置する
https://gist.github.com/blue-goheimochi/1520db0f069fd8ec4b8a
※gitがインストールされている環境であれば、git cloneのほうが簡単かもです。
git clone https://gist.github.com/1520db0f069fd8ec4b8a.git .
12Copyright © 2014 rocros All Rights Reserved.
ホストOSを起動
Macの場合
● 下記コマンドを実行してホストOSを起動する
Windowsの場合
● 下記コマンドを実行してホストOSを起動する
vagrant up
ssh 192.168.33.22
●ユーザ名: vagrant パスワード: vagrant でログインする
● PuttyなどのSSHクライアントで、192.168.33.22(ポート:22)を指定し、ホストOSにアクセスする。
● ユーザ名: vagrant パスワード: vagrant でログインする
vagrant up
● sshコマンドでホストOSにアクセスする
13Copyright © 2014 rocros All Rights Reserved.
Dockerをインストール
ホストOS
Vagrant
ローカルPC
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
【Before】Dockerインストール前
14Copyright © 2014 rocros All Rights Reserved.
Dockerをインストール
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
【After】Dockerインストール後
15Copyright © 2014 rocros All Rights Reserved.
Dockerをインストール
Dockerをインストールする
sudo yum -y install docker-io
sudo service docker start
sudo chkconfig docker on
※DockerをEPELリポジトリからインストールする。素のCentOSであれば、手動でEPELリポジトリの追加をする必要が
ある。今回使用するVagrantBoxではすでにEPELリポジトリが追加されている。
Dockerのバージョンを確認する
sudo docker version
※インストールされるDockerのバージョンは0.9.0。「Last stable version: 0.11.1, please update docker」のメッセージ
が表示されるが、現状(2014.05.12現在)EPELリポジトリで提供されるバージョンは0.9.0になります。(ちなみにUbuntu
Trustyでも0.9.1)
※各OS別のインストール方法は、
https://www.docker.io/gettingstarted/#h_installation
こちらから確認できます。
16Copyright © 2014 rocros All Rights Reserved.
Dockerをインストール
Dockerの状態を確認する
sudo docker info
コンテナ数、イメージ数などのDockerの現在の情報が確認できます。
17Copyright © 2014 rocros All Rights Reserved.
Docker Imageを取得
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
【Before】Docker Image取得前
18Copyright © 2014 rocros All Rights Reserved.
Docker Imageを取得
【After】Docker Image取得後
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
centos
centos
fedra
ubuntu
インターネット
19Copyright © 2014 rocros All Rights Reserved.
Docker Imageを取得
Docker Imageを取得する
sudo docker pull centos
Docker IndexからDocker Imageを取得します。今回は公式のcentosのDocker Imageを取得。
(https://index.docker.io/_/centos/)
Docker Imageはpull時に、下記URLのDocker Indexの中のDocker Imageから検索されます。
https://index.docker.io/
こちらから様々なDocker Imageを検索できます。
pull したDocker Imageを確認する
sudo docker images
TAG名の違う3つのイメージファイルが表示されると思います。(TAG:centos6、latest、6.4)
リポジトリ内の特定のイメージのみpullしたい場合には、
sudo docker pull centos:latest
のようにリポジトリ名の後ろに「:」でTAG名を指定することで可能です。
20Copyright © 2014 rocros All Rights Reserved.
コンテナ1を起動
【Before】コンテナ1起動前
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
centos
centos
fedra
ubuntu
インターネット
21Copyright © 2014 rocros All Rights Reserved.
コンテナ1を起動
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
インターネット
【After】コンテナ1起動後
22Copyright © 2014 rocros All Rights Reserved.
コンテナ1を起動
centosのDocker Imageを元にcontainer1という
コンテナを起動しシェルを実行する
sudo docker run -i -t -h container1 centos /bin/bash
インタラクティブモードで実行する場合 –i と –t のオプション指定が必要となります。-h でホスト名が指定できます。
コンテナの確認をする
env
Container1のホスト名でコンテナが起動していることが確認できます。
コンテナを終了する
exit
23Copyright © 2014 rocros All Rights Reserved.
コンテナ1を起動
起動中のコンテナを確認する
sudo docker ps
すべてのコンテナの状態を確認
sudo docker ps -a
コンテナを再実行する
sudo docker start <CONTAINER ID>
起動しているコンテナを確認するコマンドですが、この時点で起動しているコンテナは存在しないはず。
-a のオプションをつけることで全てのコンテナを確認できます。
コンテナの起動時にランダムな CONTAINER ID が設定されます。
24Copyright © 2014 rocros All Rights Reserved.
コンテナ1を起動
起動中のコンテナを確認する
sudo docker ps
コンテナにアタッチしてコンテナ内に入る
sudo docker attach <CONTAINER ID>
Apacheをインストールする
yum –y install httpd
service httpd start
先ほど再実行した CONTAINER ID のコンテナが起動していることが確認できます。
再度シェルが実行できるようになります。
コンテナを終了する
exit
25Copyright © 2014 rocros All Rights Reserved.
コンテナ1からDocker Imageを作成する
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
インターネット
【Before】Docker Image作成前
26Copyright © 2014 rocros All Rights Reserved.
コンテナ1からDocker Imageを作成する
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
Docker
image
username/centos
インターネット
【Before】Docker Image作成後
27Copyright © 2014 rocros All Rights Reserved.
コンテナ1からDocker Imageを作成する
コンテナ1からDocker Imageを作成する
sudo docker commit <CONTAINER ID> username/centos
作成したDocker Imageを確認する
sudo docker images
これで先ほどApacheをインストールしたコンテナ1がDocker Imageとして保存されます。
username/centos の名前でDocker Imageが作成されていることが分かります。
28Copyright © 2014 rocros All Rights Reserved.
作成したDocker Imageからコンテナ2を起動
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
Docker
image
username/centos
インターネット
【After】コンテナ2起動前
29Copyright © 2014 rocros All Rights Reserved.
作成したDocker Imageからコンテナ2を起動
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
コンテナ2
Docker
image
username/centos
インターネット
【After】コンテナ2起動後
30Copyright © 2014 rocros All Rights Reserved.
作成したDocker Imageからコンテナ2を起動
バックグラウンドでコンテナ2を起動
sudo docker run -d -p 80:80 -h container2 username/centos /usr/sbin/httpd -D FOREGROUND
起動中のコンテナを確認する
sudo docker ps
先ほどとは別のオプションを指定して起動します。
-p はポートフォワーディングのオプションです。<ホストポート>:<コンテナポート>で指定できます。
-d はコンテナがバックグラウンドで動くようにするオプションです。
バックグラウンドでコンテナを動かす場合、何かジョブがフォアグラウンドで動いていないといけないようなので、
httpdがフォアグラウンドで動くようコマンドを指定しています。
コンテナ2が起動している状態が確認できます。
PORTSの部分が「0.0.0.0:80->80/tcp」になっているかと思いますがこれは、
ホストのポート:80 → コンテナ2のポート:80にポートフォワードしていることを示します。
31Copyright © 2014 rocros All Rights Reserved.
作成したDocker Imageからコンテナ2を起動
ブラウザで確認する
ブラウザのアドレスバーに「http://192.168.33.22/」を入力すると、Apatcheのテストページが表示されます。
32Copyright © 2014 rocros All Rights Reserved.
ゴール達成!!
ローカルPCでVagrantでホストOSを起動して、
ホストOSのDockerでコンテナを起動する。
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
コンテナ2
Docker
image
username/centos
インターネット
(+コンテナにApacheインストールしてブラウザでアクセスする)
33Copyright © 2014 rocros All Rights Reserved.
おさらい
34Copyright © 2014 rocros All Rights Reserved.
まっさらな状態
ローカルPC
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
35Copyright © 2014 rocros All Rights Reserved.
ローカルPCにVagrantをインストール
Vagrant
ローカルPC
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
36Copyright © 2014 rocros All Rights Reserved.
ホストOSを起動
ホストOS
Vagrant
ローカルPC
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
vagrant up
37Copyright © 2014 rocros All Rights Reserved.
Dockerをインストール
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker Index
centos
fedra
ubuntu
インターネット
yum -y install docker-io
38Copyright © 2014 rocros All Rights Reserved.
Docker Imageを取得
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
centos
centos
fedra
ubuntu
インターネット
sudo docker pull centos
39Copyright © 2014 rocros All Rights Reserved.
コンテナ1を起動
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
インターネット
sudo docker run -i -t -h container1 centos /bin/bash
40Copyright © 2014 rocros All Rights Reserved.
コンテナ1からDocker Imageを作成する
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
Docker
image
username/centos
インターネット
sudo docker commit <CONTAINER ID> username/centos
41Copyright © 2014 rocros All Rights Reserved.
作成したDocker Imageからコンテナ2を起動
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
コンテナ2
Docker
image
username/centos
インターネット
sudo docker run -d -p 80:80 -h container2 username/centos /usr/sbin/httpd -D FOREGROUND
42Copyright © 2014 rocros All Rights Reserved.
ゴール
ホストOS
Vagrant
ローカルPC
Docker
Docker
image
Docker
image
Docker
image
Docker
image
Docker Index
コンテナ1
centos
centos
fedra
ubuntu
コンテナ2
Docker
image
username/centos
インターネット
ローカルPCでVagrantでホストOSを起動して、
ホストOSのDockerでコンテナを起動する。
(+コンテナにApacheインストールしてブラウザでアクセスする)
43Copyright © 2014 rocros All Rights Reserved.
その他コマンドの一部
Docker Imageを削除する
sudo docker rmi <IMAGE ID>
コンテナを削除する
sudo docker rm <CONTAINER ID>
ダウンロードもしくは自分で作成したDocker Imageを削除します。
コンテナをコンテナIDを指定して削除します。
起動中のコンテナを停止する
sudo docker kill <CONTAINER ID>
起動中のコンテナをコンテナIDを指定して停止します。
44Copyright © 2014 rocros All Rights Reserved.
Dockerfileについて
Dockerfileとは?
# ベースとなるDocker Imageの指定
FROM centos
# 作成者
MAINTAINER username
# yumでhttpをインストール
RUN yum -y install httpd
# ポート開放の設定
EXPOSE 80
# docker run 時に実行するコマンドを指定
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
Docker Imageを作成するための定義がかかれたファイルで、
今回を例にすると、「コンテナにApacheをインストールして、そのコンテナをDocker Imageにする」の工程を、
コマンド1つで実行できる。
Dcokerfileの例
45Copyright © 2014 rocros All Rights Reserved.
Dockerfileについて
DockerfileからDocker Imageをビルド
-t のオプションで <REPOSITORY>:<TAG>を指定できます。
最後の . (ピリオド)の部分はDockerfileの存在するパスを指定しますので忘れずDockerfileのパスを指定してください。
sudo docker build -t username:centos .
作成したDocker Imageを起動
sudo docker run -d –p 80:80 username/centos
Dockerfileで指定したCMDが起動時コマンドとして実行されるので、runコマンドの最後に指定する必要はありません。
ブラウザで確認する
ブラウザのアドレスバーに「http://192.168.33.22/」を入力すると、Apatcheのテストページが表示されます。
というようにDockerfileにコンテナの構築手順を記述することができるので、インフラをコードで管理するというよう
なことも実現可能だと思います。
46Copyright © 2014 rocros All Rights Reserved.
参考サイト
Docker公式ドキュメント
http://docs.docker.io/
今回紹介していないコマンドもありますので、ぜひ公式ドキュメントは見ておくのがよいと思います。
Docker入門~Immutable Infrastructureを実現する
https://gihyo.jp/dp/ebook/2014/978-4-7741-6504-2
サイトではなく本ですが、おそらく日本語で最初のDocker本。詳しくコマンドや使い方、
Dockerfileについても書かれています。分量もほどほどで良いです。
Docker入門 (全11回)
http://dotinstall.com/lessons/basic_docker
動画の解説付きで、ほぼほぼこのスライドと同じ内容を学べます。
5分でなんとなーく分かるDocker
http://www.slideshare.net/ohashiyuta/5docker
私の作成したスライドですが、このスライドでさわってみる前に見てもらってもよかったかも。
47Copyright © 2014 rocros All Rights Reserved.
最後に・・・
“Docker is still under heavy development! We don‘t
recommend using it in production yet”
Dockerの公式サイトにおいて、上記のように“まだプロダクション環境で使うのはお勧めしないよ”といっています。
本番環境における運用の最適解というのもまだなく皆さん試行錯誤されている様子。
“but we're getting closer with each release. Please see our
blog post, Getting to Docker 1.0”
現在(2014.05.13) の最新バージョンは0.11ですが近く1.0になりそうなので、今後の動向に期待しましょう。

Dockerをすこーしさわってみる

  • 1.
    Copyright © 2014rocros All Rights Reserved. Dockerをすこーし さわってみる Rocros Casual Talk #7 2014.05.13 Yuta Ohashi
  • 2.
    2Copyright © 2014rocros All Rights Reserved. ゴール ローカルPCでVagrantでホストOSを起動して、 ホストOSのDockerでコンテナを起動する。 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu コンテナ2 Docker image username/centos インターネット
  • 3.
    3Copyright © 2014rocros All Rights Reserved. はじめる前に・・・ 開いておいてください https://gist.github.com/blue-goheimochi/5129e21e09c2fdc224ce
  • 4.
    4Copyright © 2014rocros All Rights Reserved. ローカルPCにVagrantをインストール ローカルPC Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット 【Before】Vagrantインストール前
  • 5.
    5Copyright © 2014rocros All Rights Reserved. ローカルPCにVagrantをインストール Vagrant ローカルPC Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット 【After】Vagrantインストール後
  • 6.
    6Copyright © 2014rocros All Rights Reserved. ローカルPCにVagrantをインストール 公式サイトからOSにあったVagrantをインストールする http://www.vagrantup.com/downloads.html
  • 7.
    7Copyright © 2014rocros All Rights Reserved. ホストOSを起動 Vagrant ローカルPC Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット 【Before】ホストOS起動前
  • 8.
    8Copyright © 2014rocros All Rights Reserved. ホストOSを起動 ホストOS Vagrant ローカルPC Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット 【After】ホストOS起動後
  • 9.
    9Copyright © 2014rocros All Rights Reserved. ホストOSを起動 Macの場合 ● ターミナルを起動する。 ● 下記を入力して「Enter」 Windowsの場合 ● 「windows」ボタン+「R」ボタン ● ファイル名を指定して実行に「cmd」と入力して「OK」をクリック ● 下記を入力して「Enter」 vagrant box add centos64 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box vagrant box add centos64 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
  • 10.
    10Copyright © 2014rocros All Rights Reserved. ホストOSを起動 Macの場合 ● ホームディレクトリに適当なディレクトリを作る(ホームディレクトリじゃなくてもお好きな場所に) Windowsの場合 ● デスクトップに適当なフォルダを作る(デスクトップじゃなくてもお好きな場所に) ● 下記コマンドで、作成したフォルダに移動する cd Desktop¥docker-test mkdir /Users/ユーザー名/docker-test ● 作成したディレクトリに移動する cd /Users/ユーザー名/docker-test
  • 11.
    11Copyright © 2014rocros All Rights Reserved. ホストOSを起動 Macの場合 ● 作成したディレクトリに、下記「Vagrantfile」を配置する https://gist.github.com/blue-goheimochi/1520db0f069fd8ec4b8a Windowsの場合 ● 作成したフォルダに、下記「Vagrantfile」を配置する https://gist.github.com/blue-goheimochi/1520db0f069fd8ec4b8a ※gitがインストールされている環境であれば、git cloneのほうが簡単かもです。 git clone https://gist.github.com/1520db0f069fd8ec4b8a.git .
  • 12.
    12Copyright © 2014rocros All Rights Reserved. ホストOSを起動 Macの場合 ● 下記コマンドを実行してホストOSを起動する Windowsの場合 ● 下記コマンドを実行してホストOSを起動する vagrant up ssh 192.168.33.22 ●ユーザ名: vagrant パスワード: vagrant でログインする ● PuttyなどのSSHクライアントで、192.168.33.22(ポート:22)を指定し、ホストOSにアクセスする。 ● ユーザ名: vagrant パスワード: vagrant でログインする vagrant up ● sshコマンドでホストOSにアクセスする
  • 13.
    13Copyright © 2014rocros All Rights Reserved. Dockerをインストール ホストOS Vagrant ローカルPC Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット 【Before】Dockerインストール前
  • 14.
    14Copyright © 2014rocros All Rights Reserved. Dockerをインストール ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット 【After】Dockerインストール後
  • 15.
    15Copyright © 2014rocros All Rights Reserved. Dockerをインストール Dockerをインストールする sudo yum -y install docker-io sudo service docker start sudo chkconfig docker on ※DockerをEPELリポジトリからインストールする。素のCentOSであれば、手動でEPELリポジトリの追加をする必要が ある。今回使用するVagrantBoxではすでにEPELリポジトリが追加されている。 Dockerのバージョンを確認する sudo docker version ※インストールされるDockerのバージョンは0.9.0。「Last stable version: 0.11.1, please update docker」のメッセージ が表示されるが、現状(2014.05.12現在)EPELリポジトリで提供されるバージョンは0.9.0になります。(ちなみにUbuntu Trustyでも0.9.1) ※各OS別のインストール方法は、 https://www.docker.io/gettingstarted/#h_installation こちらから確認できます。
  • 16.
    16Copyright © 2014rocros All Rights Reserved. Dockerをインストール Dockerの状態を確認する sudo docker info コンテナ数、イメージ数などのDockerの現在の情報が確認できます。
  • 17.
    17Copyright © 2014rocros All Rights Reserved. Docker Imageを取得 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット 【Before】Docker Image取得前
  • 18.
    18Copyright © 2014rocros All Rights Reserved. Docker Imageを取得 【After】Docker Image取得後 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index centos centos fedra ubuntu インターネット
  • 19.
    19Copyright © 2014rocros All Rights Reserved. Docker Imageを取得 Docker Imageを取得する sudo docker pull centos Docker IndexからDocker Imageを取得します。今回は公式のcentosのDocker Imageを取得。 (https://index.docker.io/_/centos/) Docker Imageはpull時に、下記URLのDocker Indexの中のDocker Imageから検索されます。 https://index.docker.io/ こちらから様々なDocker Imageを検索できます。 pull したDocker Imageを確認する sudo docker images TAG名の違う3つのイメージファイルが表示されると思います。(TAG:centos6、latest、6.4) リポジトリ内の特定のイメージのみpullしたい場合には、 sudo docker pull centos:latest のようにリポジトリ名の後ろに「:」でTAG名を指定することで可能です。
  • 20.
    20Copyright © 2014rocros All Rights Reserved. コンテナ1を起動 【Before】コンテナ1起動前 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index centos centos fedra ubuntu インターネット
  • 21.
    21Copyright © 2014rocros All Rights Reserved. コンテナ1を起動 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu インターネット 【After】コンテナ1起動後
  • 22.
    22Copyright © 2014rocros All Rights Reserved. コンテナ1を起動 centosのDocker Imageを元にcontainer1という コンテナを起動しシェルを実行する sudo docker run -i -t -h container1 centos /bin/bash インタラクティブモードで実行する場合 –i と –t のオプション指定が必要となります。-h でホスト名が指定できます。 コンテナの確認をする env Container1のホスト名でコンテナが起動していることが確認できます。 コンテナを終了する exit
  • 23.
    23Copyright © 2014rocros All Rights Reserved. コンテナ1を起動 起動中のコンテナを確認する sudo docker ps すべてのコンテナの状態を確認 sudo docker ps -a コンテナを再実行する sudo docker start <CONTAINER ID> 起動しているコンテナを確認するコマンドですが、この時点で起動しているコンテナは存在しないはず。 -a のオプションをつけることで全てのコンテナを確認できます。 コンテナの起動時にランダムな CONTAINER ID が設定されます。
  • 24.
    24Copyright © 2014rocros All Rights Reserved. コンテナ1を起動 起動中のコンテナを確認する sudo docker ps コンテナにアタッチしてコンテナ内に入る sudo docker attach <CONTAINER ID> Apacheをインストールする yum –y install httpd service httpd start 先ほど再実行した CONTAINER ID のコンテナが起動していることが確認できます。 再度シェルが実行できるようになります。 コンテナを終了する exit
  • 25.
    25Copyright © 2014rocros All Rights Reserved. コンテナ1からDocker Imageを作成する ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu インターネット 【Before】Docker Image作成前
  • 26.
    26Copyright © 2014rocros All Rights Reserved. コンテナ1からDocker Imageを作成する ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu Docker image username/centos インターネット 【Before】Docker Image作成後
  • 27.
    27Copyright © 2014rocros All Rights Reserved. コンテナ1からDocker Imageを作成する コンテナ1からDocker Imageを作成する sudo docker commit <CONTAINER ID> username/centos 作成したDocker Imageを確認する sudo docker images これで先ほどApacheをインストールしたコンテナ1がDocker Imageとして保存されます。 username/centos の名前でDocker Imageが作成されていることが分かります。
  • 28.
    28Copyright © 2014rocros All Rights Reserved. 作成したDocker Imageからコンテナ2を起動 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu Docker image username/centos インターネット 【After】コンテナ2起動前
  • 29.
    29Copyright © 2014rocros All Rights Reserved. 作成したDocker Imageからコンテナ2を起動 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu コンテナ2 Docker image username/centos インターネット 【After】コンテナ2起動後
  • 30.
    30Copyright © 2014rocros All Rights Reserved. 作成したDocker Imageからコンテナ2を起動 バックグラウンドでコンテナ2を起動 sudo docker run -d -p 80:80 -h container2 username/centos /usr/sbin/httpd -D FOREGROUND 起動中のコンテナを確認する sudo docker ps 先ほどとは別のオプションを指定して起動します。 -p はポートフォワーディングのオプションです。<ホストポート>:<コンテナポート>で指定できます。 -d はコンテナがバックグラウンドで動くようにするオプションです。 バックグラウンドでコンテナを動かす場合、何かジョブがフォアグラウンドで動いていないといけないようなので、 httpdがフォアグラウンドで動くようコマンドを指定しています。 コンテナ2が起動している状態が確認できます。 PORTSの部分が「0.0.0.0:80->80/tcp」になっているかと思いますがこれは、 ホストのポート:80 → コンテナ2のポート:80にポートフォワードしていることを示します。
  • 31.
    31Copyright © 2014rocros All Rights Reserved. 作成したDocker Imageからコンテナ2を起動 ブラウザで確認する ブラウザのアドレスバーに「http://192.168.33.22/」を入力すると、Apatcheのテストページが表示されます。
  • 32.
    32Copyright © 2014rocros All Rights Reserved. ゴール達成!! ローカルPCでVagrantでホストOSを起動して、 ホストOSのDockerでコンテナを起動する。 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu コンテナ2 Docker image username/centos インターネット (+コンテナにApacheインストールしてブラウザでアクセスする)
  • 33.
    33Copyright © 2014rocros All Rights Reserved. おさらい
  • 34.
    34Copyright © 2014rocros All Rights Reserved. まっさらな状態 ローカルPC Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット
  • 35.
    35Copyright © 2014rocros All Rights Reserved. ローカルPCにVagrantをインストール Vagrant ローカルPC Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット
  • 36.
    36Copyright © 2014rocros All Rights Reserved. ホストOSを起動 ホストOS Vagrant ローカルPC Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット vagrant up
  • 37.
    37Copyright © 2014rocros All Rights Reserved. Dockerをインストール ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker Index centos fedra ubuntu インターネット yum -y install docker-io
  • 38.
    38Copyright © 2014rocros All Rights Reserved. Docker Imageを取得 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index centos centos fedra ubuntu インターネット sudo docker pull centos
  • 39.
    39Copyright © 2014rocros All Rights Reserved. コンテナ1を起動 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu インターネット sudo docker run -i -t -h container1 centos /bin/bash
  • 40.
    40Copyright © 2014rocros All Rights Reserved. コンテナ1からDocker Imageを作成する ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu Docker image username/centos インターネット sudo docker commit <CONTAINER ID> username/centos
  • 41.
    41Copyright © 2014rocros All Rights Reserved. 作成したDocker Imageからコンテナ2を起動 ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu コンテナ2 Docker image username/centos インターネット sudo docker run -d -p 80:80 -h container2 username/centos /usr/sbin/httpd -D FOREGROUND
  • 42.
    42Copyright © 2014rocros All Rights Reserved. ゴール ホストOS Vagrant ローカルPC Docker Docker image Docker image Docker image Docker image Docker Index コンテナ1 centos centos fedra ubuntu コンテナ2 Docker image username/centos インターネット ローカルPCでVagrantでホストOSを起動して、 ホストOSのDockerでコンテナを起動する。 (+コンテナにApacheインストールしてブラウザでアクセスする)
  • 43.
    43Copyright © 2014rocros All Rights Reserved. その他コマンドの一部 Docker Imageを削除する sudo docker rmi <IMAGE ID> コンテナを削除する sudo docker rm <CONTAINER ID> ダウンロードもしくは自分で作成したDocker Imageを削除します。 コンテナをコンテナIDを指定して削除します。 起動中のコンテナを停止する sudo docker kill <CONTAINER ID> 起動中のコンテナをコンテナIDを指定して停止します。
  • 44.
    44Copyright © 2014rocros All Rights Reserved. Dockerfileについて Dockerfileとは? # ベースとなるDocker Imageの指定 FROM centos # 作成者 MAINTAINER username # yumでhttpをインストール RUN yum -y install httpd # ポート開放の設定 EXPOSE 80 # docker run 時に実行するコマンドを指定 CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] Docker Imageを作成するための定義がかかれたファイルで、 今回を例にすると、「コンテナにApacheをインストールして、そのコンテナをDocker Imageにする」の工程を、 コマンド1つで実行できる。 Dcokerfileの例
  • 45.
    45Copyright © 2014rocros All Rights Reserved. Dockerfileについて DockerfileからDocker Imageをビルド -t のオプションで <REPOSITORY>:<TAG>を指定できます。 最後の . (ピリオド)の部分はDockerfileの存在するパスを指定しますので忘れずDockerfileのパスを指定してください。 sudo docker build -t username:centos . 作成したDocker Imageを起動 sudo docker run -d –p 80:80 username/centos Dockerfileで指定したCMDが起動時コマンドとして実行されるので、runコマンドの最後に指定する必要はありません。 ブラウザで確認する ブラウザのアドレスバーに「http://192.168.33.22/」を入力すると、Apatcheのテストページが表示されます。 というようにDockerfileにコンテナの構築手順を記述することができるので、インフラをコードで管理するというよう なことも実現可能だと思います。
  • 46.
    46Copyright © 2014rocros All Rights Reserved. 参考サイト Docker公式ドキュメント http://docs.docker.io/ 今回紹介していないコマンドもありますので、ぜひ公式ドキュメントは見ておくのがよいと思います。 Docker入門~Immutable Infrastructureを実現する https://gihyo.jp/dp/ebook/2014/978-4-7741-6504-2 サイトではなく本ですが、おそらく日本語で最初のDocker本。詳しくコマンドや使い方、 Dockerfileについても書かれています。分量もほどほどで良いです。 Docker入門 (全11回) http://dotinstall.com/lessons/basic_docker 動画の解説付きで、ほぼほぼこのスライドと同じ内容を学べます。 5分でなんとなーく分かるDocker http://www.slideshare.net/ohashiyuta/5docker 私の作成したスライドですが、このスライドでさわってみる前に見てもらってもよかったかも。
  • 47.
    47Copyright © 2014rocros All Rights Reserved. 最後に・・・ “Docker is still under heavy development! We don‘t recommend using it in production yet” Dockerの公式サイトにおいて、上記のように“まだプロダクション環境で使うのはお勧めしないよ”といっています。 本番環境における運用の最適解というのもまだなく皆さん試行錯誤されている様子。 “but we're getting closer with each release. Please see our blog post, Getting to Docker 1.0” 現在(2014.05.13) の最新バージョンは0.11ですが近く1.0になりそうなので、今後の動向に期待しましょう。