1

モウフカブール
大澤文孝

2

インフラ担当者に向けた全体のお話は、OSC京都でお話しました
https://event.ospn.jp/osc2021-online-kyoto/

今回は開発者向け！
インフラ向けはOSC京都のアーカイブで！

3

大澤文孝
テクニカルライター／システムエンジニア／プログラマ／インフラエンジニア。
著書はもうすぐ100冊。100冊記念パーティーやりたい（けど反対されている）。

4

主な著書

もうすぐ100冊パーティーやりたい！

今日のお話はDocker
日経BP社より好評発売中※ときどきAmazon Unlimitedになったり、セールしたりします。

AWSでDockerを学ぶ
Kubernetesも解説！

アジェンダ• Dockerとは隔離したLinux環境を動かす技術である仮想マシンと何が違うの？
WindowsやmacOSで使うDocker（Docker Desktop）• Dockerの基本的なことコンテナとイメージコンテナの実行• Apacheを使ってみよう
起動、ネットワークにつなげる、中身をいじる、ホストのディスクを見せる• 開発現場で使うDocker
どんの場面で使うか、開発者は何を知らなければならないか、チームリーダーがすべきこと

Dockerとは隔離である• Dockerとは（主に）Linuxにおいて、プログラムを隔離した場所で動かす「コンテナ」という仕組みを実現する実装のひとつ【開発者目線】→DockerはWindowsやmacOSで動かせるよ（Docker Desktop）→WindowsやmacOSでLinuxのソフトが隔離した状態で動くよ• 隔離するとは？
ポイント①
独立したネットワーク

192.168.0.1

172.17.0.2

172.17.0.3/bin/sbin/home/usr/var…

/bin/sbin/home/usr/var…

/bin/sbin/home/usr
/var
…

コンテナ1

コンテナ2

メインの環境（ホスト）※IPアドレスはすべて仮

ポイント②
独立したストレージ• 隔離すると何が嬉しいの？
それぞれ別々にソフトのインストールやアップデートができる• 隔離しない（Docker利用しない）場合

192.168.0.1/bin/sbin/home/usr/var
app1
app2
…

アプリ1

アプリ2

• 隔離しない（Docker利用しない）場合LinuxがインストールされたPC（またはサーバ）

192.168.0.1
/bin
/sbin
/home/usr
/var
app1
app2
…

アプリ1は、PHP8にアップデートしたい！

アプリ1

アプリ2

?

アプリ2が動かなくなるかも• コンテナなら同居ができる
PHP8にアップデートしてもコンテナ2は影響を受けない
192.168.0.1

172.17.0.2

172.17.0.3

/bin
/sbin
/home
/usr
/var
…

/bin
/sbin
/home
/usr
アプリ1
/var
…

/bin
/sbin
/home
/usr
アプリ2
/var
…

コンテナ1

コンテナ2

メインの環境（ホスト）

• 実験が容易

192.168.0.1

172.17.0.2/bin/sbin
/home
/usr
/var
…

/bin/sbin/home/usr/var…

メインの環境
（ホスト）

コンテナ1

インストール、アンインス
トール、設定ファイルの書き換え、さまざまな実験をしても、メインの環境に影響がない！

［開発者目線］
CI/CDのテストのサーバーに便利ごちゃごちゃしてきたら、コンテナを作り直して、まっさらな状態から始め直すのも簡単• いろんな環境の同居ができる ［開発者目線］
バージョン違いの同居OK。検証がはかどる

192.168.0.1/bin/sbin/home/usr/var…
メインの環境（ホスト）

172.17.0.2
PHP7環境172.17.0.4
Ruby環境172.17.0.3
PHP8環境172.17.0.5
MySQL環境• 移動・コピーが容易

コンテナ/bin/sbin/home/usr/var…

［開発者目線］
ライブラリなども含めて、パッケージ化して別のコンピュータにコピーできる

イメージ
ファイル

納品物のアー
カイブ、差分の確認から解放される！

コンテナ/bin/sbin/home/usr/var…

仮想マシンと何が違うの？

• 仮想マシンの場合それぞれにOSが入っている

ホストOSのディスク

仮想マシン

仮想マシンソフト
ウェア
OSソフト
ウェア
OS

仮想化ソフト（VMWareやVirtualBoxなど）
ハードウェアにインストールしたOS（ホストOS）• Dockerの場合

