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
Dockerを触ってみよう ~初心者向けDockerハンズオン~
Search
横田真俊(wslash)
August 09, 2016
Technology
2
330
Dockerを触ってみよう ~初心者向けDockerハンズオン~
2016-08-10に行われた初心者向けDocker資料です。
横田真俊(wslash)
August 09, 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
620
さくらインターネットのIPv6対応状況について(Ver 九州インフラ交流勉強会(Kixs) Vol.004」)
masatoshi
0
620
「はじめて触るDocker入門」
masatoshi
1
490
Dockerに触ってみよう
masatoshi
2
3.8k
プレゼン初心者に ありがちな アンチパターン 野望篇
masatoshi
2
190
さくらインターネットのサービスを例にしたクラウドサービスの作り方
masatoshi
0
550
Other Decks in Technology
See All in Technology
UI State設計とテスト方針
rmakiyama
2
620
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
490
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
210
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
270
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
17
4.6k
Turing × atmaCup #18 - 1st Place Solution
hakubishin3
0
490
複雑性の高いオブジェクト編集に向き合う: プラガブルなReactフォーム設計
righttouch
PRO
0
120
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
32k
Featured
See All Featured
Making Projects Easy
brettharned
116
5.9k
KATA
mclloyd
29
14k
Producing Creativity
orderedlist
PRO
341
39k
Gamification - CAS2011
davidbonilla
80
5.1k
Why Our Code Smells
bkeepers
PRO
335
57k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Automating Front-end Workflow
addyosmani
1366
200k
Designing for humans not robots
tammielis
250
25k
Agile that works and the tools we love
rasmusluckow
328
21k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Transcript
クラウド開発室 横田真俊(@Wslash) さくらインターネット株式会社 初心者向けDockerハンズオン Dockerを触ってみよう! 2016/08/10
全体の流れ •「さくらのクラウド」のご紹介 •「さくらのクラウド」を選ぶポイント •「さくらのクラウド」のアーキテクチャ •最近の主な機能アップデート •新機能リリース情報 •デモ 2
自己紹介 氏名 横田真俊(@Wslash) 「さくらのインターネット」の エバンジェリスト 兼 さくらのクラウド企画担当です。 年に50回ほどのセミナーやハンズオンなどを担当しています。 左のアイコンで、ツイッターをやっていますので お気軽にお声がけください
3
昔こんな本を書いていました Amazon EC2/S3 入門 今は「さくらのクラウド」企画担当 ですが、昔はこんな本を書いていました。 4
他にもこんな本を書いております ツイッターやFacebookなど ソーシャルメディアの本 を5冊ほど書いてます。 5
他にもこんな本を書いております インフラエンジニア向けの 本も書きました。 6
Dockerに触れることで コンテナがどのようなものか 体験していただきます 7
Dockerコンテナの 何がすごいのか? 8
今までの仮想化(1) 「ホストOS仮想型」 9 ホストOSの上で「仮想化ソフト」を動かすタイプ ホストOSとアプリを共存できるのでPCからの個人利用の形 で多いが、ホストの負荷が大きい ホスト形仮想化ソフト (VirtualBOXなど) OS (1)
OS(2) OS(3) アプリ アプリ アプリ ホストOS(Windows/Linuxなど) アプリ
今までの仮想化(2) 「ハイパーバイザー型」 10 ホストOSの代わりに「ハイパーバイザー」が仮想サーバを 制御する。ホストサーバ全体を仮想化で利用するため、ホス トOSを経由しないためホストOS型よりレスポンスが良い ハイパーバイザー (VMWareなど) OS (1)
OS(2) OS(3) アプリ アプリ アプリ
「コンテナ」 11 OSの代わりに各コンテナがアプリを稼動させます。今まで より一番ホストマシンの処理負荷が低い コンテナ管理ソフトウェア (Dockerなど) コンテナ(1) コンテナ(2) コンテナ(3) アプリ
アプリ アプリ ホストOS(Linux) アプリ
よく言われるDocker(コンテナ)のメリット •処理速度が速い → OSやハードウェアを仮想化していないため オーバーヘッドが少なく処理能力が高い •メモリやディスクの消費量をおさえられる → それぞれにカーネルを持たないため メモリ/ディスクの消費量をおさえられる。 •ポータビリティ
→ 環境を意識せず使える 12
13 何がうれしいのか?
Docker(メリット) ▪検証・使い捨て環境がすぐに使える → 「低コスト」かつ「コマンド1発」で利用できる。 ▪環境の統一化 → 開発・運用・ステージングと色々な「環境」を 用意せずにコンテナに統一できる。 ▪クラウド時代のバズワードが手軽に実現 →
イミュータブル、オートスケーリング etc… 14
コントロールパネルに ログインしてみよう 15
「コントロールパネル」にログイン 16 「コントロールパネル」にログインするには、Webサイトの上部にある 「コントロールパネルログイン」をクリックしてください
「コントロールパネル」にログイン 17 「コントロールパネル」にログインしたら「さくらのクラウドユーザ」 としてログインの箇所にある「ユーザコード」「会員ID」 「パスワード」を入力してください
ログイン後の画面 18 無事にログインできたら、このような画面が表示されますので 「さくらのクラウド(IaaS)」をクリックしてください
ログイン後の画面 19 さくらのクラウド(IaaS) をクリックすると このような画面が表示されます
サーバを作成してみよう 20
まずは一番小さいサーバを作成してみよう 21 ・まずは、CPU 1ギガ、メモリ 1GB、ディスク SSD 20GB、NIC 1のもので OSはCent OS
7.2の物を作成してみましょう
サーバを作成する 22 ・メインメニューより「サーバ」をクリック ・その後「追加」をクリックすると「サーバ作成画面」に移動します
サーバ作成画面(1) 23 まず「ホスト名」を入力し、次にサーバプランを選択します。今回はホスト 名は適当に入力し、サーバプランは「1GB/1仮想コア」を選択します。
サーバ作成画面(2) 24 ボタンにないプランの場合は「全てのアイテムから選択」を選択すると アイテム一覧が表示され、そこから選択できます
サーバ作成画面(3) 25 次に「ディスクプラン」を選択します。今回は「20GB SSDプラン」を選択 します。上記のプランにない物を利用する場合は、サーバと同じように「全 てのアイテムから選択」を選択してください。
サーバ作成画面(4) 26 ディスクイメージを選択します、利用したい「OS」を選択してください。 今回は「CentOS 7.2」を利用します。
サーバ作成画面(5) 27 接続のネットワークに「インターネット」を選択し「管理ユーザのパスワー ド」でrootのパスワードを入力します。
シンプルモードを解除する 28 全ての入力項目を入力し終わった後「作成」をクリックします
29 「操作確認」のダイアログが表示されます。問題が無ければ「作成」をク リックします。
30 「作成」をクリックすると上記のダイアログが出てきます。 ステータスが全て成功になるとサーバが作成されます。
31 サーバの作成が完了すると、画面の右下にダイアログが表示されます。これ をクリックしてください。
32 ダイアログをクリックすると、サーバ情報が表示されます。
リモートスクリーンについて 33
「リモートスクリーン」 34 ブラウザ内でサーバの操作ができます。作成したサーバの 「コンソール」をクリックしてください。
文字入力の方法 35 画面中央をクリックすると、文字入力ができるようになりま す。rootと先ほど入力したパスワードを入れてください
「リモートスクリーン」 36 「ペースト」を選択すると、文字列のペーストも可能です
37 IPアドレスでSSH接続できるので わかる方はそれで接続してください
Dockerをインストールする 38
Dockerをインストールするサーバについて 39 今回はCentOS 7系でインストールします 今日の資料は別途、公開いたします 2万円クーポンを配るのでそれで復習できます
サーバにDockerをインストールする 40 「curl -sSL https://get.docker.com/ | sh」とコマンドを入れるとDocker のインストールがはじまります。 curl -sSL
https://get.docker.com/ | sh
Dockerを開始する 41 「systemctl start docker」とコマンドを入れるとDockerが動きます systemctl start docker
Dockerがインストールされているか確認 42 「docker version」と入力してDockerのバージョンが表示されれば、 Dockerが正常にインストールされています。 docker version
43 コンテナを起動する「docker run」
docker run ▪docker run コマンド → 指定したイメージのコンテナを起動する ▪構文 → docker
run イメージ [オプション][コマンド][引数] ▪オプション → -d バックグランドで実行 → -i コンテナの標準入力を開く → -t ttyを確保する → -p ポートフォワード 44
Hello World 45 ちゃんとDockerが動くか「hello world」を動かしてみたいと思います。 上記のコマンドを入力してください。 docker run hello-world
docker run hello-worldの結果 46 「hello world」の入力が終わると「docker run –it ubuntu bash」を試し
てみろ、と言われているので、これを入力してみましょう。
ubuntuを入れてみる 47 Dockerの上でUbuntuを入れて、コマンド入力ができるようにしてみる。 「-it」で、コンテナの中で入力できるようになる。 docker run -it ubuntu bash
Dockerを利用することでCentOS上でubuntuを 利用することができます。 ただし、このubuntuには、ほとんどコマンドが 入っていません。 例えば「curl ifconfig.me/ip」を叩くと、なに も表示されないと表示されます。 48
49
起動したubuntuにcurlを利用できるようにする 50 「apt-get update」を叩いた後「apt-get install curl」で「curl」をインス トールしてください。インストール中、色々と聞かれますがとりあえずyを 押して下さい。 apt-get update
apt-get install curl (1) (2)
Curlがインストールされていることの確認 51 「curl ifconfig.me/ip」でIPを表示してみる curl ifconfig.me/ip
作成したコンテナから出る 52 「exit」をコマンドを叩くとコンテナから出て、このコンテナが止る。 コンテナが止ると今までやった作業(apt-getとか)は保存されない。 exit
再度、コンテナを動かすと… 53 再度コンテナを起動して「curl ifconfig.me/ip」を入力してください。これ を入力しても、先ほどのように実行されないはずです。 docker run -it ubuntu bash
curl ifconfig.me/ip (1) (2)
コンテナについて •exitするだけで、今までの動作が消えてしまう ので、このままだと使えないです。 •次はバックグランドでDockerのコンテナを利 用する方法について解説します。 54
55 バッググランドでコンテナを動かす
今の時刻を毎秒表示するコンテナを起動する 56 上記のコンテナを起動すると、時刻を1秒ごとに表示するコンテナが表示さ れる。しばらく動かしてみて「ctrl + C」で止めてください。 docker run jpetazzo/clock
さきほどのコンテナをバックグランドで動かす 57 コンテナをバックグランドで動かすにはrunコマンドに「-d」をつける。 上記のコマンドを入力すると、先ほどのように時刻は表示されずバックグラ ンドで動いており、ログは記録されている。 docker run -d jpetazzo/clock
58 docker psでコンテナを確認する
docker ps ▪docker ps コマンド → コンテナIDを確認するためコマンド。これでわか るものは ・コンテナのID ・コンテナがどのイメージから作られたのか?
・コンテナが動いてどのぐらい経過したのか? ▪オプション → -l 直近(latest)のコンテナの情報を表示 → -q コンテナのショートIDのみ表示 → -a 停止しているコンテナも含め全て(all)表示 59
docker psでコンテナの確認 60 docker psを入力すると、現在動いているコンテナの情報が見られる docker ps
docker psのオプション 61 「docker ps –l」で直近に操作したコンテナを表示し「docker ps -q」でコ ンテナのショートIDが表示される。 docker
ps -l docker ps -q (1) (2)
62 docker logsでコンテナ のログを確認する
docker logs ▪docker logs コマンド → コンテナの標準出力の内容をコンテナ外から 確認する ▪オプション →
-tail ログの最後数行が見られるようになる → -follow リアルタイムでログが確認できる。 63
docker logs 64 「docker logs(コンテナのID)」を入力すると、コンテナの標準出力が見 られる。先ほどバックグランドで動かした「 jpetazzo/clock 」のコンテナ IDを入力してみましょう。 docker
logs (コンテナのID)
docker logsのオプション 65 「-- tail」オプションを使うことで、ログの最後数行が見られるようになる。 例えば、(1)のコマンドはログの最後3行を出すコマンドとなる。 docker logs --tail 3
(コンテナのID)
66 docker logs --tail 1 --follow (コンテナのID) Unixコマンドのtail -fのようにfollowオプションをつけることでリアルタイ ムでログを確認することができる。上記のコマンドを入力するとリアルタイ
ムでログが表示される。止めるには「Ctrl + C」で
67 docker kill、docker stopで コンテナを止める
コンテナの停止 68 「-d」で動作したコンテナを止めるにはkillかstopを使う。今回はkillコマン ドで、先ほどのコンテナを止めてください。 docker kill (コンテナのID) docker stop (コンテナのID)
(1) (2)
停止したコンテナを確認する 69 「docker ps」で先ほど止めたコンテナのIDが無いことを確認してください 「docker ps –a」で止めたコンテナも確認できます。 docker ps docker
ps -a (1) (2)
Docker上でGhostを インストールする 70
71 これだけではつまらないので アプリを入れてみましょう
Ghostとは? 72 「Ghost」は最近、人気が出ているNode.js製の軽量ブログエンジンです。 今回はDockerを利用して、コマンド1発でインストールします。
通常でGhostをインストールするのに必要なもの 73 • Node.jsとnpm • ApacheとかのWebサーバ • その他、色々 「Ghost」をインストールして利用するには上記のような物を色々とインス トールする必要があり面倒です。
DockerからGhostを入れる 74 Ghostを80番ポートで利用できるようにします。元々Ghostは2368番ポート で動いているので80番ポートとマッピングさせます。 docker run -p 80:2368 -d ghost
インストールが終わったらIPアドレスをいれる 75 インストールが終わったら「(IPアドレス)」をブラウザで入力してください。 上記のような「画面」が表示されます。「(IPアドレス)/admin」でGhostの セットができます。
docker psでコンテナIDを調べる 76 起動を確認したら、このコンテナを止めてみましょう。コンテナの止め方は 「docker stop (コンテナのID)」で止りますので「docker ps」でコンテナ IDを調べます。 docker
ps
docker psでコンテナIDを調べる 77 「docker ps」を入力して「CONTANER ID」を確認する。
docker psでコンテナIDを調べる 78 「docker stop (コンテナのID)」を入力すると、ghostのコンテナが止りま す。(先ほどの例だと07a4e04f6418となります。) docker stop (CONTANER
ID)
Docker上でWordPressを インストールする 79
80 WordPressとMy SQLのコンテナを つなぎ、WordPressを動かす
Wordpressをインストールしてみる 81 上記のコマンドを入力すると、色々とダウンロードがはじまる。 docker run wordpress
Wordpressをインストールしてみる 82 エラーが出てWordPressが起動できない、どうやらMySQLが必要な様子。 というわけで、MySQLのコンテナを持ってくる。
MySQLイメージのダウンロード 83 「docker pull [イメージ名]」でイメージのダウンロードがはじまります。 ちなみに「docker run [イメージ名]」をした時にローカルにコンテナイメー ジがないと自動的にダウンロードされます docker
pull mysql
MySQLの設定 84 わかりやすいように –eを利用することでMySQLのパスワードの設定が可能 となります。(パスワード)には、任意のパスワードを入れてください docker run --name mysql -e
MYSQL_ROOT_PASSWORD=(パスワード) -d mysql
Wordpressの立ち上げ 85 上記のコマンドを入力するとWordPressが立ち上がります。「-- link」は、- -link <連携したいコンテナ名>:<エイリアス名>オプションで新しいコンテ ナを起動すると,そのコンテナ内で連携したいコンテナのポート番号やIPを 環境変数として利用できるという機能です docker run
--name wordpress --link mysql:mysql -p 80:80 wordpress
86 インストールに成功するとこんな画面が出てきます。
ブラウザでIPアドレスにアクセス 87
88 「-d」を指定していないので「ctrl + c」を入力すると、このコンテナ自体 も停止してしまいます。 それでは、次はバッグランドでWordPressを起動してみましょう。 ただし、同じ名前のコンテナ(--name以下)は作れないので、名前を変えて みましょう。
Wordpressの立ち上げ 89 上記のコマンドを入力するとWordPressが起動します。起動するのを確認し たら、docker killで落としてみましょう。 docker run --name wordpress2 -d
--link mysql:mysql -p 80:80 wordpress
Dockerfileを利用して、 Dockerイメージを作る 90
Docker コンテナとDocker イメージの違い ・「Docker run」をコマンドを叩くとDocker イメージからDocker コンテナが作られる ・Dockerイメージは読み込みのみ可能(read- only)。変更はできない。 ・Dockerコンテナは、読み書きができるファイ
ルシステム 91
新しいイメージを作るには 92 本日はDocker fileからDockerイメージを作る「docker build」を試します ・docker commit → コンテナからDocker イメージを作る。
・docker build → Docker fileからDockerイメージを作る。 ・docker import → Base imageからDockerイメージをつくる。
自分が使用したイメージの表示 93 このコマンドを入力すると、過去に利用したDockerイメージが表示されます docker images
94 Dockerfileを利用して、 Dockerイメージを作る。
Dockerfile? ・DockerfileはDockerイメージを作るためのレ シピのようなものです。 ・ Dockerfileは作成するDockerイメージの内容 をテキスト形式で記述します。 ・作成したテキストファイルはdocker buildコ マンドで読み込んでDockerイメージの作成を実 行します。
95
Dockerfileを書いてみる 96 Dockerfileをvimで書いてみます「myimages」というフォルダを作ってvim でDockerfileという名前のファイルを作製します。 mkdir myimage cd myimage (1) (2)
vim Dockerfile (2)
簡単なDockerfileを作る 97 「a」を押して入力モード上記の三行を入力する。入力が終わったら、Escで コマンドモードに戻った後「:wq」で保存する。 FROM ubuntu RUN apt-get update RUN
apt-get install -y wget
docker build ▪docker build コマンド → DockerfileからDockerイメージを作る ▪構文 docker build
–t <Dockerイメージ名>:<タ グ名><Dockerfileを配置するディリクトリ> 98
docker build 99 dockerビルドコマンドを入力して、Dockerイメージを作成してください。 docker build -t myimage .
100 Successfully built <イメージID>が出れば、イメージの作成成功
docker build 101 作成したイメージは上記のコマンドから実行できます。 docker run -it myimage bash
102 Docker Compose
Docker Composeとは? 103 Docker Composeは、複数のコンテナか ら構成するサービスを従来よりも簡単に 構築できるツールです。 従来はコンテナを作成するには、いちい ち「docker run」しなければならなかっ
たのが、コマンド1発で複数のコンテナ を利用したサービスを構築できます。
104 Docker Composeを利用して Rocket.Chatの環境を構築する
Docker composeのバイナリをセットする。 105 上記のコマンドを入力して、Docker Composeのバイナリをセットする curl -L https://github.com/docker/compose/releas es/download/1.8.0/docker-compose- `uname
-s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
Docker composeがインストールされたか確認 106 「docker-compose version」を入力すると、Docker composeのバージョ ンが表示される、正しくインストールされれば、このコマンドでバージョン 情報が表示される。 docker-compose version
Docker-compose.yamlの作成 107 本来であれば、作業用のディレクトリの中に「docker-compose.yaml」を用 意する必要があるのですが、今回は事前に私の方で作成したので、そちらをク ローンしてください。クローンが終わったら「rocketchat」に移動します。 git clone https://github.com/zembutsu/sakura-cloud- hands-on.git cd
sakura-cloud-hands-on/rocketchat
イメージを取得する 108 先ほど作成したディレクトリ「rocketchat」の中で「docker-compose pull」を入力。Rocket.Chatに必要なイメージをダウンロードします。 docker-compose pull
イメージを取得する 109 エラーが出ていなければ「docker images」を入力して「mongo」と 「rocketchat/rocket.chat」と「rocketchat/hubot-rocketchat」のイメー ジを取得できているか確認をする。 docker images
110 エラーが出ていなければ「docker images」を入力して「mongo」と 「rocketchat/rocket.chat」と「rocketchat/hubot-rocketchat」のイメー ジを取得できているか確認をする。 # docker images REPOSITORY TAG
IMAGE ID CREATED SIZE mongo latest 7f09d45df511 5 days ago 336.1 MB rocketchat/rocket.chat latest 30826dfbbfa6 2 weeks ago 332.4 MB rocketchat/hubot-rocketchat latest a727f5c88c43 5 weeks ago 800.5 MB
Composeを使って複数のコンテナを立ち上げる 111 イメージを取得できていれば「docker-compose up -d」を入力して Rocket.chat起動に必要な複数のコンテナを立ち上げます。 docker-compose up -d
「docker ps」を入力して動作を確認する 112 「docker-compose up -d」でコンテナを立ち上げた後「docker ps」で、 正常に動作しているか確認する。 docker ps
ブラウザで「IPアドレス」を入力する 113 正常に動作していれば、ブラウザに http://サーバのIPアドレス:3000/ を入 力すれば、Rocket.Chat ログイン画面が表示されます。「新しいアカウント を登録」をクリック後、名前、メールアドレス、パスワードを入力します。
まとめ 114
まとめ Docker の基本コマンドを学びました DockerとDocker Composeを利用すると、 すぐに検証環境が利用できて便利 115
116 ご静聴ありがとうございました。 「さくらのクラウド 2万円クーポン」を配布いたします。 今日の復習にご利用ください
117 ご清聴ありがとうございました http://cloud.sakura.ad.jp