Dockerハンズオン
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

Dockerハンズオン

  • 1.
  • 2.
    アジェンダ � 準備 � Dockeron GCE Native Docker With Docker-Machine 基本操作 � Others Container Registry Container Optimised Image
  • 3.
  • 4.
  • 5.
    準備 Projectの準備 � DevelperConsoleへアクセス https://console.developers.google.com � プロジェクトを何も作ってない人、クリーンなプロジェクトでやりたい人は新たに プロジェクトを作成 � 課金設定してない人は設定 無料にしたいなら無料枠の設定も行う どうしても嫌な人は相談してください
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
    準備 � Cloud Shell GoogleCloud Platformを触るために用意されたブラウザ上で動くShell 2015年末まで無料(今はβ扱い) temporaryのGCEが立つ(OS: Debian) 5GBのディスク、gcloudコマンド、docker、docker-machine、kubectl(k8sのcli)、いろんな開発ツ ールがインストール済み
  • 12.
    準備 � Cloud Shell 今回は基本的にCloudShellを利用して説明していきます。 MacやWinを使っていて、その上でやりたい方は、Docker ToolboxとCloud SDKをインストールすれば だいたい同じです。
  • 13.
    準備 � Cloud Shell 今回のプロジェクト用にshell変数として以下を設定しておきます。 ※以降は”$ ~”な文はcloud shell、”$(インスタンス名) ~”な 文は対象のインスタンスでの作業 とします。 $ export PROJECT_NAME="project-name"
  • 14.
  • 15.
  • 16.
    Docker on GCE(NativeDocker) � やること 作る インスタンス起動 dockerのインストールは時間がかかるのとハマりやすいので既にインストール済みなCoreOSを使 います。 入る sshでインスタンスに入る 取得 nginxのdocker imageをpullする
  • 17.
    Docker on GCE(NativeDocker) � 作る インスタンスの起動 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(NativeDocker) � 入る 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(NativeDocker) � 取得 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(NativeDocker) � 起動 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(NativeDocker) � テスト アクセスしてみる メタデータサーバ 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.
  • 23.
    アジェンダ � 準備 � Dockeron GCE Native Docker With Docker-Machine
  • 24.
    Docker on GCE(WithDocker-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-machineenv [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(NativeDocker) � 取得・起動 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(NativeDocker) � テスト 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.
    アジェンダ � 準備 � Dockeron GCE Native Docker With Docker-Machine
  • 30.
    アジェンダ � 準備 � Dockeron 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 dockerregistryに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を作成する dockerbuild <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.
    アジェンダ � 準備 � Dockeron GCE Native Docker With Docker-Machine 基本操作
  • 40.
    アジェンダ � 準備 � Dockeron 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.
    アジェンダ � 準備 � Dockeron GCE Native Docker With Docker-Machine 基本操作 � Others Container Registry
  • 45.
    アジェンダ � 準備 � Dockeron GCE Native Docker With Docker-Machine 基本操作 � Others Container Registry Container Optimised Image
  • 46.
    その他 Cointainer OptimizedImage � 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 OptimizedImage � 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