/bin
/sbin
/home
/usr
/var
…
OSなし。ホストにインストールされているLinuxカー
ネルを使う

コンテナ

コンテナ

/bin/sbin
/home
/usr
/var
…

/bin/sbin
/home
/usr
/var
…

Docker Engine
ハードウェアにインストールしたOS
Linuxカーネル（Dockerホスト）

• DockerはLinuxじゃないとダメ
コンテナのなかで動かすものLinux

コンテナ

コンテナ

/bin/sbin/home/usr/var…

/bin/sbin/home/usr/var…

/bin/sbin/home/usr/var…

ホストのOSもLinuxDocker Engine
ハードウェアにインストールしたOSLinuxカーネル（Dockerホスト）

• ディストリビューション
RedHatコンテナ/bin/sbin/home/usr/var…

ホストであるUbuntuに入っているLinuxカーネ
ルで動く/bin/sbin/home/usr/var…

ホストのOSをUbuntuで構成した
場合

Docker Engine
UbuntuWindowsやmacOSで使うDocker• Docker Desktop for
Windows/for Mac

設定で有効化すればKubernetesも使える• Linuxを被せて動かす
Windows
やmacOSのディス
クシステ
ムLinuxカーネルが暗黙的に実行されている

動くのはLinuxのソフト

コンテナ

コンテナ

/bin/sbin/home/usr/var…

/bin/sbin/home/usr/var…

Docker Engine
Linuxカーネル（仮想マシン・ハイパーバイザー・WSL2など）

WindowsやmacOS• 自分のPCで好きなだけLinuxを使える
Docker DesktopをインストールしたWindowsやmacOS

192.168.0.1
C:¥・・・Linux環境172.17.0.2
PHP環境

172.17.0.4
WindowsやMac

Ruby環境172.17.0.3
MySQL環境172.17.0.5
Go環境• 完成物のコピーも容易
Docker DesktopをインストールしたWindowsやmacOS

192.168.0.1
C:¥
・・・

コンテナ

172.17.0.2
本番へのコピー

開発した
もの
イメージ
ファイル

WindowsやMac

開発現場ではDockerがフィーバー！！（死語）コンテナとイメージ• イメージからコンテナを作る
Dockerレジストリ
コンテナ
docker run …

イメージ
ファイル

/bin/sbin/home/usr/var…

Debian、Ubuntu、CentOS、Apache、Nginx、MySQL、…
※docker runは、docker pull（イメージダウンロード）、create（コンテナ作成）、start（コンテナ実行）をまとめて行うもの• どんなイメージがあるの？
ディストリビューションだけのイメージ
Debian、Ubuntu、CentOS、Alpine、BusyBox
サーバー系のソフトが入ったイメージ
MySQL、Apache、Nginx、WordPress、…
便利なツールCコンパイラ、TeX、（同人組版で使う）Re:VIEW、…
BusyBoxはコンテナにマウントしたディスクをtarして取り出したいとか、そんなつまらないことに、よく使われる。

• 1コンテナ＝1サービス
ApacheとMySQLを起動したいなら、それぞれ起動する。
docker run …

Apacheイメージ

docker run …

MySQLイメージ

コンテナ
/bin
Apache/sbin
…

コンテナ
/bin
MySQL/sbin…

• 自前で作ってもOK
docker run …

Ubuntuイメージ

Ubuntuコンテナ/bin
Apache/sbin…

コンテナのなかに入ってaptなどでインストールする。
ただしデーモンの起動方法が違う。systemctlとか使えないので、出来合のイメージ使うほうが簡単（OSC京都のアーカイブ見てね！）

• 1コンテナに複数サービスは入れられないUbuntuコンテナ/bin/sbin/home/usr/var…

Apache

MySQL

ひとつのコンテナに複数のサービスを入れないで！

Ubuntuなどの素のコンテナを作って、自前でApacheとかMySQLをインストールする→相当工夫しないと、どっちかひとつしかデーモンとして動かない→コンテナではデーモンとして動かせるのは1本だから。詳細はOSC京都のアーカ
イブで！

• イメージを探す

オフィシャルかを確認す
る（イメージ名が「ユーザー名/イメージ名」ではなくて、イメージ名のみ）

キーワード検索する

