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つ実行するためホストマシンに作られる領域。

コンテナの特徴

  1. コンテナはイメージから作る
  2. 個々のコンテナは互いに独立している
  3. コンテナはコンテナランタイムがあればどこでも動く

イメージとは

イメージの特徴

イメージはコンテナの実行に必要なパッケージで、複数レイヤと呼ばれる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