Docker超入門

21
Docker超⼊⾨ 2016.04.27 Presented By Katsunori Kanda (@potix2)

Transcript of Docker超入門

Page 1: Docker超入門

Docker超⼊⾨2016.04.27

Presented By Katsunori Kanda (@potix2)

Page 2: Docker超入門

⽬次

1. インストール⽅法 2. Dockerを使ってみる 3. イメージを作る 4. Dockerを取り巻く環境

Page 3: Docker超入門

1. Dockerのインストール (Mac OS X)

Page 4: Docker超入門

Dockerのインストール(Mac OS X)

$ brew install docker $ brew install docker-machine

1.VirtualBoxのインストール • https://www.virtualbox.org/wiki/Downloads

2.docker/docker-machineのインストール

Page 5: Docker超入門

docker-machineの初期化$ docker-machine create --driver virtualbox default $ docker-machine ls

NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox Running tcp://192.168.XX.XXX:2376 v1.10.3

$ eval “$(docker-machine env default)” $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE

Page 6: Docker超入門

dockerの実⾏環境

docker-machine管理のVM

DOCKER_HOSTclient

docker daemon

imagescontainers

192.168.XX.XXX:2376

Page 7: Docker超入門

イメージとコンテナ• イメージ

• プログラム+実⾏環境(ファイルシステム) • 例: redis, bash, nginx

• コンテナ • 仮想実⾏環境 • イメージが読み込まれて実⾏される

Page 8: Docker超入門

2. Dockerを使ってみる

Page 9: Docker超入門

Hello World$ docker run hello-world

Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 03f4658f8b78: Pull complete a3ed95caeb02: Pull complete Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7 Status: Downloaded newer image for hello-world:latest

Hello from Docker. (以下、省略)

Page 10: Docker超入門

Registry (docker hub)

何が起こったか?DOCKER_HOSTclient

docker daemon

imagescontainers

1. docker run hello-world

hello-world

2. pull

hello-world

3. download

4. load5. exec

Page 11: Docker超入門

redisを実⾏してみる(1/2)$ docker run -d --name myredis redis $ docker exec -it myredis /bin/bash # redis-cli info

myredisclient

Page 12: Docker超入門

redisを実⾏してみる(2/2)$ docker run -d -p 6379 --name myredis2 redis $ docker-machine ip default 192.99.XXX.XXX $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 42635bd006fd redis "docker-entrypoint.sh" 12 seconds ago Up 12 seconds 0.0.0.0:32771->6379/tcp myredis2 $ redis-cli -h 192.99.XXX.XXX -p 32771

myredis2client

port: 32771port: 6379

Page 13: Docker超入門

3. イメージを作る

Page 14: Docker超入門

centos6ベースのredisイメージ作成(1/2)

FROM centos:centos6

RUN yum -y update RUN yum -y install epel-release RUN yum -y install redis

EXPOSE 6379

CMD [ "redis-server" ]

Dockerfile:

$ mkdir docker-myredis $ cd docker-myredis $ vi Dockerfile

Page 15: Docker超入門

centos6ベースのredisイメージ作成(2/2)

$ docker build -t myredis:centos6 . (以下、動作確認) $ docker images $ docker run -d -p 6379 myredis:centos6 $ docker ps $ redis-cli -h `docker-machine ip` -p 32768 info

Page 16: Docker超入門

Dockerfile• FROM: ベースイメージを指定 • RUN: コマンドを実⾏する • ADD: イメージへファイルを追加 • CMD: runしたときに実⾏されるコマンド • EXPOSE: コンテナ外へポートを公開 • 詳しくは、

• https://docs.docker.com/engine/reference/builder/

Page 17: Docker超入門

Dockerfileの意味FROM centos:centos6

RUN yum -y update

RUN yum -y install epel-release

RUN yum -y install redis

EXPOSE 6379

CMD [ "redis-server" ]

FROM

RUN

RUN

RUN

EXPOSE

CMD

1コマンドが1レイヤーに対応する

Page 18: Docker超入門

Dockerfileの意味FROM

RUN

EXPOSE

CMD

意味のあるまとまりで⼀つのコマンドにまとめるFROM centos:centos6

RUN yum -y update && \

yum -y install epel-release && \

yum -y install redis

EXPOSE 6379

CMD [ "redis-server" ]

Page 19: Docker超入門

4. Dockerを取り巻く環境

Page 20: Docker超入門

docker-compose

• 複数のコンテナを同時に操作するためのツール • ローカル開発環境はこれでほぼ⾜りる • YAMLで設定を書くだけ

Page 21: Docker超入門

コンテナ管理

• docker-swarm • gke(kubernetes) • ecs • shipyard • nomad