Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編

3,192 views

Published on

Dockerのインストールをはじめ、基本的なdockerコマンドの使い方、Nginxウェブサーバのコンテナ構築の流れと、Arukasでデプロイするまでを辿ります。

開催:平成28年10月31日(月)
さくらの夕べ(番外編)第1回Docker/Arukas入門ハンズオン
https://sakura-kanto.doorkeeper.jp/events/52770

Published in: Technology
  • Be the first to comment

Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編

  1. 1. Docker/ Arukas入門 ハンズオン資料 2016年10月31日(月) さくらインターネット株式会社 Technology Evangelist 前佛雅人 @zembutsu 第 1 回 さ く ら と コ ン テ ナ の 夕 べ ( さ く ら の 夕 べ 番 外 編 )
  2. 2. 今日の内容 Docker とコンテナの基礎知識 Docker って何だ? コンテナとイメージの基本概念 ハンズオン編 ~Nginxを動かす~ さくらのクラウドでサーバのセットアップ Docker のインストール コンテナの実行とイメージの構築 Docker Hub にアップロード Arukas にデプロイ 質疑応答 2
  3. 3. 3 Dockerと コンテナの基礎知識
  4. 4. Docker アプリ開発・移動・実行のプラットフォーム 設計思想は「開発者が簡単にアプリケーションを動かす環境を作る」こと Docker プロジェクト PyCon 2013 (PythonカンファレンスUS) 3月13日、 LT でオープンソース・プロジェクトを発表 [1] Solomon Hykes … dotcloud 創業者が、 Docker プロジェクトを開始 (Apache License v2) 32,000以上の GitHub Stars、60億 Docker コンテナのダウンロード、2,900人以上の貢献者 Docker Inc. ミッションは、膨大な革新を生み出すツールを作る [2] Docker プロジェクトのオリジナル開発者、かつ、プロジェクトのスポンサー、商業サポート [1] “The future of Linux Containers” https://www.youtube.com/watch?v=wW9CAH9nSLs [2] “Our mission at Docker to create tools of mass innovation” http://www.docker.com/company/ 4 ソ ロ モ ン ・ ハ イ ク ド ッ カ ー ド ッ ト ク ラ ウ ド ア パ ッ チ ラ イ セ ン ス
  5. 5. 5 Introducing InfraKit, an open source toolkit for creating and managing declarative, self-healing infrastructure - Docker Blog https://blog.docker.com/2016/10/introducing-infrakit-an-open-source-toolkit-for-declarative-infrastructure/
  6. 6. 6 Build Run開 発 ・ 構 築 移 動 実 行 Ship “Build, Ship, Run, Any App Anywhere” Docker Engine for Linux / Commercial Support Docker for Mac, Windows, Windows Server Docker Trusted Registry Docker Hub Universal Control Plane Toolbox Kitematic Dev (開発) Ops (運用) ツ ー ル ボ ッ ク ス ド ッ カ ー マ シ ン カ イ ト マ テ ィ ッ ク レ ジ ス ト リ ド ッ カ ー ハ ブ コ ン ポ ー ズ ス ゥ ォ ー ム ク ラ ウ ド デ ー タ セ ン タド ッ カ ー ・ ト ラ ス テ ッ ド ・ レ ジ ス ト リ ユ ニ バ ー サ ル ・ コ ン ト ロ ー ル ・ プ レ ー ン ド ッ カ ー エ ン ジ ン コ マ ー シ ャ ル ・ サ ポ ー ト ( 商 用 サ ポ ー ト ) 版 あ ら ゆ る ア プ リ ケ ー シ ョ ン を 、 ど こ で も 構 築 ・ 移 動 ・ 実 行
  7. 7. 7 Docker Engine Linux Kernel ・namespaces ・cgroups LXC libcontainer runC containerd v0.9~ v1.11~ Version 7 Unix chroot jail dockerd v1.12~ デーモン ライブラリ ランタイム docker daemon ・SELinux ・capabilities … etc Docker: the container engine v1.11~ カ ー ネ ル ネ ー ム ス ペ ー ス シ ー グ ル ー プ エ ス イ ー リ ナ ッ ク ス ケ ー パ ビ リ テ ィ エルエックスシー リ ブ コ ン テ ナ ラ ン シ ー ド ッ カ ー デ ー モ ン コ ン テ ナ デ ィ ー ド ッ カ ー デ ィ ー ド ッ カ ー エ ン ジ ン オ ー プ ン コ ン テ ナ イ ニ シ ア テ ィ ブ
  8. 8. Docker イメージとレイヤの理解 Docker イメージは、レイヤを積み上げて参照 各レイヤが層(スタック)として積み上がり、1つに統合されたファイルシステムとして見える Docker 内部のストレージ・ドライバが、レイヤを積み重ねる役割を担う イメージは読み込み専用(ReadOnly) 各イメージ・レイヤは親子関係を持っている イメージ・レイヤは読み込み専用のため、変更を加えられない レイヤに対する変更情報(ファイルの追加・削除)は、子レイヤ側に記録 レイヤの利点は移動・共有しやすさ 各レイヤをファイルやコードの差分のように扱えるため、ネットワークを 通して共有する時、余分なトラフィックを使用せず、時間も節約できる 8
  9. 9. Docker イメージとコンテナの関係 コンテナはイメージに新しいレイヤを追加 薄い読み書き可能レイヤ(Thin R/W layer)は、コンテナ 実行時に自動的に割り当てられる イメージに対する変更情報(ファイルの追加・削除)は すべてこのコンテナ用レイヤ上に記録 このレイヤをコミット(commit)すると、新しいイメージを 作成できる ディスク領域の有効活用 コンテナの起動時には、追加のディスク容量がほぼ不要 なため、仮想化システムのように起動のたびにディスク 容量を確保する必要がない 9
  10. 10. Docker コンテナの操作 10 OS ( Linux ) 物理/仮想サーバ Docker エンジン ( dockerd デーモン ) Linux kernel コンテナ コンテナ コンテナ リモート API docker クライアント TCP あるいは Unix ソケットドメイン containerd Runtime: runC (OCI規格準拠) ・docker コマンド Linux, Mac OS X, Windows ・Kitematic (GUI) Mac OS X, Windows ・Docker Compose ・Docker Swarm
  11. 11. 11 コンテナの実行 コンテナAの ファイルシステム … … コンテナBの ファイルシステム /etc (/data/ubuntu/etc) /bin (/data/ubuntu/bin) /etc (/data/centos/etc) /bin (/data/centos/bin) / / httpd PID 1 プロセスA プロセスB ruby PID 1 chris.rb PID 2 コンテナA コンテナB 名前空間の isolate ・プロセス ・ファイルシステム ・ネットワーク ・ホスト名 ・UID・GID リソース制限 ・CPU ・メモリ ・I/O ・ディスク・クォータ アイソレート
  12. 12. Docker コンテナのライフサイクル 12
  13. 13. コンテナを動かすには? 13 $ docker run hello-world hello-world コンテナの実行 $ docker run –i –t ubuntu bash ubuntu コンテナの実行 $ docker run –d –p 80:80 –v /data/:/usr/share/nginx/html nginx:latest nginx コンテナの実行
  14. 14. イメージを作るには? 14 $ docker commit [コンテナID] [イメージ名:タグ] docker commit コマンド $ docker build –t [イメージ名:タグ] . docker bulid コマンド $ docker build –t [イメージ名:タグ] . Dockerfile ファイル
  15. 15. ここまでのポイント • Docker はアプリケーションを開発・移動・実行するためのプラットフォーム • アプリケーションのコンテナ化には、Linux カーネルの技術を使う • Docker コンテナを動かすには、Docker イメージが必要 15
  16. 16. 16 ハンズオン
  17. 17. 17 $ docker Docker Hub Nginx Build RunShip開 発 ・ 構 築 移 動 実 行
  18. 18. 基本操作とコンテナ作成・デプロイ方法を習得 ハンズオンの流れ 18 1. さくらのクラウド にログイン 2. 仮想サーバ(CentOS 7.2)の起動 3. Docker Engine のセットアップ 4. docker コマンドの基本操作を学ぶ 5. Nginx イメージを作成 6. Docker Hub にログイン 7. Docker Hub に push 8. Arukas に Nginx をデプロイ $ docker Docker Hub Nginx
  19. 19. 1. さくらのクラウドにログイン 1.1. コントロールパネルの表示 さくらのクラウド http://cloud.sakura.ad.jp/ から を選び、 https://secure.sakura.ad.jp/cloud/ を開きます。 1.2. 接続情報の確認 配布資料のログイン情報を入力します。 入力後は をクリックします。 19
  20. 20. 2. 仮想サーバの起動と接続 2.1. さくらのクラウドで仮想サーバを起動 1. 【 さくらのクラウド(IaaS) 】をクリックします。 20
  21. 21. 2. メニュー【 サーバ 】から【 追加 】をクリックします。 3. ディスクイメージは【 CentOS 7.2 64bit 】を使います。 21
  22. 22. 4. 「サーバプラン」と「ディスクプラン」を選択します(※今回は変更しません)。 22
  23. 23. 5. 【 管理ユーザのパスワード 】で root パスワードを設定します。 ※ 8文字以上の「アルファベット」「数字」「記号」の組み合わせが必要 6. ホスト名を【 docker 】、作成数【 1 】として【 作成 】ボタンをクリックします。 23
  24. 24. 7. 確認画面では【 作成 】をクリックします。 8. サーバ追加作業が完了するまで待ちます。起動後は【 閉じる 】をクリックします。 9. メニューの【 サーバ 】をクリックし、作成したサーバ「 docker 」を確認します。 24
  25. 25. 2.2. 仮想サーバへ接続 1. IP アドレスを確認します。インターフェースを右クリックし【 IP アドレスをコピー 】します。 2. Tera Term やターミナルなどを開き、対象サーバに SSH でログインします。 • ログイン時のIDは「root」、パスワードは作成時に入力したもの • ターミナルでは「ssh -l root <IPアドレス>」か「ssh root@<IPアドレス>」 25 $ ssh -l root 59.106.209.220 The authenticity of host '59.106.209.220 (59.106.209.220)' can't be established. ECDSA key fingerprint is SHA256:MHsAGGJvASP/yj3JuhwuEH1BfbuJ8FebYyu7eWrjerI. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '59.106.209.220' (ECDSA) to the list of known hosts. root@59.106.209.220's password: [root@docker ~]# 実行例 ssh コマンドで仮想サーバに接続 接続を許可するので yes パスワードを入力(画面に表示されません)
  26. 26. ここまでのポイント • さくらのクラウドで仮想サーバを作るには、ログイン後に【 IaaS 】を選択。 26
  27. 27. 以降のコマンド入力テキスト配布 URL http://qiita.com/zembutsu/items/cc69f98bd2344c8b3317 or http://bit.ly/sakura20161031 27
  28. 28. 3. Docker Engine のセットアップ 28 エ ン ジ ンド ッ カ ー $ docker Docker Hub Nginx 仮想サーバの準備が整いました Docker コンテナを動かすためには、Docker Engine が必要です
  29. 29. 3.1 安定版(stable)の最新バイナリを入れる 1. パッケージを最新に更新します。 2. Docker の yum リポジトリを利用可能にします。 3. docker-engine パッケージをセットアップします。 29 # tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF docker.repo の作成 「EOF」文字列が出てくるまでの標準出力を docker.repo に書き出す ここまで # yum –y install docker-engine # yum -y update ヤ ム ワ イ ア ッ プ デ ー ト テ ィ ー ス テ ー ブ ル ド ッ カ ー ・ レ ポ イ ン ス ト ー ル
  30. 30. 3.2. docker サービスの有効化とデーモン起動 1. サービスを有効化(サーバのブート時に自動実行)します。 2. docker デーモンを起動します。 3. バージョン番号を確認します。 30 # systemctl enable docker.service Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. systemctl を実行 # systemctl start docker.service # docker version (省略) Server: Version: 1.12.3 API version: 1.24 Go version: go1.6.3 Git commit: 6b644ec Built: OS/Arch: linux/amd64 docker コマンドで、クライアントとサーバ両方のバージョン表示 docker デーモンが起動していないと、 サーバ側のバージョンを表示できない システムシーティーエ ル イ ネ ー ブ ル ス タ ー ト バ ー ジ ョ ン
  31. 31. 補足情報:CentOS 7 の場合 もっと簡単なセットアップ 1. curl コマンドを使い、OS の自動判別後、必要なパッケージを自動セットアップします。 削除するには 1. パッケージ情報を削除します。 2. データ用ディレクトリを削除します。 3. その他、設定ファイル等を置いた場合は、手作業で削除します。 31 # curl -fsSL https://get.docker.com/ | sh # systemctl enable docker.service # systemctl start docker 実行例 セットアップ用コマンドの自動実行 docker サービスの有効化 docker デーモンの起動 # yum –y remove docker-engine # rm –rf /var/lib/docker リ ム ー ブ アールエム カ ー ル カ ー ル
  32. 32. 4. docker コマンドの基本操作 32 $ docker Docker Hub hello-world Docker コンテナを実行するには Docker イメージが必要です Docker(公式)イメージは Docker Hub から取得します mynginx:1.1
  33. 33. 4.1. hello-world コンテナの実行とイメージ確認 1. 【 docker run 】コマンドでコンテナを実行します。 33 # docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com For more examples and ideas, visit: https://docs.docker.com/engine/userguide/. hello-world:latest イメージ を実行 ローカルにイメージがないため、Docker Hubからダウンロード ダウンロード(pull)完了 hello-world の出力 ド ッ カ ー ラ ン ド ッ カ ー ラ ン ハ ロ ー ワ ー ル ド ハ ロ ー ワ ー ル ド プ ル
  34. 34. 2. 【 docker ps 】コマンドで、コンテナの状態を確認します。 • CONTAINER ID … コンテナごとのユニークな ID • IMAGE … コンテナの元になったイメージ名 • CREATED … コンテナの作成時間 • STATUS … 現在の状態(ステータス)。「Exited (0)」は正常終了 • PORTS … ポートをホスト側に割り当て(マッピング時)は情報を表示 • NAMES … コンテナ名。実行時に指定しなければ、「形容詞_人名」を自動組み合わせ 3. 【 docker images 】で、ローカル上のイメージを一覧表示します。 • REPOSITORY … リポジトリ名 • TAG … タグ名 • IMAGE ID … イメージ ID • CREATED … 作成時 • SIZE … イメージの使用容量 34 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d47af69a31b hello-world "/hello" 9 minutes ago Exited (0) 9 minutes ago awesome_varahamihira オプション「-a」は全て(all)のコンテナを表示 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest c54a2cc56cbb 3 months ago 1.848 kB ピーエス イ メ ー ジ ズ
  35. 35. 4.2. Ubuntu コンテナの実行 hello-world イメージを使ったコンテナ実行は、画面にメッセージを表示するシンプルなもの でした。次は、サーバのように操作可能な Linux ディストリビューションのコンテナを実行します。 1. 【 docker pull 】コマンドで ubuntu 公式イメージを取得します。 2. ダウンロードしたイメージを【 docker images 】で確認します。 35 # docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 6bbedd9b76a4: Pull complete fc19d60a83f1: Pull complete de413bb911fd: Pull complete 2879a7ad3144: Pull complete 668604fde02e: Pull complete Digest: sha256:2d44ae143feeb36f4c898d32ed2ab2dffeb3a573d2d8928646dfc9cb7deb1315 Status: Downloaded newer image for ubuntu:lates # docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest f753707788c5 2 weeks ago 127.1 MB hello-world latest c54a2cc56cbb 3 months ago 1.848 kB プ ル
  36. 36. 3. ubuntu:latest コンテナを実行します(コロン「:」記号の後ろはタグ)。 4. Ubuntu のバージョンを確認します。 5. ps コマンドを実行します。コンテナ実行時の「/bin/bash」のPIDが「1」なのを確認します。 6. コンテナを終了します。 36 # docker run -i -t ubuntu:latest /bin/bash root@27e3c865bd61:/# # cat /etc/issue Ubuntu 16.04.1 LTS ¥n ¥l # ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 08:09 ? 00:00:00 /bin/bash root 12 1 0 08:14 ? 00:00:00 ps -efl root@27e3c865bd61:/# exit exit [root@docker ~]# レ イ テ ス ト プロンプトのホスト名はコンテナID
  37. 37. 5. Nginx イメージを作成 37 $ docker Docker Hub nginx Nginx の Docker イメージは Docker Hub からダウンロードします ダウンロードしたイメージを元に、新しいイメージを作成(構築)可能です mynginx:1.1 mynginx:1.1
  38. 38. 5.1. Nginx コンテナの実行 これまではコンテナを実行後、プロセスを終了する例をみてきました。次は、サーバ上でサービスを 継続する Nginx イメージの実行方法を学びます。 1. nginx:latest コンテナを起動します。 38 # docker run -itd -p 80:80 nginx:latest Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 43c265008fae: Pull complete e4c030a565b1: Pull complete 685b7631c1ce: Pull complete Digest: sha256:dedbce721065b2bcfae35d2b0690857bb6c3b4b7dd48bfe7fc7b53693731beff Status: Downloaded newer image for nginx:latest 5f343d53473b2b5147abb7d547cd67263beff68eb02c581bd75266d26308991a -p で「ホスト側ポート:コンテナ側ポート」を割り当て(マッピング)
  39. 39. 2. ブラウザの URL に仮想サーバの IP アドレスを入力します。 39 Nginx の初期画面が表示されます
  40. 40. 5.2. Nginx コンテナにページを作成 1. 【 docker ps 】 または【 docker ps -ql 】で、Nginx コンテナのコンテナ ID を確認。 ※ コンテナ ID とは、コンテナを識別するもので、各種操作で必要です。 2. 【 docker exec 】コマンドで、bash の追加プロセスを実行。 3. 【 ps –ef 】コマンドで、nginx コンテナの中での操作を確認。 40 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5f343d53473b nginx:latest "nginx -g 'daemon off" 16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp, 443/tcp adoring_hoover # docker ps -ql 5f343d53473b # docker exec -it $(docker ps -ql) /bin/bash root@5f343d53473b:/# # ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 06:29 ? 00:00:00 nginx: master process nginx -g daemon off; nginx 5 1 0 06:29 ? 00:00:00 nginx: worker process root 6 0 0 06:48 ? 00:00:00 /bin/bash root 11 6 0 06:49 ? 00:00:00 ps -ef 直近に操作したコンテナIDのみ表示 -q (quiet=静かな)、-l (last=直近の) エ ク ゼ ク PID 1 が nginx のコンテナ内と分かる $(コマンド) はコマンド結果を変数展開=直近に操作したコンテナID
  41. 41. 4. Nginx のドキュメント・ルートの index.html を書き換えます。 5. ブラウザで表示を確認します。「Shift」キーを押しながら、再起動ボタンを押します。 6. 【 exit 】を実行し、bash を終了します。 41 # echo 'hello world' > /usr/share/nginx/html/index.html # cat /usr/share/nginx/html/index.html hello world # exit exit echo コマンドは文字列出力であり、index.html を上書き
  42. 42. 5.3. Nginx イメージの作成 1. 【 docker commit 】 コマンドで、【 mynginx:1.0 】イメージを作成します。 2. 【 docker images 】コマンドで、イメージが作成されたのを確認します。 3. 作成した「mynginx:1.0」イメージを使って、新しいコンテナを実行します。 4. 【 curl 】コマンドで、コマンドライン上でポート 8080 を開きます。 42 # docker commit $(docker ps -ql) mynginx:1.0 sha256:16504967dac47fc54bd85f2c2e57363f5cd7f9a0a8687d427d2504ab88578db7 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE mynginx 1.0 16504967dac4 About a minute ago 181.4 MB nginx latest e43d811ce2f4 9 days ago 181.4 MB # docker run -d -p 8080:80 mynginx:1.0 eb78012f01d0e3222713c405d652ca78258726696a4f39445cc87a15fa9f8863 # curl http://localhost:8080 hello world コ ミ ッ ト マ イ エ ン ジ ン エ ッ ク ス 新しい mynginx イメージは、始めから「hello world」を表示
  43. 43. 5.4 Dockerfile でイメージの自動構築 1. 作業用ディレクトリ「mynginx」を作成し、移動します。 2. 次のコマンドを実行し、「Dockerfile」を作成します。 3. 【 docker build 】コマンドで、「mynginx:1.1」イメージを自動作成します。 43 # mkdir mynginx # cd mynginx # tee ./Dockerfile <<-'EOF' FROM nginx:latest RUN echo "hello world<br />$(date)" > /usr/share/nginx/html/index.html EOF # docker build -t mynginx:1.1 . Sending build context to Docker daemon 20.99 kB Step 1 : FROM nginx:latest ---> e43d811ce2f4 Step 2 : RUN echo "hello world<br />$date" > /usr/share/nginx/html/index.html ---> Running in ec6bf44715e2 ---> 91ba2d666ae1 Removing intermediate container 最後の「.」記号も必要。Dockerfileをはじめとした”コンテクスト”のパスを指定 自動コミット 自動コミット ド ッ カ ー フ ァ イ ル ビ ル ド
  44. 44. 4. 【 docker images 】コマンドで、イメージが作成されたのを確認します。 5. 作成した「mynginx:1.1」イメージを使って、新しいコンテナを実行します。 6. 【 curl 】コマンドで、コマンドライン上でポート 8888 を開きます。 44 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE mynginx 1.1 91ba2d666ae1 About a minute ago 181.4 MB mynginx 1.0 16504967dac4 12 minutes ago 181.4 MB # docker run -d -p 8888:80 mynginx:1.1 1dcc320a2ecdc5448f87686f735e9f759ab0bf0107f32e035850e30a1757e83f # curl http://localhost:8888 hello world<br />Mon Oct 31 07:16:48 UTC 2016 $(date) の変数展開、すなわちビルド時の時刻を表示
  45. 45. 5.3 コンテナの停止と削除 1. 【 docker ps 】でコンテナの状態を確認します。 2. コンテナを停止するため【 docker kill 】コマンドを実行します。 45 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1dcc320a2ecd 91ba2d666ae1 "nginx -g 'daemon off" 3 minutes ago Up 3 minutes 443/tcp, 0.0.0.0:8888->80/tcp condescending_morse eb78012f01d0 mynginx:1.0 "nginx -g 'daemon off" 14 minutes ago Up 14 minutes 443/tcp, 0.0.0.0:8080->80/tcp angry_jepsen 5f343d53473b nginx:latest "nginx -g 'daemon off" 48 minutes ago Up 48 minutes 0.0.0.0:80->80/tcp, 443/tcp adoring_hoover # docker kill $(docker ps -q) 1dcc320a2ecd eb78012f01d0 5f343d53473b キ ル 実行中のコンテナ ID を変数展開
  46. 46. 3. 【 docker ps 】では実行中のプロセスはありませんが、【 docker ps -a 】でコンテナが停止中 なのを確認します。 4. 【 docker rm 】コマンドでコンテナ(コンテナ用のイメージ・レイヤとメタ情報)を削除します。 46 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1dcc320a2ecd 91ba2d666ae1 "nginx -g 'daemon off" 6 minutes ago Exited (137) About a minute ago condescending_morse eb78012f01d0 mynginx:1.0 "nginx -g 'daemon off" 17 minutes ago Exited (137) About a minute ago angry_jepsen 5f343d53473b nginx:latest "nginx -g 'daemon off" 51 minutes ago Exited (137) About a minute ago adoring_hoover 27e3c865bd61 ubuntu:latest "/bin/bash" 47 hours ago Exited (0) 47 hours ago distracted_stonebraker 6d47af69a31b hello-world "/hello" 4 days ago Exited (0) 4 days ago awesome_varahamihira # docker rm $(docker ps -aq) 1dcc320a2ecd eb78012f01d0 5f343d53473b 27e3c865bd61 6d47af69a31b アールエム 実行中のコンテナがないのを確認 全て終了(exited)状態 全てのコンテナ ID を変数展開
  47. 47. 5. 全てのコンテナ(コンテナ用のイメージレイヤとメタ情報)が削除されたのを確認します。 47 # docker ps –a # コンテナを全て削除したので、何も表示しされない 補足: • Docker コンテナ実行時、イメージは読み込み専 用であり、変更できません。 • ファイルやディレクトリに対する追加・変更・削除 の情報は、コンテナ用の新しいイメージ・レイヤに 記録されます。 • メタ情報とは、コンテナ実行時に指定するコマンド、 ポートの割り当て、各種のオプション情報等です。 • これらの情報はコンテナを docker rm で削除す るまで保持します。
  48. 48. 6. Docker Hub にログイン 48 Docker Hub Docker イメージを Docker Hub に公開します 事前にアカウント ID の登録と、サーバからログイン(認証)する必要があります ハ ブ Nginx$ docker mynginx:1.1 mynginx:1.1
  49. 49. 6.1 Docker Hub に ID を作成 1. https://hub.docker.com/ にアクセスし、アカウントを作成し、ログインします。 ユーザ名は任意の名前を登録できますが、一般公開されますのでご注意ください。 49 • ID • メールアドレス • パスワード これらを入力後【 Sign Up 】 サ イ ン ア ッ プ
  50. 50. 6.2. サーバから Docker Hub にログイン 1. 【 docker login 】コマンドを実行します。 ※ 認証に失敗する場合は、パスワードの入力が正しいかどうかご確認ください。 ※ 認証情報は「~/.docker/config.json」ファイルに記録されています。作業後は【docker logout】 コマンドの実行で、認証に関する情報を削除します。 50 # docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: <自分のDockerHubID> Password: Login Succeeded パスワードを入力(画面に表示されません) # docker logout Remove login credentials for https://index.docker.io/v1/ ロ グ イ ン ロ グ ア ウ ト
  51. 51. 7. Docker イメージの登録と公開 51 イメージを送信(push)する前に、ログインが必要です イメージ名とタグに、Docker Hub 上のユーザ名を追加します Docker Hub Nginx Docker Hub Nginx$ docker$ docker mynginx:1.1 mynginx:1.1
  52. 52. Docker Hub にイメージを登録するためには、あらかじめイメージ名に「DockerHubのID名」を 付ける必要があります。 例:「mynginx:1.1」を公開するには「<ユーザ名>/mynginx:1.1」のイメージが必要です。 タグは構築時だけでなく、構築後も【 docker tag 】コマンドで変更できます。 7.1. イメージをタグ付け 1. 【 docker tags 】コマンドで「mynginx:1.1」イメージに Docker Hub ID の情報を付けます。 2. 【 docker images 】で確認します。 52 # docker tag mynginx:1.1 <自分のID名>/mynginx:1.1 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE zembutsu/mynginx 1.1 df1bb2784361 21 minutes ago 181.4 MB mynginx 1.1 df1bb2784361 21 minutes ago 181.4 MB タ グ
  53. 53. 7.2. docker push でイメージを送信 1. 【 docker push 】コマンドでイメージを送信します。 2. Docker Hub 上にある自分のページを表示し、リポジトリが作られているのを確認します。 53 # docker push <自分の名前>/mynginx:1.1 The push refers to a repository [docker.io/<name>/mynginx] e8076080e8ef: Pushed bc1394447d64: Mounted from library/nginx 6591c6f92a7b: Mounted from library/nginx f96222d75c55: Mounted from library/nginx 1.1: digest: sha256:a1928c62d64fb7582f8bd38d90c8e2d57d7c2515c54f5d6c109cb37238047031 size: 1155 プ ッ シ ュ ※ docker push を実行すると、自動的にパブリック・ リポジトリを作成します。 ※ プライベート・リポジトリを作成したい場合は、 Docker Hub 上で予め作成するか、作成後に変更 します。
  54. 54. 7.3. 不要なイメージの削除 使わない Docker イメージは削除できます。 1. 【 docker images –q 】を実行すると、ローカルにあるイメージ ID を表示します。 2. 【 docker rmi 】で全てのイメージを削除します。 54 # docker images -q df1bb2784361 df1bb2784361 91ba2d666ae1 16504967dac4 e43d811ce2f4 f753707788c5 c54a2cc56cbb # docker rmi -f $(docker images -aq) Untagged: mynginx:1.1 Untagged: zembutsu/mynginx:1.1 Untagged: zembutsu/mynginx@sha256:a1928c62d64fb7582f8bd38d90c8e2d57d7c2515c54f5d6c109cb37238047031 Deleted: sha256:df1bb27843614031316161f1479435106a551c14ffb2174ece618b6e84846382 Deleted: sha256:a098379d41319f1ef3058257be4b17272dddf3dbbdb144ba670afbab60dae98c Untagged: nginx:latest (以下省略) ア ー ル エ ム ア イ
  55. 55. ここまでのポイント • Docker イメージを実行するには、Docker Hub からダウンロードします。 • docker commit や docker build で任意のイメージを作成できます。 • イメージは docker push で Docker Hub に登録できます。 55
  56. 56. https://arukas.io/ 56
  57. 57. Arukas アプリケーションをDocker最適化インフラで実行 57
  58. 58. Arukasのビジョン インフラサービス抽象化 開発者が自分自身で自由にサービス開発できる、専念できる環境を提供したい Arukasが中心 Arukasが、PaaS/SaaS/BaaS等の高レベルなサービスを提供する基盤に インテグレーション機能 サードパーティ製のクラウドサービスを、プラグインのように簡単に連携 ポータビリティを実現 世界標準のDockerコンテナ対応 データを保持せず、Arukasにロックインされない自由度の高い環境を提供 58
  59. 59. Arukasの特長 複数コンテナを管理 Dockerコンテナを直感的に操作できるコントロールパネル CLI (arukas コマンド)で、複数コンテナを簡単に管理 機動的なスケール機能 簡単・高速なスケールイン・アウト機能 必要なリソースに応じてオンデマンドにスケール 高品質な国産サービス Docker コンテナ用に独自設計した Arukas のサーバ設備と、 高品質なネットワーク回線を通し、自由度の高い Docker コンテナをすぐに運用開始 59
  60. 60. Arukasの利点 手軽、シンプル、簡単 DockerコンテナをArukasのホスティング環境上で簡単に実行 直感的なコントロールパネルの操作だけで、マネージドされた 環境上にプロビジョニング コンテナ実行にサーバ不要 アプリケーションとしてコンテナを実行すると、HTTPSに対応した エンドポイントを自動付与 サービスを実行するためにサーバやDocker環境は要りません 60
  61. 61. Arukasの機能 最速15秒デプロイ デプロイにかかる時間を短縮化 エンドポイント アプリ作成時、外部からコンテナにアクセス可能 な エンドポイントを自動発行 例:https://focused-golick-8853.arukascloud.io スケールアウト サービス規模にあわせ、オンデマンドにインスタ ンス数(アプリ数)を調整するだけでなく、負荷分 散を自動適用 コントロールパネル シンプルで直感的にアプリの作成・管理が可能 CLI でも操作 dockerコマンド風のarukasコマンドを使えば コントロールパネルにログインせずに操作可 例:arukas ps, arukas run, arukas rm … 61
  62. 62. 8. Arukas にログイン 62 $ docker Docker Hub Nginx$ docker Docker Hub Nginx Arukas のサービスを使うには、アカウント登録・ログインが必要です ベータテスト中は無償で登録やご利用いただけます mynginx:1.1 mynginx:1.1
  63. 63. アカウント作成の流れ オンライン登録 1. サインアップ用ページを開く https://app.arukas.io/sign_up/ 2. ユーザ名、メールアドレス、パスワードを指定 3. 約款や個人情報の取り扱い同意にチェック 4. 【新規登録】をクリック ※GitHubアカウント連携も可 63
  64. 64. ログイン方法 メールアドレス認証 1. メールアドレスとパスワードを入力 2. 【ログイン】をクリック GitHub認証 1. 【GitHubでログイン】をクリック 64
  65. 65. Arukasのダッシュボード APIキー管理 ログアウト・ボタン アプリ操作パネル (起動、設定変更、編集、削除) 新規アプリ追加 アプリの状態表示 65
  66. 66. 9. Arukas で実行 66 $ docker Docker Hub Nginx$ docker$ docker Arukas で Docker Hub にあるイメージをデプロイ(実行)できます mynginx:1.1 mynginx:1.1
  67. 67. 新しいアプリの実行例 イメージ「dockercloud/hello-world」を起動 1. 【アプリ作成】ボタンをクリック 67
  68. 68. 2. アプリ作成に必要な各種情報を入力 “APP Name” はアプリ名です。 【 myapp 】と入力します。 “Image” は Docker イメージ名 を入力します。ここでは、 【 dockercloud/hello-world】 を指定します。 “Endpoint” はブラウザ等でアク セス可能なエンド・ポイントです。 “任意名称.arukascloud.io” を指定するか、空白時はランダムな 名称が自動で割り当てられます。 “Port” はアプリが使用するポート 番号です。ここでは【 80 】を指定 します。 68
  69. 69. 3. 【アプリケーションを作成】ボタンをクリック 4. 画面が切り替わり、アプリ一覧に「myapp」が表示されるが停止状態 69
  70. 70. 5. アプリの【起動】ボタンをクリック 6. 起動確認で【OK】をクリック 7. アプリが起動するまで待つ 約1分でアイコンがオレンジ色(デプロイ中)から緑色(実行中)に変化 70
  71. 71. 8. アプリ名【myapp】のリンクをクリックし、設定情報の確認 9. 詳細画面で、アプリの登録情報や、エンドポイントURLを確認 71
  72. 72. 課題:自分の【mynginx:1.1】コンテナを起動しよう! アプリ追加で「images」に【ユーザ名/mynginx:1.1】を追加 ブラウザからエンドポイントを表示し、自分で作成したコンテンツをブラウザで表示 72 $ docker Docker Hub Nginx mynginx:1.1 mynginx:1.1
  73. 73. 73 ふりかえり
  74. 74. まとめ 74 • 開発、移動、実行しやすい環境 Docker は Linux の各種技術をコンテナ化 Dockdr イメージを使えば、どこでも移動・実行できる • Arukas はコンテナを動かす環境 サーバを用意しなくても、すぐに使える Docker Hub のイメージを実行可能 エンドポイントの割り当て機能を持つ
  75. 75. Dockerの情報を追うには? 75 • Docker blog https://blog.docker.com/ • SNS https://twitter.com/docker http://www.slideshare.net/docker • ドキュメント https://docs.docker.com/
  76. 76. 何か気になるところはありますか? 76 • Docker 日本語訳作ってます http://docs.docker.jp/ • 過去の発表スライド http://slideshare.net/zembutsu twitter: @zembutsu

×