Dockerハンズオン
https://goo.gl/7lvcfV
アジェンダ
アジェンダ
準備
Projectの準備
準備 Projectの準備
準備
Docker Client
インストール
準備 Docker Clientインストール
不要
準備 Docker Clientインストール
まじで
準備 Docker Clientインストール
不要
準備 Docker Clientインストール
準備
準備
準備
$ export PROJECT_NAME="project-name"
アジェンダ
アジェンダ
Docker on GCE(Native Docker)
Docker on GCE(Native Docker)
$ 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)
$ 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)
$(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)
$(instance name) docker run -d --name nginx -p 80:80 connexiolabs/alpine-nginx
ハッシュ(2d953fef40b6fc80985d88a1caa02a9aace2a8d1410cbeb70c91c863637c66c1)
Docker on GCE(Native Docker)
$(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(With Docker-Machine)
Docker on GCE(Docker-Machine)
$ docker-machine create --driver google --google-project $PROJECT_NAME --google-preemptible --google-scopes "https://www.googleapis.com/auth/cloud-platform" $INSTANCE_NAME
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)
$ docker run -d --name web -p 80:80 nginx
ハッシュ(2d953fef40b6fc80985d88a1caa02a9aace2a8d1410cbeb70c91c863637c66c1)
Docker on GCE(Native Docker)
$ 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
アジェンダ
アジェンダ
基本操作
基本操作 stop, start, restart
$ docker stop web
$ docker start web
$ docker restart web
基本操作 logs, cp
$ 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
$ 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
$ docker images�※先ほど保存したimageがあることを確認
$ docker ps
$ docker ps - a
基本操作 push
$ docker login�※ 認証が必要なregistryは docker loginで loginする��$ docker tag mynginx soundtricker/mynginx�※ イメージに別名をつける�
$ docker push soundtricker/mynginx
※ docker hubで確認
基本操作 build
$ 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
$ docker build -t my-redis ./�$ docker images�$ docker run -d --name redis -p 6379:6379 my-redis��
アジェンダ
アジェンダ
その他 Cointainer Registry
その他 Cointainer Registry
$ 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
$ 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�
アジェンダ
アジェンダ
その他 Cointainer Optimized Image
$ 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
���
$ 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