Slide 1

Slide 1 text

コンテナの基本 ~Docker実践~ 2018年8月5日 内山 良介 step63r

Slide 2

Slide 2 text

環境構築が面倒くさい

Slide 3

Slide 3 text

マシンリソースが少ない

Slide 4

Slide 4 text

コイツで解決していきましょう

Slide 5

Slide 5 text

コンテナとは?

Slide 6

Slide 6 text

←くじら ←???

Slide 7

Slide 7 text

コンテナ Container 容器 컨테이너

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

コンテナには環境を詰め込める • アプリケーション • Webサーバ • メールサーバ • ストレージ

Slide 11

Slide 11 text

コンテナはそのまま配布できる

Slide 12

Slide 12 text

コンテナは軽量 ハードウェア ハードウェア ハードウェア カーネル / ドライバ カーネル / ドライバ カーネル / ドライバ ホストOS ホストOS ホストOS 各種サービス / ランタイム アプリケーション ゲストOS カーネル ゲストOS カーネル 各種サービス 各種サービス ランタイム ランタイム アプリケーション アプリケーション サービス用 コンテナ 管理用 コンテナ アプリケーション + ランタイム アプリケーション + ランタイム 物理基盤 ハイパーバイザー型 コンテナ型

Slide 13

Slide 13 text

かいつまんで言えば…… ソフトウェア開発の本質により工数を割ける ソフトウェアの価格競争力を高められる

Slide 14

Slide 14 text

Demo とりあえず “Hello, World”

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

# docker run hello-world

Slide 17

Slide 17 text

何が起こった!? Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/

Slide 18

Slide 18 text

Demo 基本のコマンドを使いこなす

Slide 19

Slide 19 text

Dockerのリソースモデル Docker Repository イメージ コンテナ コンテナ イメージ プロセス pull run stop start commit push rm

Slide 20

Slide 20 text

docker pull Docker Repository イメージ コンテナ コンテナ イメージ プロセス pull run stop start commit push rm # docker pull centos:latest

Slide 21

Slide 21 text

docker run Docker Repository イメージ コンテナ コンテナ イメージ プロセス pull run stop start commit push rm # docker run --name test01 -it centos:latest /bin/bash

Slide 22

Slide 22 text

docker start / stop Docker Repository イメージ コンテナ コンテナ イメージ プロセス pull run stop start commit push rm # docker start[stop] test01

Slide 23

Slide 23 text

docker commit Docker Repository イメージ コンテナ コンテナ イメージ プロセス pull run stop start commit push rm # docker commit test01 docker.io/step63r/osaka-ai-03-demo-02

Slide 24

Slide 24 text

docker push Docker Repository イメージ コンテナ コンテナ イメージ プロセス pull run stop start commit push rm # docker push docker.io/step63r/osaka-ai-03-demo-02

Slide 25

Slide 25 text

docker rm Docker Repository イメージ コンテナ コンテナ イメージ プロセス pull run stop start commit push rm # docker rm -f test01

Slide 26

Slide 26 text

Demo Dockerfile

Slide 27

Slide 27 text

DockerfileでWebサーバを立てる # mkdir osaka-ai-03-demo-03 # cd osaka-ai-03-demo-03 # ls –al 合計 4 -rw-r--r--. 1 root root 232 8月 1 22:56 Dockerfile # cat Dockerfile FROM centos:latest MAINTAINER minato ENV container docker RUN yum update -y && yum clean all RUN yum install -y httpd && yum clean all RUN echo "Hello Apache." > /var/www/html/index.html RUN systemctl enable httpd EXPOSE 80 # docker build -f ./Dockerfile -t docker.io/step63r/osaka-ai-03-demo-03 --no-cache=true . # docker run -d --privileged --name web0001 -it -p 13080:80 docker.io/step63r/osaka-ai-03-demo-03 /sbin/init

Slide 28

Slide 28 text

Dockerfileを使うべき理由 構築の手間を 省力化 できる 人的ミスの リスク が 低減 される Dockerfileそれ自体が 手順書 になる

Slide 29

Slide 29 text

Demo docker-compose

Slide 30

Slide 30 text

例えばこんなWebサーバを立ててみる 記事保存 記事読出

Slide 31

Slide 31 text

普通にやったらこうなる # docker pull wordpress # git clone [email protected]:docker-library/wordpress.git # docker pull mysql # git clone [email protected]:docker-library/mysql.git # docker build –t hoge:mysql56 ./ # docker run –name hoge_mysql56 –e MYSQL_ROOT_PASSWORD=hogehoge –d hoge:mysql56 # docker build –t hoge:wordpress ./ # docker run –name hoge_wordpress –d –p 8080:80 --link hoge_mysql56:mysql hoge:wordpress docker run コマンドがいちいち長い!!

Slide 32

Slide 32 text

じゃあ docker-compose でやってみよう

Slide 33

Slide 33 text

docker-compose.yml wordpress: image: wordpress:latest links: - db:mysql ports: - "1888:80" db: image: mariadb:latest environment: MYSQL_ROOT_PASSWORD: password123

Slide 34

Slide 34 text

で、 # docker-compose up -d

Slide 35

Slide 35 text

まとめ

Slide 36

Slide 36 text

3W:コンテナの最大のメリット いつ どこで だれが 環境構築をしても、ミスなく、同じものができあがること When Where Who

Slide 37

Slide 37 text

Dockerの理念 Build, Ship, and Run Any App, Anywhere 一度ビルドしたコンテナはどんな環境でも、どんなアプリケーションでも動く

Slide 38

Slide 38 text

Appendix

Slide 39

Slide 39 text

参考文献 Docker 実践ガイド インプレス 2015年12月 古賀 正純 impress top gearシリーズ

Slide 40

Slide 40 text

参考文献 • Dockerでよく使うコマンドまとめ | 酒と涙とRubyとRailsと • はじめてのDocker • Docker Registry Hub にイメージをpushしたい • CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する • Dockerでwordpressの環境構築

Slide 41

Slide 41 text

Thank you!!