ダウンロード数を確認する• タグ
latest2
2.4.482.4.48-buster

最新版
2系統の最新版
2.4.48版
2.4.48のbuster版

httpd:2.4.48
イメージの作成者が決めた識別子（バージョン番号が慣例だが、そうとは限らない）

コンテナの実行• コンテナの実行①1回限り（フォアグラウンド）
何かコマンドを1回実行して終わらせる。コンパイル作業やTeXなどのコマンド実行、シェルを使って何かするなどなど。
②実行しっぱなしにするもの（バックグラウンド）
サーバー系。Apache、Nginx、MySQLなどさまざまなサービスを動かしたい場合。

• フォアグラウンドの例「hello-world」の例
docker run hello-world• コンテナの終了
コンテナは、コマンドの実行が終わると終了する

docker psコマンドは、実行中のコンテナ一覧を見る。docker run hello-worldでは、内部の「hello-worldを実行するコマンド」を実行するだけなので、それが終わればコンテナ終了する

• 残った残骸に注意
残骸はディスクを消費する！

docker psコマンドに「-a」を付けると、停止したコンテナが残骸として残っていることがわかる。不要なら、docmer rmコマンドで削除する。
もしくは、起動時に、「docker run --rm hello-world」 とすると、コンテナ終了にともないコンテナが自動的に削除される• 起動時には名前を付ける

起動時には、--nameオプションで名前を付けておくことを推奨。
付けないと、適当な名前が付けられるため、コンテナの終了や破棄などの際、名前で指定できずに辛い。
docker run --name mycontainer hello-world• コンテナの名前

Apacheを使おう• Apacheの実行例
docker run -d httpd

httpdというのは、Apacheが入った
イメージ名• 起動すると…
コンテナID

コンテナID• これではつながらない
80
192.168.0.1

172.17.0.2

C:¥
・・・

/bin/sbin/home/usr
Apache/var…

WindowsやmacOS

コンテナ1

コンテナが、どのポートで待ち受けするように作られているかは、ドキュメントで確認する

• 外からつなぐ

docker run -d -p 8080:80 httpd8080
80192.168.0.1

172.17.0.2

C:¥
・・・

/bin/sbin
Apache/home/usr/var…

WindowsやmacOS

コンテナ1

あとから-pの指定変更
不可• 停止するにはdocker stop コンテナ名 or コンテナID• コンテナの停止

• -pオプションを付けて起動
docker run -d -p 8080:80 httpd• ブラウザでつながる
http://localhost:8080/にアクセス

Docker Desktopなら、まさに、WindiowsやmacOSで「LinuxのApacheが動いた！」ってこと。

コンテナの中身をいじる• 隔離されている

192.168.0.1
C:¥・・・

WindowsやmacOS

172.17.0.2
/bin
/sbin
/home/usr
/var
…
コンテナ1

• 任意のコマンドを実行する

192.168.0.1
C:¥・・・

172.17.0.2
/bin
/sbin
/home/usr/var…

docker exec コンテナ名 コマンド
WindowsやmacOS

コンテナ1

• シェルで操作する-tを指定しないとコント
ロールキーやカーソルキーが効かない

192.168.0.1
C:¥・・・

172.17.0.2/bin/sbin/home/usr/var…

docker exec -it コンテナ名 /bin/bash
WindowsやmacOS

コンテナ1

• 必要なツールは自分でインストール

aptコマンドなど
192.168.0.1を使って、必要なツールをインスC:¥
トールする
・・・

172.17.0.2

WindowsやmacOS

コンテナ1/bin/sbin/home/usr/var…

docker exec -it コンテナ名 /bin/bash

コンテナのファイル操作する• ホストとコンテナとのファイルコピー

192.168.0.1

172.17.0.2

C:¥・・・
docker cp コピー元 コピー先

/bin/sbin/home/usr/var…

WindowsやmacOS

コンテナ1

• バインドマウント
Windowsの世界

ここをVSCodeとかWindowsのエディタで編集すると、Apacheから見えるLinuxの世界

192.168.0.1
C:¥…
Users¥
foo
Documents and Setttings
hoge
docker run …
-v C:¥Users¥…hoge:/usr/local/apache2/htdocs

172.17.0.2/bin/sbin/home/usr
local
apache2
htdocs/var…

• はかどる

