狠狠撸
Submit Search
顿辞肠办别谤ハンズオン
?
Download as PPTX, PDF
?
1 like
?
871 views
啓介 大橋
GCPUG Shounan向け 顿辞肠办别谤ハンズオン資料
Read less
Read more
1 of 47
Download now
Download to read offline
More Related Content
顿辞肠办别谤ハンズオン
1.
顿辞肠办别谤ハンズオン https://goo.gl/7lvcfV
2.
アジェンダ ? 準備 ? Docker
on GCE Native Docker With Docker-Machine 基本操作 ? Others Container Registry Container Optimised Image
3.
アジェンダ ? 準備
4.
準備 Projectの準備
5.
準備 Projectの準備 ? Develper
Consoleへアクセス https://console.developers.google.com ? プロジェクトを何も作ってない人、クリーンなプロジェクトでやりたい人は新たに プロジェクトを作成 ? 課金設定してない人は設定 無料にしたいなら無料枠の設定も行う どうしても嫌な人は相談してください
6.
準備 Docker Client インストール
7.
準備 Docker Clientインストール 不要
8.
準備 Docker Clientインストール まじで
9.
準備 Docker Clientインストール 不要
10.
準備 Docker Clientインストール
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"
14.
アジェンダ ? 準備
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
Download