28
Infrastructure.nagoya 2014/12/06 Vol.1 Dockerって何ですか?

Infrastructure.nagoya ~Dockerって何ですか?~

Embed Size (px)

Citation preview

Page 1: Infrastructure.nagoya ~Dockerって何ですか?~

Infrastructure.nagoya

2014/12/06 Vol.1

Dockerって何ですか?

Page 2: Infrastructure.nagoya ~Dockerって何ですか?~

自己紹介

● はまじ (@HmjKRS)○ 来栖川電算 社内ニート

○ 元インフラ担当 → 認識系エンジニア見習い

○ Chef, Vagrant, docker を広めようとした人

○ 変なことが好き

Page 3: Infrastructure.nagoya ~Dockerって何ですか?~

自己紹介

● はまじ (@HmjKRS)○ 来栖川電算 社内ニート

○ 元インフラ担当 → 認識系エンジニア見習い

○ Chef, Vagrant, docker を広めようとした人

○ 変なことが好き

Jenkins 用の docker プラグインを書いて、docker をつかった CI 環境を構築・運用してました。

Page 4: Infrastructure.nagoya ~Dockerって何ですか?~

今日の目的

docker こわくない。

もっと身近に感じてほしい。

Page 5: Infrastructure.nagoya ~Dockerって何ですか?~

今日やること

● CentOS で docker を触ってみる

● docker でテトリスする

● docker で使い捨てファイルサーバーを立てる

● fig でコンテナを管理する

Page 6: Infrastructure.nagoya ~Dockerって何ですか?~

docker とは

Page 7: Infrastructure.nagoya ~Dockerって何ですか?~

ソフトウェアとしての docker

● コンテナ型仮想化

ハイパーバイザ型と比較して軽量・高速

● Infrastructure as Code のサポート

Dockerfile からイメージを再現できる

● イメージの差分管理

git のようにイメージを管理

イメージはリポジトリに commit して共有できる

Page 8: Infrastructure.nagoya ~Dockerって何ですか?~

docker の目指す世界

アプリケーションの次世代プラットフォーム

● docker さえ動けばあらゆるアプリケーションが動く

すべてのアプリケーションはコンテナ上で動く

ホストマシンの環境には依存しない

● アプリケーションを配布する時代の終幕

docker イメージを配布する時代へ

Page 9: Infrastructure.nagoya ~Dockerって何ですか?~

docker インストール

Page 10: Infrastructure.nagoya ~Dockerって何ですか?~

CentOS 6 系

■ kernel 3.8 以降に更新

# yum -y install bc# curl -L -O https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.bz2# tar xfj linux-3.10.tar.bz2# cd linux-3.10# cp /boot/config-$(uname -r) .config && yes "" | make oldconfig# make && make modules_install && make install# sed -ie 's/^default=1/default=0/' /etc/grub.conf

■ docker インストール

# sed -ie 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config# yum -y install \ http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm# yum -y install docker-io lxc# sed -ie 's/^other_args=/other_args="--exec-driver lxc --selinux-enabled"/' \ /etc/sysconfig/docker# usermod -G docker vagrant# service docker start# chkconfig docker on

docker 1.3 から古い kernel では起動できなくなった。

Page 11: Infrastructure.nagoya ~Dockerって何ですか?~

CentOS 7 系

■ docker インストール

# yum install docker# usermod -G docker vagrant# systemctl start docker.service# systemctl enable docker.service

以前は /usr/lib/systemd/system/docker.service にバグがあったが、現在は解消されている

Page 12: Infrastructure.nagoya ~Dockerって何ですか?~

インストールしたらやること

docker をインストールしたら

まず最初に↓のコマンドを実行すると幸せになれます。

$ docker run -it --rm supertest2014/nyan

Page 13: Infrastructure.nagoya ~Dockerって何ですか?~

