Upload
hamajitakahisa
View
259
Download
0
Embed Size (px)
Citation preview
Infrastructure.nagoya
2014/12/06 Vol.1
Dockerって何ですか?
自己紹介
● はまじ (@HmjKRS)○ 来栖川電算 社内ニート
○ 元インフラ担当 → 認識系エンジニア見習い
○ Chef, Vagrant, docker を広めようとした人
○ 変なことが好き
自己紹介
● はまじ (@HmjKRS)○ 来栖川電算 社内ニート
○ 元インフラ担当 → 認識系エンジニア見習い
○ Chef, Vagrant, docker を広めようとした人
○ 変なことが好き
Jenkins 用の docker プラグインを書いて、docker をつかった CI 環境を構築・運用してました。
今日の目的
docker こわくない。
もっと身近に感じてほしい。
今日やること
● CentOS で docker を触ってみる
● docker でテトリスする
● docker で使い捨てファイルサーバーを立てる
● fig でコンテナを管理する
docker とは
ソフトウェアとしての docker
● コンテナ型仮想化
ハイパーバイザ型と比較して軽量・高速
● Infrastructure as Code のサポート
Dockerfile からイメージを再現できる
● イメージの差分管理
git のようにイメージを管理
イメージはリポジトリに commit して共有できる
docker の目指す世界
アプリケーションの次世代プラットフォーム
● docker さえ動けばあらゆるアプリケーションが動く
すべてのアプリケーションはコンテナ上で動く
ホストマシンの環境には依存しない
● アプリケーションを配布する時代の終幕
docker イメージを配布する時代へ
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 では起動できなくなった。
CentOS 7 系
■ docker インストール
# yum install docker# usermod -G docker vagrant# systemctl start docker.service# systemctl enable docker.service
以前は /usr/lib/systemd/system/docker.service にバグがあったが、現在は解消されている
インストールしたらやること
docker をインストールしたら
まず最初に↓のコマンドを実行すると幸せになれます。
$ docker run -it --rm supertest2014/nyan
(*´Д`)
本題
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
コンテナを起動してみよう
● ↓ のコマンドを実行
$ docker run -it --rm hamaji/bastet
● テトリスできるよ
カーソルキー:移動スペースキー:回転
インベーダーも
“bastet” の部分を “ninvaders” に変えると
インベーダーもこっそり遊べる
docker をつかってファイルサーバーを立てる
コマンドひとつでカレントディレクトリをSamba で公開できたら便利だよね
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
コンテナを起動してみよう
● 公開したいディレクトリに移動して ↓ のコマンドを実行
$ docker run -p 139:139 -p 445:445 \-v $(pwd):/var/samba -d --name samba \hamaji/samba
● Web ブラウザで ↓ にアクセス
smb://<ホストマシンのIPアドレス>/public
● 満足したら ↓ のコマンドで終了
$ docker kill samba
Web サーバーも簡単に
同じような方法でカレントディレクトリを
コマンドひとつで http で公開することもできる
fig をつかってコンテナを管理しよう
docker run コマンドって無駄に長いし、ポートやマウント元は固定化したいよね
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 があれば、あとはコマンドたたくだけ。
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
fig.yml を書こう
● Samba コンテナの fig.yml$ cat ./samba/fig.ymlsamba: build: ./ ports: - 139:139 - 445:445 volumes: - /vagrant:/var/samba
fig でコンテナを制御しよう
● コンテナの生成と起動
$ fig up -d
● あとは --help で$ fig --help
おわり