好きなエディタで編集すればApacheから見えるコンテンツが変わる/usr/local/apache2/htdocsをボリュームマウントしたフォルダ

余談）ボリュームマウント• ボリュームマウント

192.168.0.1
C:¥・・・

172.17.0.2
docker run …
-v volfoo:/var/hoge
volfoovolbar

WindowsやmacOS

ボリューム（dockerが提供する仮想ストレージ）

/bin
/sbin
/home
/usr
/var
hoge
…

コンテナ1

• ボリュームマウント
LinuxがインストールされたPC（またはサーバ）

192.168.0.1/bin/sbin/home/usr/var…
メインの環境（ホスト）

ここに、/var/hogeに保存した内容が格納されて残っている
volfoovolbar
ボリューム（dockerが提供する仮想ストレージ）• ボリュームマウント
LinuxがインストールされたPC（またはサーバ）前に保存しておいたデータを引き続き、コンテナで使える

192.168.0.1

172.17.0.2

/bin
/sbin
/home/usr/var…

/bin/sbin/home/usr
/var
hoge
…

メインの環境
（ホスト）

volfoovolbarボリューム（dockerが提供する仮想ストレージ）

DBとか共有ファイル置き場によく使われる

コンテナ1

• データは外だしが基本
コンテナが削除されると、そのなかのデータが消える（当たり前）（あくまでも削除、rmした場合。stopした段階では消えない）。
よって、データはマウントして外だしするコンテナを削除すると、コンテナのデータは消えるよ。
永続化したいデータは外に出してね開発現場で使うDocker• チームリーダーはイメージを作る
開発環境のイメージを作って、配布してあげる。
配布先はプログラマのほかデザイナも考えられる。
追加したファイル

チームリーダー実行コマンド基のイメージ（Debianとかのベースイメー
ジやApacheなどのイメージ）

配布イメージDockerfileの書き方、ビルド方法などの知識が必要
プログラマ デザイナ• 使うだけのユーザー
プログラマやデザイナは、docker runやstop、rmなどの「使い方」だけ知ればOK。
（複数のコンテナを起動するdocker composeの使い方も理解していればよりよい）プログラマ

docker run -p 8080:80-v C:¥Users¥…hoge:/usr/local/apache2/htdocs https-pでポートの公開がわかること-vで自分が操作するフォルダにマッピングできること
デザイナ

• CI/CDにおける活用
テストの際の実行サーバとしてDockerを採用する

まとめdockerコマンド
で、穴開けして操作していく

• 隔離

ポイント①
独立したネットワーク

LinuxがインストールされたPC（またはサーバ）

192.168.0.1

172.17.0.2

172.17.0.3/bin/sbin/home/usr/var…

/bin/sbin/home/usr
/var
…

/bin
/sbin
/home/usr
/var
…

コンテナ1

コンテナ2

メインの環境（ホスト）※IPアドレスはすべて仮

ポイント②
独立したストレージ• docker runさえ理解できれば…
-pオプション
-vオプション

ポートの設定マウントの設定

• データは外に出すLinuxがインストールされたPC（またはサーバ）

192.168.0.1

172.17.0.2

C:¥・・・
volfoovolbarWindowsやmacOS

ボリューム（dockerが提供する仮想ストレージ）

/bin
/sbin
/home/usr
/var
hoge
…

コンテナ1

今後の活動モウフカブール

小笠原種高

大澤文孝

モウフカブール
http://mofukabur.com/

同人活動
次回参加イベント未定

モウフカブール（http://mofukabur.com/）

技術書典、技術書博覧会（技書博）、コミケなどで活動中。
技術同人のほかの音楽CD、写真集などを頒布しています。

通販でも買える・とらのあな
・メロンブックス
・boothなど【期間外は電子のみ】

・技術書典オンラインマーケット

音楽CD

恋するデータベース
・海とポスグレ・MyLove,MySQL
・ぼくの大好きなMaria
メロンブックスに委託中。
ボーナストラックにDBの曲が入ってます。

デバッグ音頭は、YouTubeで検索！

フルバージョンは、YouTubeで視聴できます。
モウフカブールで検索！

https://bit.ly/ODC2021_Form

Follow me@sour23（所要時間3分程度）

https://bit.ly/ODC2021_Form
AWSで学ぶdocker入門書

Follow me@sour23