(*´Д`)

Page 14: Infrastructure.nagoya ~Dockerって何ですか?~

本題

Page 15: Infrastructure.nagoya ~Dockerって何ですか?~

docker をつかってこっそりテトリスする

上司にバレないように痕跡を残さずに遊ぼう

Page 16: Infrastructure.nagoya ~Dockerって何ですか?~

テトリスができるイメージをつくろう

● 使用する Dockerfile$ cd /vagrant

$ cat ./bastet/DockerfileFROM ubuntu:14.10RUN echo \ 'deb http://us.archive.ubuntu.com/ubuntu precise main universe' \ >> /etc/apt/sources.listRUN apt-get updateRUN apt-get install -y bastetENTRYPOINT /usr/games/bastet

● イメージのビルド

$ docker build -t hamaji/bastet ./bastet

Page 17: Infrastructure.nagoya ~Dockerって何ですか?~

コンテナを起動してみよう

● ↓ のコマンドを実行

$ docker run -it --rm hamaji/bastet

● テトリスできるよ

カーソルキー:移動スペースキー:回転

Page 18: Infrastructure.nagoya ~Dockerって何ですか?~

インベーダーも

“bastet” の部分を “ninvaders” に変えると

インベーダーもこっそり遊べる

Page 19: Infrastructure.nagoya ~Dockerって何ですか?~

docker をつかってファイルサーバーを立てる

コマンドひとつでカレントディレクトリをSamba で公開できたら便利だよね

Page 20: Infrastructure.nagoya ~Dockerって何ですか?~

Samba を立てるイメージをつくろう

● 使用する Dockerfile$ cat ./samba/DockerfileFROM centos:centos6RUN yum -y install sambaRUN mkdir -p /var/sambaADD smb.conf /etc/samba/smb.confEXPOSE 139 445ENTRYPOINT smbd --daemon --foreground --log-stdout

● イメージのビルド

$ docker build -t hamaji/samba ./samba

Page 21: Infrastructure.nagoya ~Dockerって何ですか?~

コンテナを起動してみよう

● 公開したいディレクトリに移動して ↓ のコマンドを実行

$ docker run -p 139:139 -p 445:445 \-v $(pwd):/var/samba -d --name samba \hamaji/samba

● Web ブラウザで ↓ にアクセス

smb://<ホストマシンのIPアドレス>/public

● 満足したら ↓ のコマンドで終了

$ docker kill samba

Page 22: Infrastructure.nagoya ~Dockerって何ですか?~

Web サーバーも簡単に

同じような方法でカレントディレクトリを

コマンドひとつで http で公開することもできる

Page 23: Infrastructure.nagoya ~Dockerって何ですか?~

fig をつかってコンテナを管理しよう

docker run コマンドって無駄に長いし、ポートやマウント元は固定化したいよね

Page 24: Infrastructure.nagoya ~Dockerって何ですか?~

fig の何がうれしいか

● 素の docker コマンドは長いし、間違えやすい

$ docker run -p 139:139 -p 445:445 -v $(pwd):/var/samba -d --name samba hamaji/samba

どのコンテナにどのポートをバインドするか、

どのディレクトリをマウントするかは手順書で管理するしかない。

● fig ならコンテナの設定をファイルに書いておける

$ fig up

fig.yml にポートやマウントするディレクトリを書いておける。

fig.yml があれば、あとはコマンドたたくだけ。

Page 25: Infrastructure.nagoya ~Dockerって何ですか?~

fig のインストール

■ CentOS 6 系# yum -y install \ http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm# yum -y install python-pip# pip install -U fig

■ CentOS 7 系# yum install epel-release# yum -y install python-pip# pip install -U fig

Page 26: Infrastructure.nagoya ~Dockerって何ですか?~

fig.yml を書こう

● Samba コンテナの fig.yml$ cat ./samba/fig.ymlsamba: build: ./ ports: - 139:139 - 445:445 volumes: - /vagrant:/var/samba

Page 27: Infrastructure.nagoya ~Dockerって何ですか?~

fig でコンテナを制御しよう

● コンテナの生成と起動

$ fig up -d

● あとは --help で$ fig --help

Page 28: Infrastructure.nagoya ~Dockerって何ですか?~

おわり