狠狠撸

狠狠撸Share a Scribd company logo
顿辞肠办别谤ハンズオン
https://goo.gl/7lvcfV
アジェンダ
? 準備
? Docker on GCE
Native Docker
With Docker-Machine
基本操作
? Others
Container Registry
Container Optimised Image
アジェンダ
? 準備
準備
Projectの準備
準備 Projectの準備
? Develper Consoleへアクセス
https://console.developers.google.com
? プロジェクトを何も作ってない人、クリーンなプロジェクトでやりたい人は新たに
プロジェクトを作成
? 課金設定してない人は設定
無料にしたいなら無料枠の設定も行う
どうしても嫌な人は相談してください
準備
Docker Client
インストール
準備 Docker Clientインストール
不要
準備 Docker Clientインストール
まじで
準備 Docker Clientインストール
不要
準備 Docker Clientインストール
準備
? Cloud Shell
Google Cloud Platformを触るために用意されたブラウザ上で動くShell
2015年末まで無料(今はβ扱い)
temporaryのGCEが立つ(OS: Debian)
5GBのディスク、gcloudコマンド、docker、docker-machine、kubectl(k8sのcli)、いろんな開発ツ
ールがインストール済み
準備
? Cloud Shell
今回は基本的にCloud Shellを利用して説明していきます。
MacやWinを使っていて、その上でやりたい方は、Docker ToolboxとCloud SDKをインストールすれば
だいたい同じです。
準備
? Cloud Shell
今回のプロジェクト用にshell変数として以下を設定しておきます。
※以降は ”$ ~”な文はcloud shell、”$(インスタンス名) ~”な 文は対象のインスタンスでの作業
とします。
$ export PROJECT_NAME="project-name"
アジェンダ
? 準備
アジェンダ
? 準備
? Docker on GCE
Native Docker
Docker on GCE(Native Docker)
? やること
作る
インスタンス起動
dockerのインストールは時間がかかるのとハマりやすいので既にインストール済みなCoreOSを使
います。
入る
sshでインスタンスに入る
取得
nginxのdocker imageをpullする
Docker on GCE(Native Docker)
? 作る
インスタンスの起動
CoreOSのCompute Engineインスタンスを作成
Optionの意味
preemptible: preemptibleインスタンスを作る(24hでshutdownする 低価格インスタンス)
$ export INSTANCE_NAME="インスタンス名"
$ gcloud compute --project $PROJECT_NAME instances create $INSTANCE_NAME ?
--zone "us-central1-a" ?
--machine-type "f1-micro" ?
--preemptible ?
--tags "http-server" ?
--image-project "coreos-cloud" ?
--image "coreos-stable-766-5-0-v20151105"
Docker on GCE(Native Docker)
? 入る
sshで作ったインスタンスへ
gcloud compute ssh --project PROJECT_NAME INSTANCE_NAME でssh可能
sshトンネリング(port forward)したい場合とかも↑経由で実施
CoreOS
コンテナを利用した巨大なスケールするプラットフォームを作りやすくするために開発され
$ gcloud compute ssh --project $PROJECT_NAME --zone us-central-a $INSTANCE_NAME
$(instance name) docker -v
Docker version 1.7.1, build df2f73d-dirty
Docker on GCE(Native Docker)
? 取得
nginxのdocker imageを取得
docker pull IMAGENAME で取得
alpine
超軽量Linux Distribution (5MB)
何も入ってない
$(instance name) docker pull connexiolabs/alpine-nginx
latest: Pulling from connexiolabs/alpine-nginx
511136ea3c5a: Pull complete
b0b08730b93c: Pull complete
f83928bbe904: Pull complete
...
Status: Downloaded newer image for connexiolabs/alpine-nginx:latest
Docker on GCE(Native Docker)
? 起動
nginxのdockerコンテナを起動
docker run <OPTIONS> IMAGENAME <COMMAND> で起動
オプション
-d バックエンドで起動
--name コンテナに名前をつける
-p nn:mm ホストのnn番ポートをコンテナのmm番ポートにPort Forward
$(instance name) docker run -d --name nginx -p 80:80 connexiolabs/alpine-nginx
ハッシュ(2d953fef40b6fc80985d88a1caa02a9aace2a8d1410cbeb70c91c863637c66c1)
Docker on GCE(Native Docker)
? テスト
アクセスしてみる
メタデータサーバ
curl "http://metadata.google.internal/computeMetadata/v1/instance/network-
interfaces/0/access-configs/0/external-ip" -H "Metadata-Flavor: Google"
GoogleがホストしているメタデータサーバからこのインスタンスのIPアドレスを取得してい
る
$(instance name) curl http://localhost
$(instance name) IP_ADDRESS=$(curl "http://metadata.google.internal/computeMetadata/v1/instance/network-
interfaces/0/access-configs/0/external-ip" -H "Metadata-Flavor: Google")
$(instance name) curl http://$IP_ADDRESS
アジェンダ
? 準備
? Docker on GCE
Native Docker
アジェンダ
? 準備
? Docker on GCE
Native Docker
With Docker-Machine
Docker on GCE(With Docker-Machine)
? やること
作る & 入れる
Docker-Machine経由でインスタン起動 & Dockerインストール
設定
Docker Remote APIのクライアント側の設定
取得&起動
nginxのdockerコンテナを取得して起動
テスト
Docker on GCE(Docker-Machine)
? 作る & 入れる
Docker-Machine経由でインスタンスを上げつつDockerをインストール
OAuthトークンを発行するために、URLが表示されるのでそのURLへアクセス
最終的に表示されるコードをShellに貼り付ける
$ docker-machine create --driver google --google-project $PROJECT_NAME --google-preemptible --
google-scopes "https://www.googleapis.com/auth/cloud-platform" $INSTANCE_NAME
? 設定
DockerのRemote APIにアクセスするための設定を行う
docker-machine env [NAME] で表示できる
今回はcloud shellからアクセスしているので特に設定は不要ですが、
Docker on GCE(Docker-Machine)
$ docker-machine env $INSTANCE_NAME
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://146.148.73.118:2376"
export DOCKER_CERT_PATH="/home/keisuke_oohashi/.docker/machine/machines/machine2"
export DOCKER_MACHINE_NAME="machine2"
# Run this command to configure your shell:
# eval "$(docker-machine env machine2)"
$ eval $(docker-machine env $INSTANCE_NAME)
$ docker info
※ 結果を確認
Docker on GCE(Native Docker)
? 取得?起動
nginxのdockerコンテナを起動(取得していないimageは取得される)
docker run <OPTIONS> IMAGENAME <COMMAND> で取得?起動
今回はDocker公式imageを利用
DockerのImageを探す場合は Docker Hubを参照
https://hub.docker.com/
$ docker run -d --name web -p 80:80 nginx
ハッシュ(2d953fef40b6fc80985d88a1caa02a9aace2a8d1410cbeb70c91c863637c66c1)
Docker on GCE(Native Docker)
? テスト
nginx(コンテナ)の中に入ってみる
docker exec <OPTIONS> NAME <COMMAND> でコンテナ内でコマンドを叩ける
docker 1.7まではホストからコンテナに対してファイルコピーをする時にdocker execでやるこ
とが多かった
docker 1.8からは docker cp を利用
$ docker exec -it web bash
$(root) ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.8 31532 4936 ? Ss 14:46 0:00 nginx: master process nginx -g daemon off;
nginx 7 0.0 0.4 31908 2760 ? S 14:46 0:00 nginx: worker process
root 8 0.3 0.5 20216 3168 ? Ss 16:47 0:00 bash
root 15 0.0 0.3 17492 2152 ? R+ 16:47 0:00 ps aux
アジェンダ
? 準備
? Docker on GCE
Native Docker
With Docker-Machine
アジェンダ
? 準備
? Docker on GCE
Native Docker
With Docker-Machine
基本操作
基本操作
? やること
docker stop コンテナの停止
docker start コンテナの起動
docker restart コンテナを再起動
docker logs ログを表示
docker cp ファイルコピー
docker rm コンテナの削除
docker commit 起動中のコンテナから新しいimageを作成
docker images イメージ一覧
基本操作 stop, start, restart
? stop
コンテナを停止する
docker stop <OPTIONS> NAME でコンテナを停止
? start
停止したコンテナを起動する
docker start <OPTIONS> NAME でコンテナを起動
$ docker stop web
$ docker start web
$ docker restart web
基本操作 logs, cp
? logs
コンテナで起動しているプロセスのログ(標準出力)を取得する
docker logs <OPTIONS> NAME でコンテナのログを取得
? cp
ホスト、コンテナ間でファイルをコピーする
docker cp <OPTIONS> NAME:PATH LOCALPATHでコンテナからホストにファイルをコピー
$ docker logs web
$ docker cp web:/usr/share/nginx/html/index.html .
$ vi index.html
※ 好きに修正
$ docker cp index.html web:/usr/share/nginx/html/index.html
※ この状態でアクセスして一回確認
基本操作 rm, commit
? rm
コンテナを削除する
docker rn <OPTIONS> NAME でコンテナを削除
コンテナが停止していないと通常は削除できない、起動しているコンテナを削除する場合は -f を
つける
コンテナを削除した場合、コンテナ内で編集した内容は残らない
再度同じイメージを起動しても初期化される
? commit
$ docker rm -f web
$ docker run -d --name web -p 80:80 nginx
※アクセスして元に戻っていることを確認
※再度ファイルを編集しておく cpでもexecでもok
$ docker commit -m "first commit" web mynginx
基本操作 images, ps
? images
ホストに保存されているimageの一覧を表示
docker images <OPTIONS>
? ps
起動中(オプションによっては停止した)のコンテナの一覧を取得
docker ps
$ docker images
※先ほど保存したimageがあることを確認
$ docker ps
$ docker ps - a
基本操作 push
? push
docker registryにimageをpushする
docker push <OPTIONS> NAME:<TAG>
image名によってpush先が変わる
未指定( mynginx、 hoge、 fuga)
→?Docker?Hubの公式イメージ (基本的にはpush 不可)
ユーザー名?グループ名付き (soundtricker/mynginx {ユーザ名}/{イメージ名})
→?Docker?Hubのユーザーイメージ
レジストリ名付き(localhost:5000/mynginx grc.io/project-name/image-name)
→?指定したレジストリにpush
$ docker login
※ 認証が必要なregistryは docker loginで loginする
$ docker tag mynginx soundtricker/mynginx
※ イメージに別名をつける
$ docker push soundtricker/mynginx
※ docker hubで確認
基本操作 build
? build
Dockerfile経由でimageを作成する
docker build <OPTIONS> DOCKERFILEPATH
imageを作るときは基本的にDockerfileで作成したほうが良い
※?commitで作るやり方もあるけど、どういうimageなのかわかりにくい
Docker Hubで様々なDockerfileが見れるので参考にすると良い
$ vi Dockerfile
#
from ubuntu
run echo "deb http://us.archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
run apt-get update
run apt-get install -y redis-server --no-install-recommends
run apt-get upgrade -y && apt-get clean && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
expose 6379
entrypoint ["/usr/bin/redis-server"]
#
基本操作 (続)build
? build
細かいDockerfileのコマンド群は他の資料とかみて慣れていくといいともいます。
最初は FROM、RUN、CMD、ADD、VOLUME、EXPOSEあたりがわかれば大体OK
$ docker build -t my-redis ./
$ docker images
$ docker run -d --name redis -p 6379:6379 my-redis
アジェンダ
? 準備
? Docker on GCE
Native Docker
With Docker-Machine
基本操作
アジェンダ
? 準備
? Docker on GCE
Native Docker
With Docker-Machine
基本操作
? Others
Container Registry
その他 Cointainer Registry
? Container Registry
実際に本番環境で利用しようと思うとimageを保存するためにRegistryが必要
選択肢としては
自前で立てる
https://hub.docker.com/_/registry/
https://hub.docker.com/r/google/docker-registry/
どっかのRegistryを使う
Docker Hub
Quary.io
CoreOS Registry
その他 Cointainer Registry
? Google Container Registry
Googleが公式に用意しているContainer Registry
裏側はCloud Storage 表側はGoogleがホストしている
Google Developer Consoleに統合されている
https://console.developers.google.com/kubernetes/images/list
課金体系はネットワーク通信費とCloud Storageの価格のみ
認証/PUSHはgcloud コマンド経由で実行
$ gcloud auth login
$ docker tag my-redis gcr.io/${PROJECT_NAME}/my-redis
$ gcloud docker push gcr.io/${PROJECT_NAME}/my-redis
$ gcloud docker pull gcr.io/${PROJECT_NAME}/my-redis
その他 Cointainer Registry
? Google Container Registry
dockerコマンドで直接行う場合はdocker loginを使って行う
$ docker login -e 1234@5678.com -u _token -p "$(gcloud auth print-access-token)"
https://gcr.io
$ docker push gcr.io/${PROJECT_NAME}/my-redis
$ docker pull gcr.io/${PROJECT_NAME}/my-redis
アジェンダ
? 準備
? Docker on GCE
Native Docker
With Docker-Machine
基本操作
? Others
Container Registry
アジェンダ
? 準備
? Docker on GCE
Native Docker
With Docker-Machine
基本操作
? Others
Container Registry
Container Optimised Image
その他 Cointainer Optimized Image
? Google Optimized Image
Googleが公式に用意しているコンテナを触るのに最適化した VM Image
中身は単体で動く Kubernetes Worker Node(minion)
メタデータにpods.yaml(k8sの設定ファイル)をいれて立ち上げると、dockerコンテナが動かせる$ vi containers.yaml
apiVersion: v1
kind: Pod
metadata:
name: simple-echo
spec:
containers:
- name: simple-echo
image: gcr.io/google-containers/busybox
command: ['nc', '-p', '8080', '-l', '-l', '-e', 'echo', 'hello world!']
imagePullPolicy: Always
ports:
- containerPort: 8080
hostPort: 8080
その他 (続)Cointainer Optimized Image
? Google Optimized Image
正直微妙(k8s or Docker-Compose 使ったほうが良い)
$ gcloud compute instances create containervm-test-1 ?
--image container-vm ?
--metadata-from-file google-container-manifest=containers.yaml ?
--zone us-central1-a ?
--machine-type f1-micro
$ gcloud compute ssh --zone us-central1-a containervm-test-1
$ nc localhost 8080

More Related Content

顿辞肠办别谤ハンズオン

  • 2. アジェンダ ? 準備 ? Docker on GCE Native Docker With Docker-Machine 基本操作 ? Others Container Registry Container Optimised Image
  • 5. 準備 Projectの準備 ? Develper Consoleへアクセス https://console.developers.google.com ? プロジェクトを何も作ってない人、クリーンなプロジェクトでやりたい人は新たに プロジェクトを作成 ? 課金設定してない人は設定 無料にしたいなら無料枠の設定も行う どうしても嫌な人は相談してください
  • 11. 準備 ? Cloud Shell Google Cloud Platformを触るために用意されたブラウザ上で動くShell 2015年末まで無料(今はβ扱い) temporaryのGCEが立つ(OS: Debian) 5GBのディスク、gcloudコマンド、docker、docker-machine、kubectl(k8sのcli)、いろんな開発ツ ールがインストール済み
  • 12. 準備 ? Cloud Shell 今回は基本的にCloud Shellを利用して説明していきます。 MacやWinを使っていて、その上でやりたい方は、Docker ToolboxとCloud SDKをインストールすれば だいたい同じです。
  • 13. 準備 ? Cloud Shell 今回のプロジェクト用にshell変数として以下を設定しておきます。 ※以降は ”$ ~”な文はcloud shell、”$(インスタンス名) ~”な 文は対象のインスタンスでの作業 とします。 $ export PROJECT_NAME="project-name"
  • 15. アジェンダ ? 準備 ? Docker on GCE Native Docker
  • 16. Docker on GCE(Native Docker) ? やること 作る インスタンス起動 dockerのインストールは時間がかかるのとハマりやすいので既にインストール済みなCoreOSを使 います。 入る sshでインスタンスに入る 取得 nginxのdocker imageをpullする
  • 17. Docker on GCE(Native Docker) ? 作る インスタンスの起動 CoreOSのCompute Engineインスタンスを作成 Optionの意味 preemptible: preemptibleインスタンスを作る(24hでshutdownする 低価格インスタンス) $ export INSTANCE_NAME="インスタンス名" $ gcloud compute --project $PROJECT_NAME instances create $INSTANCE_NAME ? --zone "us-central1-a" ? --machine-type "f1-micro" ? --preemptible ? --tags "http-server" ? --image-project "coreos-cloud" ? --image "coreos-stable-766-5-0-v20151105"
  • 18. Docker on GCE(Native Docker) ? 入る sshで作ったインスタンスへ gcloud compute ssh --project PROJECT_NAME INSTANCE_NAME でssh可能 sshトンネリング(port forward)したい場合とかも↑経由で実施 CoreOS コンテナを利用した巨大なスケールするプラットフォームを作りやすくするために開発され $ gcloud compute ssh --project $PROJECT_NAME --zone us-central-a $INSTANCE_NAME $(instance name) docker -v Docker version 1.7.1, build df2f73d-dirty
  • 19. Docker on GCE(Native Docker) ? 取得 nginxのdocker imageを取得 docker pull IMAGENAME で取得 alpine 超軽量Linux Distribution (5MB) 何も入ってない $(instance name) docker pull connexiolabs/alpine-nginx latest: Pulling from connexiolabs/alpine-nginx 511136ea3c5a: Pull complete b0b08730b93c: Pull complete f83928bbe904: Pull complete ... Status: Downloaded newer image for connexiolabs/alpine-nginx:latest
  • 20. Docker on GCE(Native Docker) ? 起動 nginxのdockerコンテナを起動 docker run <OPTIONS> IMAGENAME <COMMAND> で起動 オプション -d バックエンドで起動 --name コンテナに名前をつける -p nn:mm ホストのnn番ポートをコンテナのmm番ポートにPort Forward $(instance name) docker run -d --name nginx -p 80:80 connexiolabs/alpine-nginx ハッシュ(2d953fef40b6fc80985d88a1caa02a9aace2a8d1410cbeb70c91c863637c66c1)
  • 21. Docker on GCE(Native Docker) ? テスト アクセスしてみる メタデータサーバ curl "http://metadata.google.internal/computeMetadata/v1/instance/network- interfaces/0/access-configs/0/external-ip" -H "Metadata-Flavor: Google" GoogleがホストしているメタデータサーバからこのインスタンスのIPアドレスを取得してい る $(instance name) curl http://localhost $(instance name) IP_ADDRESS=$(curl "http://metadata.google.internal/computeMetadata/v1/instance/network- interfaces/0/access-configs/0/external-ip" -H "Metadata-Flavor: Google") $(instance name) curl http://$IP_ADDRESS
  • 22. アジェンダ ? 準備 ? Docker on GCE Native Docker
  • 23. アジェンダ ? 準備 ? Docker on GCE Native Docker With Docker-Machine
  • 24. Docker on GCE(With Docker-Machine) ? やること 作る & 入れる Docker-Machine経由でインスタン起動 & Dockerインストール 設定 Docker Remote APIのクライアント側の設定 取得&起動 nginxのdockerコンテナを取得して起動 テスト
  • 25. Docker on GCE(Docker-Machine) ? 作る & 入れる Docker-Machine経由でインスタンスを上げつつDockerをインストール OAuthトークンを発行するために、URLが表示されるのでそのURLへアクセス 最終的に表示されるコードをShellに貼り付ける $ docker-machine create --driver google --google-project $PROJECT_NAME --google-preemptible -- google-scopes "https://www.googleapis.com/auth/cloud-platform" $INSTANCE_NAME
  • 26. ? 設定 DockerのRemote APIにアクセスするための設定を行う docker-machine env [NAME] で表示できる 今回はcloud shellからアクセスしているので特に設定は不要ですが、 Docker on GCE(Docker-Machine) $ docker-machine env $INSTANCE_NAME export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://146.148.73.118:2376" export DOCKER_CERT_PATH="/home/keisuke_oohashi/.docker/machine/machines/machine2" export DOCKER_MACHINE_NAME="machine2" # Run this command to configure your shell: # eval "$(docker-machine env machine2)" $ eval $(docker-machine env $INSTANCE_NAME) $ docker info ※ 結果を確認
  • 27. Docker on GCE(Native Docker) ? 取得?起動 nginxのdockerコンテナを起動(取得していないimageは取得される) docker run <OPTIONS> IMAGENAME <COMMAND> で取得?起動 今回はDocker公式imageを利用 DockerのImageを探す場合は Docker Hubを参照 https://hub.docker.com/ $ docker run -d --name web -p 80:80 nginx ハッシュ(2d953fef40b6fc80985d88a1caa02a9aace2a8d1410cbeb70c91c863637c66c1)
  • 28. Docker on GCE(Native Docker) ? テスト nginx(コンテナ)の中に入ってみる docker exec <OPTIONS> NAME <COMMAND> でコンテナ内でコマンドを叩ける docker 1.7まではホストからコンテナに対してファイルコピーをする時にdocker execでやるこ とが多かった docker 1.8からは docker cp を利用 $ docker exec -it web bash $(root) ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.8 31532 4936 ? Ss 14:46 0:00 nginx: master process nginx -g daemon off; nginx 7 0.0 0.4 31908 2760 ? S 14:46 0:00 nginx: worker process root 8 0.3 0.5 20216 3168 ? Ss 16:47 0:00 bash root 15 0.0 0.3 17492 2152 ? R+ 16:47 0:00 ps aux
  • 29. アジェンダ ? 準備 ? Docker on GCE Native Docker With Docker-Machine
  • 30. アジェンダ ? 準備 ? Docker on GCE Native Docker With Docker-Machine 基本操作
  • 31. 基本操作 ? やること docker stop コンテナの停止 docker start コンテナの起動 docker restart コンテナを再起動 docker logs ログを表示 docker cp ファイルコピー docker rm コンテナの削除 docker commit 起動中のコンテナから新しいimageを作成 docker images イメージ一覧
  • 32. 基本操作 stop, start, restart ? stop コンテナを停止する docker stop <OPTIONS> NAME でコンテナを停止 ? start 停止したコンテナを起動する docker start <OPTIONS> NAME でコンテナを起動 $ docker stop web $ docker start web $ docker restart web
  • 33. 基本操作 logs, cp ? logs コンテナで起動しているプロセスのログ(標準出力)を取得する docker logs <OPTIONS> NAME でコンテナのログを取得 ? cp ホスト、コンテナ間でファイルをコピーする docker cp <OPTIONS> NAME:PATH LOCALPATHでコンテナからホストにファイルをコピー $ docker logs web $ docker cp web:/usr/share/nginx/html/index.html . $ vi index.html ※ 好きに修正 $ docker cp index.html web:/usr/share/nginx/html/index.html ※ この状態でアクセスして一回確認
  • 34. 基本操作 rm, commit ? rm コンテナを削除する docker rn <OPTIONS> NAME でコンテナを削除 コンテナが停止していないと通常は削除できない、起動しているコンテナを削除する場合は -f を つける コンテナを削除した場合、コンテナ内で編集した内容は残らない 再度同じイメージを起動しても初期化される ? commit $ docker rm -f web $ docker run -d --name web -p 80:80 nginx ※アクセスして元に戻っていることを確認 ※再度ファイルを編集しておく cpでもexecでもok $ docker commit -m "first commit" web mynginx
  • 35. 基本操作 images, ps ? images ホストに保存されているimageの一覧を表示 docker images <OPTIONS> ? ps 起動中(オプションによっては停止した)のコンテナの一覧を取得 docker ps $ docker images ※先ほど保存したimageがあることを確認 $ docker ps $ docker ps - a
  • 36. 基本操作 push ? push docker registryにimageをpushする docker push <OPTIONS> NAME:<TAG> image名によってpush先が変わる 未指定( mynginx、 hoge、 fuga) →?Docker?Hubの公式イメージ (基本的にはpush 不可) ユーザー名?グループ名付き (soundtricker/mynginx {ユーザ名}/{イメージ名}) →?Docker?Hubのユーザーイメージ レジストリ名付き(localhost:5000/mynginx grc.io/project-name/image-name) →?指定したレジストリにpush $ docker login ※ 認証が必要なregistryは docker loginで loginする $ docker tag mynginx soundtricker/mynginx ※ イメージに別名をつける $ docker push soundtricker/mynginx ※ docker hubで確認
  • 37. 基本操作 build ? build Dockerfile経由でimageを作成する docker build <OPTIONS> DOCKERFILEPATH imageを作るときは基本的にDockerfileで作成したほうが良い ※?commitで作るやり方もあるけど、どういうimageなのかわかりにくい Docker Hubで様々なDockerfileが見れるので参考にすると良い $ vi Dockerfile # from ubuntu run echo "deb http://us.archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list run apt-get update run apt-get install -y redis-server --no-install-recommends run apt-get upgrade -y && apt-get clean && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/* expose 6379 entrypoint ["/usr/bin/redis-server"] #
  • 38. 基本操作 (続)build ? build 細かいDockerfileのコマンド群は他の資料とかみて慣れていくといいともいます。 最初は FROM、RUN、CMD、ADD、VOLUME、EXPOSEあたりがわかれば大体OK $ docker build -t my-redis ./ $ docker images $ docker run -d --name redis -p 6379:6379 my-redis
  • 39. アジェンダ ? 準備 ? Docker on GCE Native Docker With Docker-Machine 基本操作
  • 40. アジェンダ ? 準備 ? Docker on GCE Native Docker With Docker-Machine 基本操作 ? Others Container Registry
  • 41. その他 Cointainer Registry ? Container Registry 実際に本番環境で利用しようと思うとimageを保存するためにRegistryが必要 選択肢としては 自前で立てる https://hub.docker.com/_/registry/ https://hub.docker.com/r/google/docker-registry/ どっかのRegistryを使う Docker Hub Quary.io CoreOS Registry
  • 42. その他 Cointainer Registry ? Google Container Registry Googleが公式に用意しているContainer Registry 裏側はCloud Storage 表側はGoogleがホストしている Google Developer Consoleに統合されている https://console.developers.google.com/kubernetes/images/list 課金体系はネットワーク通信費とCloud Storageの価格のみ 認証/PUSHはgcloud コマンド経由で実行 $ gcloud auth login $ docker tag my-redis gcr.io/${PROJECT_NAME}/my-redis $ gcloud docker push gcr.io/${PROJECT_NAME}/my-redis $ gcloud docker pull gcr.io/${PROJECT_NAME}/my-redis
  • 43. その他 Cointainer Registry ? Google Container Registry dockerコマンドで直接行う場合はdocker loginを使って行う $ docker login -e 1234@5678.com -u _token -p "$(gcloud auth print-access-token)" https://gcr.io $ docker push gcr.io/${PROJECT_NAME}/my-redis $ docker pull gcr.io/${PROJECT_NAME}/my-redis
  • 44. アジェンダ ? 準備 ? Docker on GCE Native Docker With Docker-Machine 基本操作 ? Others Container Registry
  • 45. アジェンダ ? 準備 ? Docker on GCE Native Docker With Docker-Machine 基本操作 ? Others Container Registry Container Optimised Image
  • 46. その他 Cointainer Optimized Image ? Google Optimized Image Googleが公式に用意しているコンテナを触るのに最適化した VM Image 中身は単体で動く Kubernetes Worker Node(minion) メタデータにpods.yaml(k8sの設定ファイル)をいれて立ち上げると、dockerコンテナが動かせる$ vi containers.yaml apiVersion: v1 kind: Pod metadata: name: simple-echo spec: containers: - name: simple-echo image: gcr.io/google-containers/busybox command: ['nc', '-p', '8080', '-l', '-l', '-e', 'echo', 'hello world!'] imagePullPolicy: Always ports: - containerPort: 8080 hostPort: 8080
  • 47. その他 (続)Cointainer Optimized Image ? Google Optimized Image 正直微妙(k8s or Docker-Compose 使ったほうが良い) $ gcloud compute instances create containervm-test-1 ? --image container-vm ? --metadata-from-file google-container-manifest=containers.yaml ? --zone us-central1-a ? --machine-type f1-micro $ gcloud compute ssh --zone us-central1-a containervm-test-1 $ nc localhost 8080