Open10
Docker入門

1. 仮想化とDockerについての基礎知識
仮想マシンの基本
- 仮想マシンとは、ソフトウェアで作られた物理マシンにみえるもの
- 個人の物理マシンにおいても、仮想マシンは有用
Dockerとコンテナ型仮想化
- 仮想化ソフトウェアにはいくつか種類があり、Dockerはコンテナ型の仮想化である
- コンテナにゲストOSは含まれないが、あるように見える
- コンテナはLinuxカーネルにホストマシンを借りるため、Linux仮想マシンが必要

2. Dockerと周辺の要素を眺める
Dockerの要素
- Docker
- Docker Engine
- Docker Compose
- Docker Desktop
- Docker Hub
コンテナとイメージの仕様
OCI準拠のコンテナ
- Docker Engine
- gVisor
- Podman

3. Dockerのインストール
macOSでDockerを使う
- Docker for Mac をインストールする
-
docker
コマンドが実行できればインストール完了
$ docker --version
Docker version 27.5.1, build 9f9e405

4. Dockerの基本と大原則
コンテナとは
コンテナはコマンドを実行するための領域
Dockerのコンテナは、あるコマンドを1つ実行するためホストマシンに作られる領域。
コンテナの特徴
- コンテナはイメージから作る
- 個々のコンテナは互いに独立している
- コンテナはコンテナランタイムがあればどこでも動く
イメージとは
イメージの特徴
イメージはコンテナの実行に必要なパッケージで、複数レイヤと呼ばれるtarアーカイブファイルから成り立つ。
イメージを共有する
同じコンテナを起動したければ、イメージを共有すればよい。
イメージは Docker Hub などのレジストリサービスで公開されており、利用する際はホストマシーンにダウンロードして使う。
Dockerfileとは
Dockerfileの特徴
Dockerfileはイメージにレイヤを追加する設定ファイル。

5.コンテナの基礎
- コンテナを起動すると実行したコマンドのプロセスがコンテナ内で PID1 になる
- コンテナを停止すると PID1 は終了する
- PID1 が終了するとコンテナも終了する
- コンテナのステータスは7つもあるが、起動中を中心にいくつか理解すれば十分
- コンテナのステータスは PID1 の状態とセットで理解する

6. コンテナの基本操作
Hello World コンテナを起動する
docker container run hello-world
Ubuntu コンテナを起動する
docker run -it ubuntu /bin/bash
起動中のコンテナ一覧を確認する
docker container ls
すべてのコンテナ一覧を確認する
docker container ls -a
起動中のコンテナを停止する
docker container stop <コンテナID>
停止済みのコンテナを削除する
docker container rm <コンテナID>
起動中のコンテナを強制削除する
docker container rm -f <コンテナID>

7. Rubyコンテナでインライン実行する
Rubyコンテナでインライン実行する
docker container run ruby ruby -e 'print 40 + 2'
コンテナ名を指定してコンテナを起動
docker container run --name hello hello-world
コンテナ名と自動削除を指定してコンテナを起動
docker container run --name hello2 --rm hello-world

8. Pythonの対話シェルを起動してコンテナとやりとりする
PythonコンテナでPythonの対話シェルを起動
docker container run --rm --interactive --tty python python3

9. Nginxサーバーを起動してブラウザからアクセスする
コンテナを起動して80番ポートをホストマシンの8080番ポートにマッピング
docker container run --rm --publish 8080:80 nginx

10. MySQLサーバーをバックグラウンドで起動する
MySQLコンテナを起動する(最小構成)
docker container run --name db --rm --env MYSQL_ROOT_PASSWORD=secret --publish 3306:3306 mysql
MySQLコンテナを起動する(ユーザー・DB指定あり)
docker container run --name db --rm --env MYSQL_ROOT_PASSWORD=secret --env MYSQL_USER=app --env MYSQL_PASSWORD=pass1234 --env MYSQL_DATABASE=sample --publish 3306:3306 mysql
MySQLコンテナをバックグラウンドで起動
docker container run --name db --rm --detach --env MYSQL_ROOT_PASSWORD=secret --env MYSQL_USER=app --env MYSQL_PASSWORD=pass1234 --env MYSQL_DATABASE=sample --publish 3306:3306 mysql
MySQLコンテナを停止
docker container stop db