Skip to content

Commit d09d854

Browse files
authored
Merge pull request #186 from iij/2025/docker_docker_compose
Draft: 2025/docker docker compose
2 parents 38d3371 + 888808f commit d09d854

2 files changed

Lines changed: 140 additions & 96 deletions

File tree

src/development/docker/docker/GETSTART.md

Lines changed: 78 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ prior_knowledge: 仮想化、CUI 操作
1818
$ docker version
1919
```
2020

21-
上記コマンドが実行できない方は事前にDocker(及びコマンド)のインストールが終わっているか否か確認し、未完了の人は、Docker のインストールを行ってください
21+
上記コマンドが実行できない方は、Docker(及びコマンド)のインストールが終わっているか確認し、未完了であればDockerのインストールを行ってください
2222

2323
## Docker コンテナを起動する
2424

@@ -28,20 +28,21 @@ Dockerコンテナを使って仮想環境プラットフォームを構築す
2828
- Dockerコンテナの作成
2929
- Dockerコンテナの起動
3030

31-
従って、Dockerコンテナを起動する為に最初にすべきことは**Dockerコンテナイメージ**を取得する事になります
31+
まずは、**作成済みのDockerコンテナイメージ**を利用してコンテナを起動してみましょう
3232

33-
Dockerコンテナイメージは、自分で作成(ビルド)して取得する方法と、作成済みのDockerコンテナイメージを取得する方法の2種類があります。
34-
まずは、作成済みのイメージを利用してコンテナを起動することを試してみましょう。
33+
---
3534

3635
### 演習1 Dockerコンテナを起動する
3736

38-
- **docker run**コマンドを使用して**getting-started**コンテナを起動する
39-
```bash
40-
docker run --rm -p 80:80 docker/getting-started
41-
```
42-
<details><summary>実行中のログ</summary>
37+
**docker run** コマンドを使用して **getting-started** コンテナを起動します。
4338

39+
```bash
40+
docker run --rm -p 80:80 docker/getting-started
4441
```
42+
43+
<details><summary>実行中のログ</summary>
44+
45+
```bash
4546
Unable to find image 'docker/getting-started:latest' locally
4647
latest: Pulling from docker/getting-started
4748
c158987b0551: Pull complete
@@ -57,54 +58,73 @@ Digest: sha256:d79336f4812b6547a53e735480dde67f8f8f7071b414fbd9297609ffb989abc1
5758
Status: Downloaded newer image for docker/getting-started:latest
5859
89e2c9780f5caf3b5250013e002e8aaf9f8ea74c2e940eca49b890dfc019ab5e
5960
```
61+
6062
</details>
6163

62-
- 起動の確認
63-
- ブラウザを開き、以下のURLを入力します
64-
```
65-
http://localhost:80
66-
```
67-
- 以下のような画面が表示されれば成功です
68-
![getting-started](./images/getting-started.png)
69-
- コンテナの終了
70-
**Ctrl + c** を押す
71-
- ターミナルが戻ってくる
72-
73-
### 発展課題1
74-
75-
先ほどの作業ではフォアグラウンドで実行している為、ターミナルが占有されてしまいます。
76-
また、このような起動では例えばssh等で接続している場合はセッション切断と共にコンテナが停止してしまう為、発展課題ではこれを永続化する事をやってみましょう。
77-
78-
デーモン起動をすると、ターミナルは返ってきてしまうため起動確認は `docker ps`を使って確認します。
79-
80-
- コンテナのデーモン起動
81-
```bash
82-
docker run --rm -p 80:80 docker/getting-started
83-
```
84-
- コンテナの起動確認
85-
```bash
86-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87-
38ebcf110f45 docker/getting-started "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp fervent_shaw
88-
```
89-
- ここで**NAMES**に表示されている値を記憶、若しくは記録しておいてください
90-
- 起動の確認
91-
- ブラウザを開き、以下のURLを入力します
92-
```
93-
http://localhost:80
94-
```
95-
- 以下のような画面が表示されれば成功です
96-
![getting-started](./images/getting-started.png)
97-
- コンテナの終了
98-
- **docker stop**コマンドを用いてdockerコンテナを停止します
99-
```
100-
docker stop <NAME>
101-
```
102-
- コンテナが停止したことの確認
103-
- ブラウザにて **http://localhost**にアクセスし、アクセスできないことを確認する
104-
- **docker ps**コマンドを用いて、何も表示されないことを確認する
105-
```
106-
docker ps
107-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
108-
```
109-
110-
<credit-footer/>
64+
#### 起動の確認
65+
66+
- ブラウザで以下のURLを入力します:
67+
68+
http://localhost:80
69+
70+
- 以下のような画面が表示されれば成功です:
71+
72+
![getting-started](./images/getting-started.png)
73+
74+
#### コンテナの終了
75+
76+
**Ctrl + C** を押して終了します。
77+
78+
---
79+
80+
## 発展課題1: デーモンとして起動する
81+
82+
先ほどはフォアグラウンド実行だったため、ターミナルが占有されていました。
83+
ここではバックグラウンド(デーモン)で起動し、ターミナルを占有しない方法を学びます。
84+
起動後は `docker ps` を使用して確認します。
85+
86+
### ステップ1: バックグラウンドで起動
87+
88+
```bash
89+
docker run --rm -d -p 80:80 docker/getting-started
90+
```
91+
92+
### ステップ2: コンテナの起動確認
93+
94+
```bash
95+
docker ps
96+
97+
(出力例)
98+
99+
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
100+
38ebcf110f45 docker/getting-started "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp fervent_shaw
101+
```
102+
103+
- **NAMES** に表示されている値を控えておいてください。
104+
105+
### ステップ3: ブラウザで確認
106+
107+
http://localhost:80 にアクセスし、画面が表示されれば成功です。
108+
109+
![getting-started](./images/getting-started.png)
110+
111+
### ステップ4: コンテナの停止
112+
113+
```bash
114+
docker stop <NAME>
115+
```
116+
117+
### ステップ5: 停止の確認
118+
119+
- http://localhost にアクセスして、表示されないことを確認。
120+
- 以下のコマンドで、コンテナが停止していることを確認。
121+
122+
```bash
123+
docker ps
124+
125+
(何も表示されなければ停止しています)
126+
127+
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
128+
```
129+
130+
<credit-footer/>
Lines changed: 62 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
---
2-
footer: CC BY-SA Licensed | Copyright (c) 2023, Internet Initiative Japan Inc.
2+
footer: CC BY-SA Licensed | Copyright (c) 2024, Internet Initiative Japan Inc.
33
title: Dockerを触ってみよう
44
description: Docker の概要を学び、コンテナ操作を体験します
55
time: 1h
6-
prior_knowledge: 仮想化、CUI 操作
6+
prior_knowledge: 仮想化、CUI 操作、Linux基本操作(推奨)
7+
updated: 2025-07
78
---
89

910
<header-table/>
@@ -12,54 +13,63 @@ prior_knowledge: 仮想化、CUI 操作
1213

1314
## はじめに
1415

15-
Docker は、Docker, Incが開発しているコンテナ型の仮想環境プラットフォームです
16-
コンテナとは仮想マシンのように1台のコンピュータの上で、仮想的に複数のアプリケーションを動作させる技術・仕組みの1つです
16+
Dockerは、当初 Docker Inc. によって開発され、現在は Mirantis を中心にコミュニティと共に保守・開発が続けられている、コンテナ型の仮想環境プラットフォームです
17+
コンテナとは、1台のコンピュータ上で複数のアプリケーションを分離して動かすための、軽量かつ高速な仮想化技術のひとつです
1718

18-
Docker(コンテナ仮想化プラットフォーム)を使用すると、アプリケーションやその依存関係をコンテナと呼ばれる独立した環境にパッケージ化することができます。
19-
では、コンテナと仮想マシンは何が異なるのでしょう?
19+
Dockerを利用することで、アプリケーションとその依存関係を「コンテナ」と呼ばれる独立した実行環境としてパッケージ化し、どこでも同じように動作させることができます。
2020

21-
一般的に、仮想マシンと呼ばれるソフトウェアでは、ホストOS上で仮想マシン用のソフトウェア(VirtualBox等)を動かすことでホストOSとは異なるOSを起動します。
22-
一方、コンテナによる仮想化は、ホストOS上にアプリケーション実行用の専用領域を作成し、その中で実行する仕組みとなっています。
21+
では、「コンテナ」と「仮想マシン」には、どのような違いがあるのでしょうか?
22+
23+
従来の仮想マシンでは、ホストOS上に仮想化ソフトウェア(例:VirtualBox、VMwareなど)を動かし、その中でゲストOSを実行します。
24+
一方、コンテナはホストOSのカーネルを共有しつつ、独立したユーザー空間を構築することで、軽量で高速な実行環境を提供します。
2325

2426
### 本講義の目的
2527

26-
- Dockerについて正しい基礎知識と理解を得る
27-
- DockerFile および dockerコマンドを用いてdocker containerを作成・操作できるようにする
28+
- Dockerについての基礎的な知識と仕組みを理解する
29+
- Dockerfile および `docker` コマンドを使って、コンテナの作成・操作を体験する
2830

2931
#### 本講義で扱わないこと
3032

31-
- dockerコマンドのオプション・細かい操作に対する解説
32-
- コンテナイメージレイヤーの細かい解説
33+
- `docker` コマンドのすべてのオプション解説
34+
- コンテナイメージのレイヤー構造などの詳細な内部仕様
3335

3436
### 本講義の目標
3537

36-
- dockerコマンドを利用してコンテナの取得・起動・停止ができるようになる
37-
- DockerFileの読み方・書き方を知り、自分で作成もしくは加筆修正するなど、自分の目的に沿ったコンテナを作成できるようになる
38+
- `docker` コマンドを使って、コンテナの取得・起動・停止ができるようになる
39+
- Dockerfileの基本的な書き方・読み方を理解し、自分の目的に応じてコンテナを構築できるようになる
3840

3941
### "Docker" とは
4042

41-
**はじめに** で Docker = コンテナ型仮想環境プラットフォーム、として説明しましたが、本講義で扱う"Docker"は、コンテナ仮想プラットフォームを扱う上での技術的な概念やコマンド等を示します。
43+
ここで扱う "Docker" とは、コンテナ仮想化プラットフォームおよびその周辺ツール群を指します。
44+
45+
以下はDockerを扱う上で基本となる概念です。
46+
47+
- **Docker コンテナ**
48+
アプリケーションとその実行環境をパッケージ化したもの。OSやハードウェアに依存せず、どこでも同じ動作を再現できます。
4249

43-
以下にDockerを扱う上で重要となる概念を記載します。
50+
- **Docker イメージ**
51+
コンテナの元となるファイルシステムのテンプレート。アプリケーションとその依存ファイル、設定が含まれており、Dockerfileを用いて構築します。
4452

45-
- Docker コンテナ
46-
- Dockerは、アプリケーションとその依存関係をコンテナと呼ばれる軽量な仮想環境にパッケージ化します。コンテナは、ホストマシンとは独立して実行され、一貫した動作を提供します。コンテナはポータブルであり、異なる環境やプラットフォームで実行できます。
47-
- Docker イメージ
48-
- Dockerコンテナは、Dockerイメージから作成されます。イメージは、アプリケーションの実行に必要なすべての依存関係と設定を含むファイルシステムのスナップショットです。イメージは、**Dockerfile**と呼ばれるテキストファイルに定義され、ビルドコマンドを使用して作成されます。
53+
- **コンテナオーケストレーション**
54+
複数のコンテナを効率よく展開・管理する仕組み。シンプルな構成管理には `docker compose` を、より大規模なシステムには `Kubernetes`(k8s)がよく利用されます。
4955

50-
- コンテナオーケストレーション
51-
- Dockerは、コンテナのデプロイメントと管理を容易にするための機能を提供します。複数のコンテナを管理するためのツールとして、**Docker Compose****Kubernetes**(*)などがあります。これらのツールを使用すると、複雑なマルチコンテナ環境を構築し、スケーリングやロードバランシングなどの機能を実現することができます。
52-
- イメージの共有
53-
- Docker HubやDocker Registryなどのオンラインリポジトリを使用することで、Dockerイメージを共有および配布することができます。これにより、他の開発者との協力や、既存のイメージを再利用することが容易になります。
56+
※ 本講義では `docker compose`(Docker Compose v2 以降)を前提とします。従来の `docker-compose`(v1)は非推奨です。
5457

55-
本講では主に仮想環境プラットフォームである「**Docker コンテナ**」を中心に行いますが、一方で「**Docker イメージ**」についても学び、自身にとって扱いやすい仮想環境プラットフォームを扱えることを目的と致します。
58+
- **イメージの共有と配布**
59+
Docker Hub や GitHub Container Registry などのリポジトリを通じて、コンテナイメージを共有・再利用できます。
5660

57-
**コンテナオーケストレーション**」については続く docker-compose の項で扱います。
61+
- **OCI (Open Container Initiative)**
62+
現在、コンテナ技術は OCI により標準化されており、Dockerはその仕様に準拠した実装のひとつです。Podmanやcontainerdなども同様にOCI準拠です。
63+
64+
本講義では「Dockerコンテナ」と「Dockerイメージ」の操作を中心に学習を進めていきます。
65+
「コンテナオーケストレーション」については、後続の `docker compose` の講義で触れます。
5866

5967
### 講義の進め方
6068

61-
本講義では、予めDockerがインストールされていることを前提としています。
62-
Dockerのインストールが完了していない方は、「ハンズオン事前準備」を済ませてください。
69+
この講義は、Dockerがあらかじめインストールされている環境を前提としています。
70+
未インストールの場合は、事前準備ガイド「ハンズオン事前準備」に従ってセットアップを済ませてください。
71+
72+
> 💡 注意:Docker Desktop は商用利用に制限があります。Linux では `docker-ce``podman` などの代替も検討してください。
6373
6474
## Chapters
6575

@@ -71,20 +81,34 @@ Dockerのインストールが完了していない方は、「ハンズオン
7181
## 参考
7282

7383
### 仮想マシン vs コンテナ
74-
仮想マシンとコンテナ、どちらが優れており、どちらを使うべきなのでしょう?
7584

76-
それは一概にどちらが優れているからそうすべき、といった類いの物ではありません。
77-
コンテナは仮想マシンと比べて後発であるため、仮想マシンが抱えていた問題を解決しているのは確かですが、上位互換という事ではありません。
78-
コンテナには仮想マシンには無いメリットもありますがデメリットもあります。
79-
コンテナは仮想マシンと異なり、OS の中で別のOSを起動するという事が無いため、セットアップや起動時においてもOSに関わる処理を必要としない為、時間を大幅に短縮することが可能です。また、ハードウェアにアクセスする際もゲストOSを介することが無いため、オーバーヘッドが少なく高速な動作が期待できます。
85+
仮想マシンとコンテナ、どちらが「優れている」というよりは、それぞれ用途や目的に応じた使い分けが重要です。
86+
87+
コンテナは、仮想マシンよりも軽量かつ高速な環境構築が可能であり、CI/CDやマイクロサービスアーキテクチャとの相性が良いのが特徴です。
88+
ただし、仮想マシンのように完全に分離された環境を必要とする場合は、VMの方が適していることもあります。
89+
90+
例)
91+
92+
- コンテナ:Linux 上で Linux アプリケーションを高速起動したい
93+
- 仮想マシン:Linux 上で Windows アプリケーションを実行したい
94+
95+
### Docker のアーキテクチャ
96+
97+
![Docker Image](https://docs.docker.com/get-started/images/docker-architecture.webp)
98+
99+
### Docker Hubのレート制限について
100+
101+
Docker Hub には、匿名ユーザでのpull操作に対してレート制限(1時間に最大100回)が設けられています。大量にpullする場合は `docker login` を行うことで制限緩和されます。
80102

81-
しかし、その一方で仮想マシンと比べてホストOSとの独立性が少ないため、ホストOSとアーキテクチャが大きく異なるコンテナを共存させることはできません。
103+
### セキュリティの観点(発展)
82104

83-
例)Linux 上で Windows コンテナを起動・実行する
105+
実務では、以下のセキュリティ対策が重要です:
84106

107+
- コンテナイメージの脆弱性スキャン:`trivy`, `dockle`, `Grype` などのツール
108+
- Dockerfileでの `USER` 指定(root実行の回避)
85109

86-
### Docker のアーキテクチャ
110+
### 発展:DockerとWebAssembly(WASM)
87111

88-
![Docker Image](https://docs.docker.com/guides/images/docker-architecture.webp)
112+
近年は Docker が WebAssembly(WASM)との統合にも対応し始めており、軽量かつクロスプラットフォームな実行環境として注目されています。
89113

90-
<credit-footer/>
114+
<credit-footer/>

0 commit comments

Comments
 (0)