Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【eLV勉強会】 Dockerを触ってみよう
Search
横田真俊(wslash)
June 16, 2016
Technology
1
310
【eLV勉強会】 Dockerを触ってみよう
6月16日のに行われる「【eLV勉強会】 Dockerを触ってみよう」の資料となります。
横田真俊(wslash)
June 16, 2016
Tweet
Share
More Decks by 横田真俊(wslash)
See All by 横田真俊(wslash)
「ssmjpで喋ったことのない私が、ssmjpでプレゼンデビューするためのテクニックを話す」
masatoshi
1
2.7k
分散SNSの歴史を雑にしゃべる
masatoshi
2
1.3k
さくらインターネットとマストドン
masatoshi
2
2.2k
マストドンを「さくらのクラウド」で素早く立ち上げる
masatoshi
0
610
さくらインターネットのIPv6対応状況について(Ver 九州インフラ交流勉強会(Kixs) Vol.004」)
masatoshi
0
620
「はじめて触るDocker入門」
masatoshi
1
480
Dockerに触ってみよう
masatoshi
2
3.8k
プレゼン初心者に ありがちな アンチパターン 野望篇
masatoshi
2
190
さくらインターネットのサービスを例にしたクラウドサービスの作り方
masatoshi
0
540
Other Decks in Technology
See All in Technology
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
120
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
160
Platform Engineering for Software Developers and Architects
syntasso
1
510
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
750
AIチャットボット開発への生成AI活用
ryomrt
0
170
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
180
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.3k
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
220
AGIについてChatGPTに聞いてみた
blueb
0
130
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
For a Future-Friendly Web
brad_frost
175
9.4k
Code Review Best Practice
trishagee
64
17k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Typedesign – Prime Four
hannesfritz
40
2.4k
Designing for humans not robots
tammielis
250
25k
Gamification - CAS2011
davidbonilla
80
5k
Embracing the Ebb and Flow
colly
84
4.5k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Building an army of robots
kneath
302
43k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Transcript
(C)Copyright 1996-2014 SAKURA Internet Inc. さくらインターネット 横田真俊(@wslash) 2016/06/16
2 氏名 横田真俊(@Wslash) 「さくらのクラウド」の企画担当 兼 エバンジェリストをやっております 年に50回程度の講演・ハンズオンを 行っております 左のアイコンで、ツイッターを やっていますのでお気軽に
お声がけください
3 Amazon EC2/S3 入門 今は、さくらのクラウド企画担当 をやっていますが、昔はこんな本 を書いていました
4 ツイッターやFacebookなど ソーシャルメディアの本 を5冊ほど書いてます
5 インフラエンジニア向けの 本も書きました。 6月24日に発売されます
Dockerに触っていただき どんなものなのか体験 していただきます 6
(C)Copyright 1996-2014 SAKURA Internet Inc.
8 ホストOSの上で「仮想化ソフト」を動かすタイプ ホストOSとアプリを共存できるのでPCからの個人利用の形 で多いが、ホストの負荷が大きい ホスト形仮想化ソフト (VirtualBOXなど) OS (1) OS(2) OS(3)
アプリ アプリ アプリ ホストOS(Windows/Linuxなど) アプリ
9 ホストOSの代わりに「ハイパーバイザー」が仮想サーバを 制御する。ホストサーバ全体を仮想化で利用するため、ホス トOSを経由しないためホストOS型よりレスポンスが良い ハイパーバイザー (VMWareなど) OS (1) OS(2) OS(3)
アプリ アプリ アプリ
10 OSの代わりに各コンテナがアプリを稼動させます。今まで より一番ホストマシンの処理負荷が低い コンテナ管理ソフトウェア (Dockerなど) コンテナ(1) コンテナ(2) コンテナ(3) アプリ アプリ
アプリ ホストOS(Linux) アプリ
• 処理速度が速い → OSやハードウェアを仮想化していないためオーバーヘッド が少なく処理能力が早い • メモリやディスクの消費量をおさえられる → それぞれにカーネルを持たないためメモリ/ディスクの 消費量をおさえられる。
• ポータビリティ → 環境を意識せず使える 11
12 何がうれしいのか?
▪検証・使い捨て環境がすぐに使える → 「低コスト」かつ「コマンド1発」で利用できる。 ▪環境の統一化 → 開発・運用・ステージングと色々な「環境」を用意せずに コンテナに統一できる。 ▪クラウド時代のバズワードが手軽に実現 → イミュータブル、オートスケーリング
etc… 13
(C)Copyright 1996-2014 SAKURA Internet Inc.
15 「コントロールパネル」にログインするには、Webサイトの上部にある 「コントロールパネルログイン」をクリックしてください
16 「コントロールパネル」にログインしたら「さくらのクラウドユーザ」 としてログインの箇所にある「ユーザコード」「会員ID」 「パスワード」を入力してください
17 無事にログインできたら、このような画面が表示されますので 「さくらのクラウド(IaaS)」をクリックしてください
18 さくらのクラウド(IaaS) をクリックすると このような画面が表示されます
(C)Copyright 1996-2014 SAKURA Internet Inc.
20 ・まずは、CPU 1ギガ、メモリ 1GB、ディスク SSD 20GB、NIC 1のもので OSはCent OS 7.2の物を作成してみましょう
21 ・メインメニューより「サーバ」をクリック ・その後「追加」をクリックすると「サーバ作成画面」に移動します
22 まず「ホスト名」を入力し、次にサーバプランを選択します。今回はホスト 名は適当に入力し、サーバプランは「1GB/1仮想コア」を選択します。
23 ボタンにないプランの場合は「全てのアイテムから選択」を選択すると アイテム一覧が表示され、そこから選択できます
24 次に「ディスクプラン」を選択します。今回は「20GB SSDプラン」を選択 します。上記のプランにない物を利用する場合は、サーバと同じように「全 てのアイテムから選択」を選択してください。
25 ディスクイメージを選択します、利用したい「OS」を選択してください。 今回は「CentOS 7.2」を利用します。
26 接続のネットワークに「インターネット」を選択し「管理ユーザのパスワー ド」でrootのパスワードを入力します。
27 全ての入力項目を入力し終わった後「作成」をクリックします
28 「操作確認」のダイアログが表示されます。問題が無ければ「作成」をク リックします。
29 「作成」をクリックすると上記のダイアログが出てきます。 ステータスが全て成功になるとサーバが作成されます。
30 サーバの作成が完了すると、画面の右下にダイアログが表示されます。これ をクリックしてください。
31 ダイアログをクリックすると、サーバ情報が表示されます。
(C)Copyright 1996-2014 SAKURA Internet Inc.
33 ブラウザ内でサーバの操作ができます。作成したサーバの 「コンソール」をクリックしてください。
34 画面中央をクリックすると、文字入力ができるようになりま す。rootと先ほど入力したパスワードを入れてください
35 「ペースト」を選択すると、文字列のペーストも可能です
36 IPアドレスでSSH接続できるので わかる方はそれで接続してください
(C)Copyright 1996-2014 SAKURA Internet Inc.
38 今回はCentOS 7系でインストールします 今日の資料は別途、公開いたします 2万円クーポンを配るのでそれで復習できます
39 「curl -sSL https://get.docker.com/ | sh」とコマンドを入れるとDocker のインストールがはじまります。 curl -sSL https://get.docker.com/
| sh
40 「systemctl start docker」とコマンドを入れるとDockerが動きます systemctl start docker
41 「docker version」と入力してDockerのバージョンが表示されれば、 Dockerが正常にインストールされています。 docker version
42 コンテナを起動する「docker run」
▪docker run コマンド → 指定したイメージのコンテナを起動する ▪構文 → docker run イメージ
[オプション][コマンド][引数] ▪オプション → -d バックグランドで実行 → -i コンテナの標準入力を開く → -t ttyを確保する → -p ポートフォワード 43
44 ちゃんとDockerが動くか「hello world」を動かしてみたいと思います。 上記のコマンドを入力してください。 docker run hello-world
45 「hello world」の入力が終わると「docker run –it ubuntu bash」を試し てみろ、と言われているので、これを入力してみましょう。
46 Dockerの上でUbuntuを入れて、コマンド入力ができるようにしてみる。 「-it」で、コンテナの中で入力できるようになる。 docker run -it ubuntu bash
Dockerを利用することでCentOS上でubuntuを利 用することができます。 ただし、このubuntuには、ほとんどコマンドが 入っていません。 例えば「curl ifconfig.me/ip」を叩くと、なにも 表示されないと表示されます。 47
48
49 「apt-get update」を叩いた後「apt-get install curl」で「curl」をインス トールしてください。インストール中、色々と聞かれますがとりあえずyを 押して下さい。 apt-get update apt-get
install curl (1) (2)
50 「curl ifconfig.me/ip」でIPを表示してみる curl ifconfig.me/ip
51 「exit」をコマンドを叩くとコンテナから出て、このコンテナが止る。 コンテナが止ると今までやった作業(apt-getとか)は保存されない。 exit
52 再度コンテナを起動して「curl ifconfig.me/ip」を入力してください。これ を入力しても、先ほどのように実行されないはずです。 docker run -it ubuntu bash curl
ifconfig.me/ip (1) (2)
• exitするだけで、今までの動作が消えてしまう ので、このままだと使えないです。 • 次はバックグランドでDockerのコンテナを利用 する方法について解説します。 53
54 バッググランドでコンテナを動かす
55 上記のコンテナを起動すると、時刻を1秒ごとに表示するコンテナが表示さ れる。しばらく動かしてみて「ctrl + C」で止めてください。 docker run jpetazzo/clock
56 コンテナをバックグランドで動かすにはrunコマンドに「-d」をつける。 上記のコマンドを入力すると、先ほどのように時刻は表示されずバックグラ ンドで動いており、ログは記録されている。 docker run -d jpetazzo/clock
57 docker psでコンテナを確認する
▪docker ps コマンド → コンテナIDを確認するためコマンド。これでわかるものは ・コンテナのID ・コンテナがどのイメージから作られたのか? ・コンテナが動いてどのぐらい経過したのか? ▪オプション →
-l 直近(latest)のコンテナの情報を表示 → -q コンテナのショートIDのみ表示 → -a 停止しているコンテナも含め全て(all)表示 58
59 docker psを入力すると、現在動いているコンテナの情報が見られる docker ps
60 「docker ps –l」で直近に操作したコンテナを表示し「docker ps -q」でコ ンテナのショートIDが表示される。 docker ps -l
docker ps -q (1) (2)
61 docker logsでコンテナ のログを確認する
▪docker logs コマンド → コンテナの標準出力の内容をコンテナ外から確認する ▪オプション → -tail ログの最後数行が見られるようになる →
-follow リアルタイムでログが確認できる。 62
63 「docker logs(コンテナのID)」を入力すると、コンテナの標準出力が見 られる。先ほどバックグランドで動かした「 jpetazzo/clock 」のコンテナIDを 入力してみましょう。 docker logs (コンテナのID)
64 「-- tail」オプションを使うことで、ログの最後数行が見られるようになる。 例えば、(1)のコマンドはログの最後3行を出すコマンドとなる。 docker logs --tail 3 (コンテナのID)
65 docker logs --tail 1 --follow (コンテナのID) Unixコマンドのtail -fのようにfollowオプションをつけることでリアルタイ ムでログを確認することができる。上記のコマンドを入力するとリアルタイ
ムでログが表示される。止めるには「Ctrl + C」で
66 docker kill、docker stopで コンテナを止める
67 「-d」で動作したコンテナを止めるにはkillかstopを使う。今回はkillコマン ドで、先ほどのコンテナを止めてください。 docker kill (コンテナのID) docker stop (コンテナのID) (1)
(2)
68 「docker ps」で先ほど止めたコンテナのIDが無いことを確認してください 「docker ps –a」で止めたコンテナも確認できます。 docker ps docker ps
-a (1) (2)
(C)Copyright 1996-2014 SAKURA Internet Inc.
70 これだけではつまらないので アプリを入れてみましょう
71 「Ghost」は最近、人気が出ているNode.js製の軽量ブログエンジンです。 今回はDockerを利用して、コマンド1発でインストールします。
• Node.jsとnpm • ApacheとかのWebサーバ • その他、色々 72 「Ghost」をインストールして利用するには上記のような物を色々とインス トールする必要があり面倒です。
73 Ghostを80番ポートで利用できるようにします。元々Ghostは2368番ポート で動いているので80番ポートとマッピングさせます。 docker run -p 80:2368 -d ghost
74 インストールが終わったら「(IPアドレス)」をブラウザで入力してください。 上記のような「画面」が表示されます。「(IPアドレス)/admin」でGhostの セットができます。
75 起動を確認したら、このコンテナを止めてみましょう。コンテナの止め方は 「docker stop (コンテナのID)」で止りますので「docker ps」でコンテナ IDを調べます。 docker ps
76 「docker ps」を入力して「CONTANER ID」を確認する。
77 「docker stop (コンテナのID)」を入力すると、ghostのコンテナが止りま す。(先ほどの例だと07a4e04f6418となります。) docker stop (CONTANER ID)
(C)Copyright 1996-2014 SAKURA Internet Inc.
79 WordPressとMy SQLのコンテナを つなぎ、WordPressを動かす
80 上記のコマンドを入力すると、色々とダウンロードがはじまる。 docker run wordpress
81 エラーが出てWordPressが起動できない、どうやらMySQLが必要な様子。 というわけで、MySQLのコンテナを持ってくる。
82 「docker pull [イメージ名]」でコンテナのダウンロードがはじまります。 ちなみに「docker run [イメージ名]」をした時にローカルにコンテナイメー ジがないと自動的にダウンロードされます docker pull
mysql
83 わかりやすいように –eを利用することでMySQLのパスワードの設定が可能 となります。(パスワード)には、任意のパスワードを入れてください docker run --name mysql -e MYSQL_ROOT_PASSWORD=(パスワード)
-d mysql
84 上記のコマンドを入力するとWordPressが立ち上がります。「-- link」は、- -link <連携したいコンテナ名>:<エイリアス名>オプションで新しいコンテ ナを起動すると,そのコンテナ内で連携したいコンテナのポート番号やIPを 環境変数として利用できるという機能です docker run --name
wordpress --link mysql:mysql -p 80:80 wordpress
85 インストールに成功するとこんな画面が出てきます。
86
87 「-d」を指定していないので「ctrl + c」を入力すると、このコンテナ自体 も停止してしまいます。 それでは、次はバッグランドでWordPressを起動してみましょう。 ただし、同じ名前のコンテナ(-- nemae以下)は作れないので、名前を変え てみましょう。
88 上記のコマンドを入力するとWordPressが起動します。起動するのを確認し たら、docker killで落としてみましょう。 docker run --name wordpress2 -d --link
mysql:mysql -p 80:80 wordpress
(C)Copyright 1996-2014 SAKURA Internet Inc.
・「Docker run」をコマンドを叩くとDocker イ メージからDocker コンテナが作られる ・Dockerイメージは読み込みのみ可能(read- only)。変更はできない。 ・Dockerコンテナは、読み書きができるファイル システム 90
91 本日はDocker fileからDockerイメージを作る「docker build」を試します ・docker commit → コンテナからDocker イメージを作る。 ・docker
build → Docker fileからDockerイメージを作る。 ・docker import → Base imageからDockerイメージをつくる。
92 このコマンドを入力すると、過去に利用したDockerイメージが表示されます docker images
93 Dockerfileを利用して、 Dockerイメージを作る。
・DockerfileはDockerイメージを作るためのレシ ピのようなものです。 ・ Dockerfileは作成するDockerイメージの内容を テキスト形式で記述します。 ・作成したテキストファイルはdocker buildコマ ンドで読み込んでDockerイメージの作成を実行し ます。 94
95 Dockerfileをvimで書いてみます「myimages」というフォルダを作ってvim でDockerfileという名前のファイルを作製します。 mkdir myimage cd myimage (1) (2) vim
Dockerfile (2)
96 「a」を押して入力モード上記の三行を入力する。入力が終わったら、Escで コマンドモードに戻った後「:wq」で保存する。 FROM ubuntu RUN apt-get update RUN apt-get
install -y wget
▪docker build コマンド → DockerfileからDockerイメージを作る ▪構文 docker build –t <Dockerイメージ名>:<タグ名><Dockerfile
を配置するディリクトリ> 97
98 dockerビルドコマンドを入力して、Dockerイメージを作成してください。 docker build -t myimage .
99 Successfully built <イメージID>が出れば、イメージの作成成功
100 作成したイメージは上記のコマンドから実行できます。 docker run -it myimage bash
101 Docker Compose
102 Docker Composeは、複数のコンテナか ら構成するサービスを従来よりも簡単に 構築できるツールです。 従来はコンテナを作成するには、いちい ち「docker run」しなければならなかっ たのが、コマンド1発で複数のコンテナ を利用したサービスを構築できます。
103 Docker Composeを利用して Zabbix 3.0の環境を構築する
104 上記のコマンドを入力して、Docker Composeのバイナリをセットする curl -L https://github.com/docker/compose/releases/down load/1.6.2/docker-compose-`uname -s`-`uname -m` >
/usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
105 「docker-compose version」を入力すると、Docker composeのバージョ ンが表示される、正しくインストールされれば、このコマンドでバージョン 情報が表示される。 docker-compose version
106 本来であれば、作業用のディレクトリの中に「docker-compose.yaml」を 用意する必要があるのですが、今回は事前に私の方で作成したので、そちら をクローンしてください。クローンが終わったら「zabbix3」に移動します。 git clone https://github.com/wslash/zabbix3.git cd zabbix3
107 先ほど作成したディレクトリ「zabbix3」の中で「docker-compose pull」 を入力。Zabbixに必要なイメージをダウンロードします。 docker-compose pull
108 エラーが出ていなければ「docker images」を入力して「zabbix-3.0」と 「zabbix-db-mariadb」のイメージが取得できているか確認をする。 docker images
109 エラーが出ていなければ「docker images」を入力して「zabbix-3.0」と 「zabbix-db-mariadb」のイメージが取得できているか確認をする。
110 イメージを取得できていれば「docker-compose up -d」を入力してZabbix 起動に必要な複数のコンテナを立ち上げます。 docker-compose up -d
111 「docker-compose up -d」でコンテナを立ち上げた後「docker ps」で、 正常に動作しているか確認する。 docker ps
112 正常に動作していれば、ブラウザにサーバのIPアドレスを入力すれば、Zabbix のロ グイン画面が表示されます。ID: Admin 、 Password: zabbix でログインした後、パス ワードを変更してください。
DockerとDocker Composeを利用すると、 すぐに検証環境が利用できて便利 113
114 前佛さんがQiitaに書かれている「Zabbix 3.0をDocker Composeで一度に実行する方 法」が詳しいので、そちらもご確認ください。 http://qiita.com/zembutsu/items/686b99be90d72688aee8
ご静聴ありがとうございました。 「さくらのクラウド 2万円クーポン」を配布いたします。 今日の復習にご利用ください 115