SlideShare a Scribd company logo
1 of 40
Download to read offline
Docker ハンズオン
JAWS-UG コンテナ支部
Docker入門 #02
@pottava
(AWS Certified) SA, DevOps Engineer Pro
Love: S3, CloudFront and Containers
中丸 良
ハンズオン
1. 準備
2. docker images, ps(イメージ、コンテナの一覧取得)
3. docker run(コンテナの起動)
4. docker run -d(デーモンコンテナの起動)
5. docker logs(コンテナのログを確認する)
6. docker start, stop, restart(コンテナの開始・停止)
7. MySQLを複数立ち上げて繋いでみる
8. 後片付け
9. Appendix
中丸 良
1. 準備
1. 準備
今日の手順はこちら
http://goo.gl/NQlUjH
1.1. EC2コンソール東京リージョンにログイン
ハンズオンで使えるキーペアがあるか
確認。なければ作りましょう!
https://goo.gl/eb1pKo
1.2. 以下リンクから、CloudFormation実行
https://goo.gl/NrTjMM
1.3. Docker ToolBoxのダウンロード
https://www.docker.com/docker-toolbox
1. 準備
1.4. Docker Quickstart Terminalを起動します
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
______ o __/
  __/
___________/
docker is configured to use the default machine with IP 192.168.99.102
For help getting started, check out the docs at https://docs.docker.com
your-host:~ $
your-host:~ $ docker version
1.5. 以下のコマンドを実行してみましょう
(dockerのAPIバージョンは1.20のはず)
EC2インスタンスって必要?
本来、Dockerの操作には不要です。
今日は DRECOMさんの会場をお貸しいただいていますが
みんなで一斉に自分の端末に直接 docker pullで
Dockerイメージを引っ張ってくると
会場のネットワークに負荷がかかるため、
実際の Docker操作をクラウド上で実施する形式にしています。
そのため、今日のハンズオンはちょっとだけ複雑な構成ですが
あとで自宅やオフィスで Dockerで遊ぶなら、もっとずっと簡単です。
特に、先ほどインストールしていただいた Docker ToolBoxは便利!
DockerToolBoxってなに
道具箱というだけあって、 Docker操作に必要なツール集が入っており
大きく分けると次の 2つがインストールされます。
・Docker Quickstart Terminal
・Kitematic
Docker Quickstart Terminalはいわゆる黒い画面で、起動すると
・dockerクライアント(docker psとか docker runとかに使う)
・docker-machine
・docker-compose
あたりが使えます。
DockerToolBoxってなに
今日は諸事情で使えませんが、黒い画面が 嫌な 不慣れな方、
ぜひ Kitematicというツールを起動してみてください。
DockerToolBoxってなに
ToolBoxは端末上の VirtualBoxという仮想環境の中にサーバーを起動し、
そこで動く Dockerデーモンと Docker Remote APIで通信しています。
(なので、 ToolBoxのツールを通して起動した Dockerコンテナは
 みなさんの Windowsや Mac直下ではなく、その中の
 仮想サーバーの中で動いています)
