アプリ屋のための
Docker入門
2018/05/15 sh-ogawa
はじめに
この会では以下のレベルに達することを目標としてます。
● Dockerとは何ぞ?が判る
● エコシステムと仲良くなって必要なモノを落として使える2
インフラ・・・
Kubernetesに進むべし(雑)
実際マシンリソースを効率的に使う部分やオートヒーリング機能は
インフラ屋として取組み甲斐もあって面白いと思います!
(オンプレ上のシステムを纏める・・・
までイケるとランニングコストが落とせるのでアピールになるかと。
通らないといけない関門何個もあるので、完全に無責任に言ってる)
What’s Docker
3 ● コンテナ型仮想環境
- 既存の仮想マシン(Hyper-VやVMwareなど)はOSイメージが
ホストOS上に丸ごと浮くため重いしブートの
オーバーヘッドが非常に大きい
- DockerはホストOSにプログラムだけが浮く形で
ブートのオーバーヘッドが非常に小さい
4 ● コンテナ型仮想環境
What’s Docker
http://www.itmedia.co.jp/news/articles/1406/10/news049.html
コンテナ
(1ファイル)
What’s Docker
5 ● Dockerの表面的な中身ってどうなってんの?
OSのファイルシステムに含まれている基本ファイル
※/usr/binや/sbinの下など
作ったアプリや、使用するミドルウェアなど
What’s Docker
6 ● メリットって?
- ≒実行可能プログラム
- 論理的にどこで動かしても同じ
- ディスクリプタも各々持つ
- インフラ屋視点だともっとある
Docker’s architecture
7
http://docs.docker.jp/_images/architecture.png
How to run?
8 ● DockerはDockerイメージから起動する
- Dockerイメージの作り方だけ最低限覚えておく
- Dockerfileから作れる
※Dockerfileは自分で作れなくても、とりあえず構わない
Dockerfile
9 # Dockerfile for MySQL Serve
FROM alpine:3.5
RUN apk update && 
apk add mysql mysql-client && 
addgroup mysql mysql && 
mkdir /scripts && 
rm -rf /var/cache/apk/*
VOLUME ["/var/lib/mysql"]
COPY ./startup.sh /scripts/startup.sh
RUN chmod +x /scripts/startup.sh
EXPOSE 3306
ENTRYPOINT ["/scripts/startup.sh"]
- 基本ただのyum
※alpineだからapk
- 基本コマンド叩くだけ
- 独自スクリプトはADDで足す
- 作成元イメージは色々あるけど
alpineが小さいからおススメ
Dockerfile
10# Dockerfile for MySQL Serve
FROM alpine:3.5
RUN apk update && 
apk add mysql mysql-client && 
addgroup mysql mysql && 
mkdir /scripts && 
rm -rf /var/cache/apk/*
VOLUME ["/var/lib/mysql"]
COPY ./startup.sh /scripts/startup.sh
RUN chmod +x /scripts/startup.sh
EXPOSE 3306
ENTRYPOINT ["/scripts/startup.sh"]
利用可能な命令
Build Dockerfile
11# docker build -t {repository}:{tag_id} .
カレントディレクトリにあるDockerfileを読込んで
Dockerイメージを作成する
Build Dockerfile
12
Build Dockerfile
13作ったDockerイメージは以下のコマンドで確認可能
# docker images
Build Dockerfile
14Dockerイメージは差分管理されている。
1回のビルドで1個のイメージができるわけではなく
、
Stepごとのイメージが作られる。
Stepは、Dockerfileの命令1個に対して1つ。
Boot and Run
Docker Container
15# docker run --name mysql 
色々オプション
{リポジトリ名}:{タグ}
Stop Docker Container
16# docker stop コンテナ名
コンテナ名 = build時に--nameで付けた名前
(mysql)
Run Docker Container
17# docker start コンテナ名
Run Docker Container
18なんでbuildじゃないか?
- buildはコンテナを作るコマンド
- stopしてもコンテナ自体は消えない
※stopするときにコンテナを消すオプションはある
- buildするときに同じ名前を付けるとエラーになる
Delete Docker Container
19# docker rm コンテナ名
- コンテナを停止しとかないと消せない
Delete Docker Image
20# docker rmi {リポジトリ}:{タグ}
- イメージ自体を消去する
runコマンドの範囲
Dockerのライフサイクル
21 image
build
Dockerfile
Container
create
running
start
stop
stop start
delete
rm
rm rm
rmi
rmi
Ready to use docker!
22
Connect with Docker Hub
23Docker使うだけなら、Docker Hubと仲良くなろう
- 世界中のDockerユーザーがimageを上げている
- 大概のものはセットアップ済で手に入る
- 何か試す場合にインストーラ叩かなくて良いから
圧倒的時間短縮になる
Connect with Docker Hub
24 とりあえず、ここに欲しいソフトウェアの名前入れて検索する
https://hub.docker.com/
Connect with Docker Hub
25WEB開くのめんどくさい場合はコマンドでも可能
- docker search --no-trunc {username or repository}
- スター数でフィルタとかもできる
docker search --no-trunc -s 1000 {username or repository}
Connect with Docker Hub
26 Officialイメージがあればそれを使う。
それ以外はスターとpullされた回数見て適当に選べばOK。
Connect with Docker Hub
27
このコマンド叩いてローカル環境に持ってくる
Connect with Docker Hub
28imageが自分の環境に登録されるので、runして使う
※お手軽!
runの仕方はDocker Hubのページに大概書いてあるので、
それ通りに叩けばOK
29
Dockerをインストールして
先ずはコマンドを叩いてみよう
Dockerメモ:
https://scrapbox.io/sh-ogawa/Docker
30 THANKS!
Any questions?

アプリ屋のための Docker入門

Editor's Notes

  • #4 絵にすると次のページみたいな感じ
  • #5 Hyper-Vとの比較。 Hyper-Vはその上にOSが丸ごと乗るけど、DockerはDocker Engineの上にOSが来ない。
  • #6 アプリ屋・・・は、とりあえず表面的な中身判れば良いと思う。 インフラ屋は勿論それではダメ。イメージの差分管理だったり色々覚えてデプロイロールバックとかできるようになる必要がある
  • #7 雑に言うと、作ったアプリをファイルシステムごとパッケージングして実行することで、論理的にはどこで動かしても同じ実行環境になる。 本番にそのまま持って行ける!みたいなことを言ってるのはこの部分のこと。
  • #8 クラ-サバ構成 ・dockerコマンド(client)叩くとdaemon(server)が処理する ・ホスト上に保存領域があって、docker hubから取った内容をキャッシュしたりできる
  • #9 絵にすると次のページみたいな感じ
  • #10 後で出てくるDockerHubと仲良くなるために、読めた方が良い
  • #11 後で出てくるDockerHubと仲良くなるために、読めた方が良い
  • #13 動かすとこんな感じ
  • #15 Dockerイメージのビルドでこけた場合は、正常に完了したイメージを使って、続きをビルドできるのでリトライ時に全部をやり直す必要がない。 勿論全部をやり直すことも可能。
  • #19 データはホストOS上に書き出してコンテナ自体は毎回停止時に削除することで、起動するたびにクリーンな状態のコンテナを起動することもできる。 このスライド上だとrunオプションに-d付けてるので毎回コンテナは消える
  • #20 データはホストOS上に書き出してコンテナ自体は毎回停止時に削除することで、起動するたびにクリーンな状態のコンテナを起動することもできる
  • #22 他の状態もあるけど、使ったことないから除いてる。基本はコレ。
  • #23 ここまで頭に入れておけばDockerは簡単に使えます