Docker Remote API
今日の構成
EC2を使うため、今日はこうなります。
・SSH接続ができる方はサーバの中で直接 Dockerを操作
・もしくは自端末の Docker Quickstart Terminalから Remote API経由で操作
SSH & docker API
or
Docker Remote API
EC2インスタンス一覧から起動した EC2インスタンスを探し、
Public IPアドレスをコピー(Ctrl+C)します。
https://goo.gl/CjfB94
1. 準備(あと一歩)
・「サーバの中で直接 Dockerを操作」したい方(推奨!!)
下記コマンドを自分用に編集して SSH接続しましょう!
(ユーザ名は ec2-userではなく、coreです!)
・「Docker Quickstart Terminalから Remote API経由で操作」したい方
必要な環境変数をセットしましょう!
1. 準備(あと一歩)
your-host:~ $ export DOCKER_HOST=tcp://ec2.public.ip.address:2375
your-host:~ $ export DOCKER_TLS_VERIFY=
your-host:~ $ export DOCKER_CERT_PATH=
your-host:~ $
your-host:~ $ docker info
Containers: 1
Images: 497
…
Operating System: CoreOS 845.0.0
your-host:~ $ ssh -i your-keypair.pem core@ec2.public.ip.address
Last login: Mon Jul 27 18:00:00 2015 from your.public.ip.address
CoreOS stable (845.0.0)
Update Strategy: No Reboots
core@ec2.private.ip.address$
中丸 良
2. docker images, ps(イメージ、コンテナの一覧取得)
2. docker images, ps(イメージ、コンテナの一覧取得)
・docker images
core@ec2.private.ip.address$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx latest 914c82c5a678 29 hours ago 132.7 MB
rails 4.2.4 8f811c47f859 5 days ago 824.9 MB
…
docker pullは多少時間がかかる操作なので、今回は 3分クッキング的に
あらかじめ docker pullしておいた AMIを使っています。
すでに pull済みの Dockerイメージの一覧が表示されます。
Dockerコンテナは、このイメージをもとに起動することになります。
2. docker images, ps(イメージ、コンテナの一覧取得)
・docker ps
core@ec2.private.ip.address$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
e54b78e56bf7 pottava/docker-webui:latest "/go/bin/docker-webui" 2 seconds ago
Up Less than a second 0.0.0.0:9000->9000/tcp monit
起動中の Dockerコンテナがひとつ確認できます。
実はこれ、EC2起動時の UserDataで起動しておいたものです。
ブラウザで
http://ec2.public.ip.address:9000/
を開くと、この起動しているコンテナにアクセスできます。
Dockerコンテナの IDと名前について
さきほどの psではこんな結果がでていました。
core@ec2.private.ip.address$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
e54b78e56bf7 pottava/docker-webui:latest "/go/bin/docker-webui" 2 seconds ago
Up Less than a second 0.0.0.0:9000->9000/tcp monit
CONTAINER ID列にあるのが ID、NAMES列にあるのが名前です。
Dockerコンテナを操作する場合、このどちらかを指定します。
・docker inspect monit
・docker rm e54
IDの長さは 64文字ですが、コンテナを特定するのに十分な長さがあれば
動作するので、上の例のように 3文字で動いたりもします。
中丸 良
3. docker run(コンテナの起動)
3. docker run(コンテナの起動)
・docker run
core@ec2.private.ip.address$ docker run java:8 java -version
openjdk version "1.8.0_66-internal"
OpenJDK Runtime Environment (build 1.8.0_66-internal-b01)
OpenJDK 64-Bit Server VM (build 25.66-b01, mixed mode)
docker runに続く部分の解釈、難しい。私も未だによく間違えます。
上の例で言うと
・java:8がコンテナのベースとなる Dockerイメージの指定
・java -versionがコンテナの中で実行したいコマンド
です。
docker run、感動…しました!?
さて実際に docker runしてみましたが、感動できましたか?
ついいましがた Javaのコマンドを実行しましたが
EC2インスタンスには、Javaはインストールしていません。
ホストを汚さずに、あらゆるアプリを動かせるのが Dockerです。
例えばこんなことも。
core@ec2.private.ip.address$ docker run java:7 java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
同じ EC2インスタンス上で、簡単に Java8と Java7が使えましたね!
あとでやりますが、MySQL 5.5と 5.6の同時起動なども簡単です。
中丸 良
4. docker run -d(デーモンコンテナの起動)
4. docker run -d(デーモンコンテナの起動)
・docker run -d
core@ec2.private.ip.address$ docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello
world; sleep 3; done"
9751c76b88f52a8bdd514494a13dcc9a5815fb294680f202479be871538ae07a
-d オプション をつけて起動したコンテナは、プログラムが終了しない限り
バックグラウンドプロセスとして動き続ける、デーモンになります。
上の例では、3秒おきに標準出力へ「hello world」を出し続けます。
(ubuntu:14.04 という Dockerイメージをベースに
 /bin/sh -c “while true; do echo hello world; sleep 3; done” を実行しています)
1行だけ応答がありますが、これは Dockerコンテナの IDです。
この IDか名前を使えば、デーモンを開始したり停止したりできます!(後述)
いくつか docker runしてみる
docker imagesで返ってくるリポジトリ名のどれかを
DockerHub ( https://hub.docker.com/ ) で検索してみましょう。
例えば MariaDB ( https://hub.docker.com/_/mariadb/ ) 、
チュートリアルに従って docker runしてみます。
core@ec2.private.ip.address$ docker run -d -e MYSQL_ROOT_PASSWORD=p4ssw0rd -p 3306:3306 mariadb:10
dcb9ca3cf5b364a9f110d4bc19e503d8b346cf01f4a8f3024fcc77a8dad6b9a9
EC2の Public IPアドレスと↑で解放したポートを指定したら
ローカルの Macから MariaDBにちゃんと繋がりました。
中丸 良
5. docker logs(コンテナのログを確認する)
5. docker logs(コンテナのログを確認する)
・docker logs
core@ec2.private.ip.address$ docker logs monit
DEBUG: 2015/10/30 03:20:08 docker.go:58: Docker container ID:
e54b78e56bf7620c4fec9730f3602518c90f11c8d7a3be3d4d30dcf1316a71f0
DEBUG: 2015/10/30 03:20:08 main.go:19: [config] Name: docker web-ui, Port: 9000, ViewOnly:
false, LogLevel: 99, LabelOverrideNames: , LabelFilters: [all], DockerEndpoints: [unix:///var/
run/docker.sock], DockerCertPath: [], DockerPullBeginTimeout: 3m0s, DockerPullTimeout: 2h0m0s,
DockerStatTimeout: 5s, DockerStartTimeout: 10s, DockerStopTimeout: 10s, DockerRestartTimeout:
10s, DockerKillTimeout: 10s, DockerRmTimeout: 5m0s, DockerCommitTimeout: 30s, StaticFileHost: ,
StaticFilePath: /go/src/github.com/pottava/docker-webui/app, PreventSelfStop: true,
HiddenContainers: []
INFO: 2015/10/30 03:20:08 main.go:26: [service] listening on port 9000
コンテナが標準出力(& エラー)に出したログを確認することができます。
出力される内容はコンテナ上で動かすアプリケーション次第なのですが
何か問題があったときは、ここで有益な情報が得られる・・はずです。
中丸 良
6. docker start, stop, restart(コンテナの開始・停止)
6. docker start, stop, restart(コンテナの開始・停止)
・docker stop
core@ec2.private.ip.address$ docker stop monit
monit
ブラウザで先ほど繋がった
http://ec2.public.ip.address:9000/
が、いまは繋がらないはずです。
docker ps -aコマンドを実行すると、monitの STATUSが exitになっています。
(aオプションをつけると停止したコンテナもすべて表示されます)
core@ec2.private.ip.address$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
2bd96a54e743 mariadb:10 "/docker-entrypoint.s" 24 seconds ago
Up 24 seconds 0.0.0.0:3306->3306/tcp determined_sammet
d430c980a497 java:8 "java -version" 18 minutes ago
Exited (0) 1 seconds ago hungry_ardinghelli
e54b78e56bf7 pottava/docker-webui:latest "/go/bin/docker-webui" 2 hours ago
Exited (2) 3 minutes ago monit
6. docker start, stop, restart(コンテナの開始・停止)
・docker start
core@ec2.private.ip.address$ docker start monit
monit
ブラウザで
http://ec2.public.ip.address:9000/
を確認すると、また繋がるようになっています。
core@ec2.private.ip.address$ docker restart monit
monit
コンテナ内の状態を初期化したいとき、最初から処理をやり直したいときなど
コンテナを再起動したいときは docker restartを使うと便利です。
・docker restart
中丸 良
7. MySQLを複数立ち上げて繋いでみる
その前に、掃除します
t2.microさんは非力なので、動いているコンテナをいったん破棄します。
core@ec2.private.ip.address$ docker stop $(docker ps -aq)
2bd96a54e743
d430c980a497
e54b78e56bf7
core@ec2.private.ip.address$ docker rm $(docker ps -aq)
2bd96a54e743
d430c980a497
e54b78e56bf79
7. MySQLを複数立ち上げて繋いでみる
MySQLの 2つのバージョンを同時に立ち上げてみましょう
core@ec2.private.ip.address$ docker run -d --name mysql56 -e MYSQL_ROOT_PASSWORD=pw mysql:5.6
ae3213df03304410414bfce05c965a950a54bc338d1c5806eec759c6f249e7c5
core@ec2.private.ip.address$
core@ec2.private.ip.address$ docker run -d --name mysql57 -e MYSQL_ROOT_PASSWORD=pw mysql:5.7
74c1877942714f96727c1cbcee9eb2ff142b8fc323e2a887c46bc1645601b3d6
core@ec2.private.ip.address$ docker logs -f mysql57
Initializing database
2015-10-30T05:44:19.594993Z 0 [Warning] InnoDB: New log files created, LSN=45790
…
2015-10-30T05:44:31.922457Z 0 [Note] mysqld: ready for connections.
Version: '5.7.9' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
docker logsコマンドで、DBが起動完了するのを見守ります。
“ready for connections.” の文字が見えたら、Ctrl+Cで
ログの監視をやめます。
7. MySQLを複数立ち上げて繋いでみる
MySQL 5.6に接続して、様子をみてみましょう。
core@ec2.private.ip.address$ docker run -it --rm --link mysql56:mysql mysql:5.6 sh -c 'exec
mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -
p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.6.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
繋がりましたね!もちろんここで、SQLも実行できます。
(Ctrl+Dで MySQLとの接続を切断できます)
mysql> show databases;
mysql> select host, user, password from mysql.user;
7. MySQLを複数立ち上げて繋いでみる
MySQL 5.7に接続してみましょう。
core@ec2.private.ip.address$ docker run -it --rm --link mysql57:mysql mysql:5.7 sh -c 'exec
mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -
p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Warning: Using a password on the command line interface can be insecure.
Your MySQL connection id is 2
Server version: 5.7.9 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
繋がりましたね!
このコマンドにあるように、Webアプリケーションコンテナなどから
起動した MySQLに接続するには、linkオプション + 環境変数、
または pオプションを利用することになります。
中丸 良
8. 後片付け
8. 後片付け
CloudFormationコンソールを開きます
https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks
今回ハンズオンで使ったスタックを選択し「Delete Stack」しましょう
・「Docker Quickstart Terminalから Remote API経由で操作」した方
環境変数をもとにもどしましょう
8. 後片付け
your-host:~ $ unset DOCKER_HOST
your-host:~ $ unset DOCKER_TLS_VERIFY
your-host:~ $ unset DOCKER_CERT_PATH
your-host:~ $
your-host:~ $ env | grep DOCKER
your-host:~ $
your-host:~ $ docker info
Get http:///var/run/docker.sock/v1.20/info: dial unix /var/run/docker.sock: no such file or
directory.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?
中丸 良
9. Appendix
CLI専門支部との合同ハンズオンを企画中です。
12月ごろ開催します!!
ECS-CLIハンズオン
✖
Docker社の Jérôme Petazzoniさんが re:Invent2015で行った
“From Local Docker Development to Production Deployment” というセッション
http://goo.gl/ONXuTp
とてもいい資料だったので翻訳してあります。ぜひご覧ください。
http://goo.gl/hEvscs
• 開発環境のための Docker Compose
• その環境を本番稼動させるまでの話
- Dockerクラスタのプロビジョニング
- コンテナイメージのビルドとそのデプロイ
- サービスディスカバリ
• Docker Compose, Machine, Swarm, ECS
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Thank

More Related Content

What's hot

Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門Tsukasa Kato
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようmookjp
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
DockerクイックツアーEtsuji Nakai
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションDocker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションMasahito Zembutsu
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法Masahito Zembutsu
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と DockerのキホンNaoki Nagazumi
 
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオンJAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオンRyo Nakamaru
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月VirtualTech Japan Inc.
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響Masahito Zembutsu
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 

What's hot (20)

Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションDocker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオンJAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 

Viewers also liked

JAWS-UGコンテナ支部#2「EC2」から「ECS」へ
JAWS-UGコンテナ支部#2「EC2」から「ECS」へJAWS-UGコンテナ支部#2「EC2」から「ECS」へ
JAWS-UGコンテナ支部#2「EC2」から「ECS」へHiroyasu Suzuki
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015Ryo Nakamaru
 
Docker1.12イングレスロードバランサ
Docker1.12イングレスロードバランサDocker1.12イングレスロードバランサ
Docker1.12イングレスロードバランサYuji Oshima
 
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するオンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するKenkichi Okazaki
 
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話Koichiro Sumi
 
Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較Yoshinori Teraoka
 
AWS Shieldのご紹介 Managed DDoS Protection
AWS Shieldのご紹介 Managed DDoS ProtectionAWS Shieldのご紹介 Managed DDoS Protection
AWS Shieldのご紹介 Managed DDoS ProtectionAmazon Web Services Japan
 
ユーザーからみたre:Inventのこれまでと今後
ユーザーからみたre:Inventのこれまでと今後ユーザーからみたre:Inventのこれまでと今後
ユーザーからみたre:Inventのこれまでと今後Recruit Technologies
 
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems ManagerAWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems ManagerAmazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターンAWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターンAmazon Web Services Japan
 
キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06Toru Koido
 
AWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWSAWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWSAmazon Web Services Japan
 
AWS Black Belt Online Seminar AWSで実現するDisaster Recovery
AWS Black Belt Online Seminar AWSで実現するDisaster RecoveryAWS Black Belt Online Seminar AWSで実現するDisaster Recovery
AWS Black Belt Online Seminar AWSで実現するDisaster RecoveryAmazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon AthenaAWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon AthenaAmazon Web Services Japan
 
あなたの業務に機械学習を活用する5つのポイント
あなたの業務に機械学習を活用する5つのポイントあなたの業務に機械学習を活用する5つのポイント
あなたの業務に機械学習を活用する5つのポイントShohei Hido
 
AWS Black Belt Online Seminar 2017 Auto Scaling
AWS Black Belt Online Seminar 2017 Auto ScalingAWS Black Belt Online Seminar 2017 Auto Scaling
AWS Black Belt Online Seminar 2017 Auto ScalingAmazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 Amazon Chime
AWS Black Belt Online Seminar 2017 Amazon ChimeAWS Black Belt Online Seminar 2017 Amazon Chime
AWS Black Belt Online Seminar 2017 Amazon ChimeAmazon Web Services Japan
 

Viewers also liked (17)

JAWS-UGコンテナ支部#2「EC2」から「ECS」へ
JAWS-UGコンテナ支部#2「EC2」から「ECS」へJAWS-UGコンテナ支部#2「EC2」から「ECS」へ
JAWS-UGコンテナ支部#2「EC2」から「ECS」へ
 
コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015コンソールゲームを世界展開してみた - JAWS DAYS 2015
コンソールゲームを世界展開してみた - JAWS DAYS 2015
 
Docker1.12イングレスロードバランサ
Docker1.12イングレスロードバランサDocker1.12イングレスロードバランサ
Docker1.12イングレスロードバランサ
 
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するオンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化する
 
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
 
Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較
 
AWS Shieldのご紹介 Managed DDoS Protection
AWS Shieldのご紹介 Managed DDoS ProtectionAWS Shieldのご紹介 Managed DDoS Protection
AWS Shieldのご紹介 Managed DDoS Protection
 
ユーザーからみたre:Inventのこれまでと今後
ユーザーからみたre:Inventのこれまでと今後ユーザーからみたre:Inventのこれまでと今後
ユーザーからみたre:Inventのこれまでと今後
 
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems ManagerAWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
 
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターンAWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
AWS Black Belt Online Seminar 2017 IoT向け最新アーキテクチャパターン
 
キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06
 
AWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWSAWS Black Belt Online Seminar 2017 Docker on AWS
AWS Black Belt Online Seminar 2017 Docker on AWS
 
AWS Black Belt Online Seminar AWSで実現するDisaster Recovery
AWS Black Belt Online Seminar AWSで実現するDisaster RecoveryAWS Black Belt Online Seminar AWSで実現するDisaster Recovery
AWS Black Belt Online Seminar AWSで実現するDisaster Recovery
 
AWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon AthenaAWS Black Belt Online Seminar 2017 Amazon Athena
AWS Black Belt Online Seminar 2017 Amazon Athena
 
あなたの業務に機械学習を活用する5つのポイント
あなたの業務に機械学習を活用する5つのポイントあなたの業務に機械学習を活用する5つのポイント
あなたの業務に機械学習を活用する5つのポイント
 
AWS Black Belt Online Seminar 2017 Auto Scaling
AWS Black Belt Online Seminar 2017 Auto ScalingAWS Black Belt Online Seminar 2017 Auto Scaling
AWS Black Belt Online Seminar 2017 Auto Scaling
 
AWS Black Belt Online Seminar 2017 Amazon Chime
AWS Black Belt Online Seminar 2017 Amazon ChimeAWS Black Belt Online Seminar 2017 Amazon Chime
AWS Black Belt Online Seminar 2017 Amazon Chime
 

Similar to JAWS-UG コンテナ支部 Docker入門 ハンズオン

Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Naoki Nagazumi
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspecTsuyoshi Yamada
 
MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725Masafumi Noguchi
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Masahito Zembutsu
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコムTomoyaTakegoshi
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
コンテナ on Windows
コンテナ on Windowsコンテナ on Windows
コンテナ on WindowsTsubasa Nomura
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方Kento Aoyama
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築Saito5656
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイoshiro_seiya
 
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Masafumi Noguchi
 
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックOpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックEtsuji Nakai
 

Similar to JAWS-UG コンテナ支部 Docker入門 ハンズオン (20)

Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspec
 
MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
 
Docker入門
Docker入門Docker入門
Docker入門
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
コンテナ on Windows
コンテナ on Windowsコンテナ on Windows
コンテナ on Windows
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
 
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックOpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
 

JAWS-UG コンテナ支部 Docker入門 ハンズオン

  • 2. @pottava (AWS Certified) SA, DevOps Engineer Pro Love: S3, CloudFront and Containers 中丸 良
  • 3. ハンズオン 1. 準備 2. docker images, ps(イメージ、コンテナの一覧取得) 3. docker run(コンテナの起動) 4. docker run -d(デーモンコンテナの起動) 5. docker logs(コンテナのログを確認する) 6. docker start, stop, restart(コンテナの開始・停止) 7. MySQLを複数立ち上げて繋いでみる 8. 後片付け 9. Appendix
  • 6. 1. 準備 1.4. Docker Quickstart Terminalを起動します ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ ______ o __/ __/ ___________/ docker is configured to use the default machine with IP 192.168.99.102 For help getting started, check out the docs at https://docs.docker.com your-host:~ $ your-host:~ $ docker version 1.5. 以下のコマンドを実行してみましょう (dockerのAPIバージョンは1.20のはず)
  • 7. EC2インスタンスって必要? 本来、Dockerの操作には不要です。 今日は DRECOMさんの会場をお貸しいただいていますが みんなで一斉に自分の端末に直接 docker pullで Dockerイメージを引っ張ってくると 会場のネットワークに負荷がかかるため、 実際の Docker操作をクラウド上で実施する形式にしています。 そのため、今日のハンズオンはちょっとだけ複雑な構成ですが あとで自宅やオフィスで Dockerで遊ぶなら、もっとずっと簡単です。 特に、先ほどインストールしていただいた Docker ToolBoxは便利!
  • 8. DockerToolBoxってなに 道具箱というだけあって、 Docker操作に必要なツール集が入っており 大きく分けると次の 2つがインストールされます。 ・Docker Quickstart Terminal ・Kitematic Docker Quickstart Terminalはいわゆる黒い画面で、起動すると ・dockerクライアント(docker psとか docker runとかに使う) ・docker-machine ・docker-compose あたりが使えます。
  • 10. DockerToolBoxってなに ToolBoxは端末上の VirtualBoxという仮想環境の中にサーバーを起動し、 そこで動く Dockerデーモンと Docker Remote APIで通信しています。 (なので、 ToolBoxのツールを通して起動した Dockerコンテナは  みなさんの Windowsや Mac直下ではなく、その中の  仮想サーバーの中で動いています) Docker Remote API
  • 13. ・「サーバの中で直接 Dockerを操作」したい方(推奨!!) 下記コマンドを自分用に編集して SSH接続しましょう! (ユーザ名は ec2-userではなく、coreです!) ・「Docker Quickstart Terminalから Remote API経由で操作」したい方 必要な環境変数をセットしましょう! 1. 準備(あと一歩) your-host:~ $ export DOCKER_HOST=tcp://ec2.public.ip.address:2375 your-host:~ $ export DOCKER_TLS_VERIFY= your-host:~ $ export DOCKER_CERT_PATH= your-host:~ $ your-host:~ $ docker info Containers: 1 Images: 497 … Operating System: CoreOS 845.0.0 your-host:~ $ ssh -i your-keypair.pem core@ec2.public.ip.address Last login: Mon Jul 27 18:00:00 2015 from your.public.ip.address CoreOS stable (845.0.0) Update Strategy: No Reboots core@ec2.private.ip.address$
  • 14. 中丸 良 2. docker images, ps(イメージ、コンテナの一覧取得)
  • 15. 2. docker images, ps(イメージ、コンテナの一覧取得) ・docker images core@ec2.private.ip.address$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nginx latest 914c82c5a678 29 hours ago 132.7 MB rails 4.2.4 8f811c47f859 5 days ago 824.9 MB … docker pullは多少時間がかかる操作なので、今回は 3分クッキング的に あらかじめ docker pullしておいた AMIを使っています。 すでに pull済みの Dockerイメージの一覧が表示されます。 Dockerコンテナは、このイメージをもとに起動することになります。
  • 16. 2. docker images, ps(イメージ、コンテナの一覧取得) ・docker ps core@ec2.private.ip.address$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e54b78e56bf7 pottava/docker-webui:latest "/go/bin/docker-webui" 2 seconds ago Up Less than a second 0.0.0.0:9000->9000/tcp monit 起動中の Dockerコンテナがひとつ確認できます。 実はこれ、EC2起動時の UserDataで起動しておいたものです。 ブラウザで http://ec2.public.ip.address:9000/ を開くと、この起動しているコンテナにアクセスできます。
  • 17. Dockerコンテナの IDと名前について さきほどの psではこんな結果がでていました。 core@ec2.private.ip.address$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e54b78e56bf7 pottava/docker-webui:latest "/go/bin/docker-webui" 2 seconds ago Up Less than a second 0.0.0.0:9000->9000/tcp monit CONTAINER ID列にあるのが ID、NAMES列にあるのが名前です。 Dockerコンテナを操作する場合、このどちらかを指定します。 ・docker inspect monit ・docker rm e54 IDの長さは 64文字ですが、コンテナを特定するのに十分な長さがあれば 動作するので、上の例のように 3文字で動いたりもします。
  • 18. 中丸 良 3. docker run(コンテナの起動)
  • 19. 3. docker run(コンテナの起動) ・docker run core@ec2.private.ip.address$ docker run java:8 java -version openjdk version "1.8.0_66-internal" OpenJDK Runtime Environment (build 1.8.0_66-internal-b01) OpenJDK 64-Bit Server VM (build 25.66-b01, mixed mode) docker runに続く部分の解釈、難しい。私も未だによく間違えます。 上の例で言うと ・java:8がコンテナのベースとなる Dockerイメージの指定 ・java -versionがコンテナの中で実行したいコマンド です。
  • 20. docker run、感動…しました!? さて実際に docker runしてみましたが、感動できましたか? ついいましがた Javaのコマンドを実行しましたが EC2インスタンスには、Javaはインストールしていません。 ホストを汚さずに、あらゆるアプリを動かせるのが Dockerです。 例えばこんなことも。 core@ec2.private.ip.address$ docker run java:7 java -version java version "1.7.0_79" OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-1~deb8u1) OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode) 同じ EC2インスタンス上で、簡単に Java8と Java7が使えましたね! あとでやりますが、MySQL 5.5と 5.6の同時起動なども簡単です。
  • 21. 中丸 良 4. docker run -d(デーモンコンテナの起動)
  • 22. 4. docker run -d(デーモンコンテナの起動) ・docker run -d core@ec2.private.ip.address$ docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 3; done" 9751c76b88f52a8bdd514494a13dcc9a5815fb294680f202479be871538ae07a -d オプション をつけて起動したコンテナは、プログラムが終了しない限り バックグラウンドプロセスとして動き続ける、デーモンになります。 上の例では、3秒おきに標準出力へ「hello world」を出し続けます。 (ubuntu:14.04 という Dockerイメージをベースに  /bin/sh -c “while true; do echo hello world; sleep 3; done” を実行しています) 1行だけ応答がありますが、これは Dockerコンテナの IDです。 この IDか名前を使えば、デーモンを開始したり停止したりできます!(後述)
  • 23. いくつか docker runしてみる docker imagesで返ってくるリポジトリ名のどれかを DockerHub ( https://hub.docker.com/ ) で検索してみましょう。 例えば MariaDB ( https://hub.docker.com/_/mariadb/ ) 、 チュートリアルに従って docker runしてみます。 core@ec2.private.ip.address$ docker run -d -e MYSQL_ROOT_PASSWORD=p4ssw0rd -p 3306:3306 mariadb:10 dcb9ca3cf5b364a9f110d4bc19e503d8b346cf01f4a8f3024fcc77a8dad6b9a9 EC2の Public IPアドレスと↑で解放したポートを指定したら ローカルの Macから MariaDBにちゃんと繋がりました。
  • 24. 中丸 良 5. docker logs(コンテナのログを確認する)
  • 25. 5. docker logs(コンテナのログを確認する) ・docker logs core@ec2.private.ip.address$ docker logs monit DEBUG: 2015/10/30 03:20:08 docker.go:58: Docker container ID: e54b78e56bf7620c4fec9730f3602518c90f11c8d7a3be3d4d30dcf1316a71f0 DEBUG: 2015/10/30 03:20:08 main.go:19: [config] Name: docker web-ui, Port: 9000, ViewOnly: false, LogLevel: 99, LabelOverrideNames: , LabelFilters: [all], DockerEndpoints: [unix:///var/ run/docker.sock], DockerCertPath: [], DockerPullBeginTimeout: 3m0s, DockerPullTimeout: 2h0m0s, DockerStatTimeout: 5s, DockerStartTimeout: 10s, DockerStopTimeout: 10s, DockerRestartTimeout: 10s, DockerKillTimeout: 10s, DockerRmTimeout: 5m0s, DockerCommitTimeout: 30s, StaticFileHost: , StaticFilePath: /go/src/github.com/pottava/docker-webui/app, PreventSelfStop: true, HiddenContainers: [] INFO: 2015/10/30 03:20:08 main.go:26: [service] listening on port 9000 コンテナが標準出力(& エラー)に出したログを確認することができます。 出力される内容はコンテナ上で動かすアプリケーション次第なのですが 何か問題があったときは、ここで有益な情報が得られる・・はずです。
  • 26. 中丸 良 6. docker start, stop, restart(コンテナの開始・停止)
  • 27. 6. docker start, stop, restart(コンテナの開始・停止) ・docker stop core@ec2.private.ip.address$ docker stop monit monit ブラウザで先ほど繋がった http://ec2.public.ip.address:9000/ が、いまは繋がらないはずです。 docker ps -aコマンドを実行すると、monitの STATUSが exitになっています。 (aオプションをつけると停止したコンテナもすべて表示されます) core@ec2.private.ip.address$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2bd96a54e743 mariadb:10 "/docker-entrypoint.s" 24 seconds ago Up 24 seconds 0.0.0.0:3306->3306/tcp determined_sammet d430c980a497 java:8 "java -version" 18 minutes ago Exited (0) 1 seconds ago hungry_ardinghelli e54b78e56bf7 pottava/docker-webui:latest "/go/bin/docker-webui" 2 hours ago Exited (2) 3 minutes ago monit
  • 28. 6. docker start, stop, restart(コンテナの開始・停止) ・docker start core@ec2.private.ip.address$ docker start monit monit ブラウザで http://ec2.public.ip.address:9000/ を確認すると、また繋がるようになっています。 core@ec2.private.ip.address$ docker restart monit monit コンテナ内の状態を初期化したいとき、最初から処理をやり直したいときなど コンテナを再起動したいときは docker restartを使うと便利です。 ・docker restart
  • 30. その前に、掃除します t2.microさんは非力なので、動いているコンテナをいったん破棄します。 core@ec2.private.ip.address$ docker stop $(docker ps -aq) 2bd96a54e743 d430c980a497 e54b78e56bf7 core@ec2.private.ip.address$ docker rm $(docker ps -aq) 2bd96a54e743 d430c980a497 e54b78e56bf79
  • 31. 7. MySQLを複数立ち上げて繋いでみる MySQLの 2つのバージョンを同時に立ち上げてみましょう core@ec2.private.ip.address$ docker run -d --name mysql56 -e MYSQL_ROOT_PASSWORD=pw mysql:5.6 ae3213df03304410414bfce05c965a950a54bc338d1c5806eec759c6f249e7c5 core@ec2.private.ip.address$ core@ec2.private.ip.address$ docker run -d --name mysql57 -e MYSQL_ROOT_PASSWORD=pw mysql:5.7 74c1877942714f96727c1cbcee9eb2ff142b8fc323e2a887c46bc1645601b3d6 core@ec2.private.ip.address$ docker logs -f mysql57 Initializing database 2015-10-30T05:44:19.594993Z 0 [Warning] InnoDB: New log files created, LSN=45790 … 2015-10-30T05:44:31.922457Z 0 [Note] mysqld: ready for connections. Version: '5.7.9' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) docker logsコマンドで、DBが起動完了するのを見守ります。 “ready for connections.” の文字が見えたら、Ctrl+Cで ログの監視をやめます。
  • 32. 7. MySQLを複数立ち上げて繋いでみる MySQL 5.6に接続して、様子をみてみましょう。 core@ec2.private.ip.address$ docker run -it --rm --link mysql56:mysql mysql:5.6 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot - p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 1 Server version: 5.6.27 MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> 繋がりましたね!もちろんここで、SQLも実行できます。 (Ctrl+Dで MySQLとの接続を切断できます) mysql> show databases; mysql> select host, user, password from mysql.user;
  • 33. 7. MySQLを複数立ち上げて繋いでみる MySQL 5.7に接続してみましょう。 core@ec2.private.ip.address$ docker run -it --rm --link mysql57:mysql mysql:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot - p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' Warning: Using a password on the command line interface can be insecure. Your MySQL connection id is 2 Server version: 5.7.9 MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> 繋がりましたね! このコマンドにあるように、Webアプリケーションコンテナなどから 起動した MySQLに接続するには、linkオプション + 環境変数、 または pオプションを利用することになります。
  • 36. ・「Docker Quickstart Terminalから Remote API経由で操作」した方 環境変数をもとにもどしましょう 8. 後片付け your-host:~ $ unset DOCKER_HOST your-host:~ $ unset DOCKER_TLS_VERIFY your-host:~ $ unset DOCKER_CERT_PATH your-host:~ $ your-host:~ $ env | grep DOCKER your-host:~ $ your-host:~ $ docker info Get http:///var/run/docker.sock/v1.20/info: dial unix /var/run/docker.sock: no such file or directory. * Are you trying to connect to a TLS-enabled daemon without TLS? * Is your docker daemon up and running?
  • 39. Docker社の Jérôme Petazzoniさんが re:Invent2015で行った “From Local Docker Development to Production Deployment” というセッション http://goo.gl/ONXuTp とてもいい資料だったので翻訳してあります。ぜひご覧ください。 http://goo.gl/hEvscs • 開発環境のための Docker Compose • その環境を本番稼動させるまでの話 - Dockerクラスタのプロビジョニング - コンテナイメージのビルドとそのデプロイ - サービスディスカバリ • Docker Compose, Machine, Swarm, ECS Dockerを使ったローカルでの開発から本番環境へのデプロイまで
  • 40. Thank
  • 41.  you
  • 42.  !!