LinuC レベル2
技術解説セミナー
コンテナ技術・Docker/Kubernetesについて

2021/10/10（Sun） 13:00-14:15
LPI-Japanプラチナスポンサー 株式会社ゼウス・エンタープライズ
鯨井 貴博（LinuCエヴァンジェリスト）© LPI-Japan / EDUCO all rights reserved.

Who are you?（講師紹介）
鯨井貴博

LPI-Japan プラチナスポンサー
LinuCエバンジェリスト

株式会社ゼウス・エンタープライズ

Linuxとの出会い

⼤学時代 Unixの存在を知り、⽇経Linuxを読み始める。
2000年にVine Linux 2.0で⼀度挫折を経験。
その悔しさを忘れきれず、2007年 他業種からIT業界に転職しLinuxに再チャレンジ。
SE・商⽤製品サポート・インストラクター・プロジェクト管理などを経験し、現在に⾄る。
⾃分⾃⾝が学習で苦労した経験から、初⼼者を含む受講者に分りやすい講義を⾏うように⼼がけている。
また、興味の向くIT技術・オープンソースソフトウェアなどについて、Opensourcetehブログ（https://www.opensourcetech.tokyo/）で執筆中。
実際に⾃分でやってみる/使ってみる・開発者本⼈から話を聞いてみることを⼤切にしています。

Linus Torvaldsさん(Linux開発者)

Igor Sysoevさん(nginx開発者)

Alexei Vladishevさん(Zabbix開発者)© LPI-Japan / EDUCO all rights reserved.

2

ゼウス・エンタープライズからのお知らせ
提供するITサービス

https://www.zeus-enterprise.co.jp/solution/service© LPI-Japan / EDUCO all rights reserved.

3

ゼウス・エンタープライズからのお知らせ
提供するITサービス

https://www.it-training.tokyo/kids/index.html© LPI-Japan / EDUCO all rights reserved.

4

ゼウス・エンタープライズからのお知らせ
提供するITサービス

https://www.zeus-enterprise.co.jp/ikebukuro_office/© LPI-Japan / EDUCO all rights reserved.

5

アジェンダ
1. LinuCについて- 試験概要と特徴

2.

技術解説

3.

Appendix
Podmanについて

4.

Q&A

コンテナ技術
Docker/Kubernetesについて- 1.01.2 仮想マシン・コンテナの概念と利⽤- 2.06.1 コンテナの仕組み- 2.06.2 Dockerコンテナとコンテナイメージの管理
実機におけるコンテナ操作 by Katacoda© LPI-Japan / EDUCO all rights reserved.

6

本⽇のゴールØ

オンプレ/仮想マシン/コンテナの違いを理解するØ

コンテナ技術の概要を理解するØDockerの操作を理解するØ

Kubernetesについて知る© LPI-Japan / EDUCO all rights reserved.

7

技術解説

LinuC について

© LPI-Japan / EDUCO all rights reserved.

8LinuCレベル１／レベル２ Version10.0とは

nLinuCとは
クラウド時代の即戦⼒エンジニアであることを証明するLinux技術者認定

ü現場で「今」求められている新しい技術要素に対応• オンプレミス／仮想化・コンテナを問わず様々な環境下でのサーバー構築• 他社とのコラボレーションの前提となるオープンソースへの理解• システムの多様化に対応できるアーキテクチャへの知⾒ü全⾯的に⾒直した「今」⾝につけておくべき技術範囲を網羅
今となっては使わない技術やコマンドの削除、アップデート、新領域の取り込みüLinuxの範疇だけにとどまらない領域までカバー
セキュリティや監視など、ITエンジニアであれば必須の領域もカバー© LPI-Japan / EDUCO all rights reserved.

9

クラウドを活⽤できるITエンジニアに必須の技術がまとまっている
AWSなどのパブリッククラウドを活⽤するための技術

AWSなどのパブリッククラウドを活⽤するための技術

間が
⽋けて
いる状態

仮想マシン／コンテナ技術、クラウドセキュリティ、
アーキテクチャ、ほか

オンプレミスのサーバーサイドLinux技術

オンプレミスのサーバーサイドLinux技術【今まで／その他】

Version10.0© LPI-Japan / EDUCO all rights reserved.

10LinuC Level1試験
101試験

102試験

1.01︓Linuxのインストールと仮想マシン・コンテナの利⽤
1.01.1Linuxのインストール、起動、接続、切断と停⽌
1.01.2仮想マシン・コンテナの概念と利⽤
1.01.3ブートプロセスとsystemd
1.01.4プロセスの⽣成、監視、終了
1.01.5デスクトップ環境の利⽤
1.02︓ファイル・ディレクトリの操作と管理
1.02.1ファイルの所有者とパーミッション
1.02.2基本的なファイル管理の実⾏
1.02.3ハードリンクとシンボリックリンク
1.02.4ファイルの配置と検索
1.03︓GNUとUnixのコマンド
1.03.1コマンドラインの操作
1.03.2フィルタを使ったテキストストリームの処理
1.03.3ストリーム、パイプ、リダイレクトの使⽤
1.03.4正規表現を使⽤したテキストファイルの検索
1.03.5エディタを使った基本的なファイル編集の実⾏
1.04︓リポジトリとパッケージ管理
1.04.1apt コマンドによるパッケージ管理
1.04.2Debianパッケージ管理
1.04.3yumコマンドによるパッケージ管理
1.04.4RPMパッケージ管理
1.05︓ハードウェア、ディスク、パーティション、ファイルシステム
1.05.1ハードウェアの基礎知識と設定
1.05.2ハードディスクのレイアウトとパーティション
1.05.3ファイルシステムの作成と管理、マウント
https://linuc.org/linuc1/range/101.html
https://linuc.org/linuc1/range/102.html

1.06︓シェルおよびスクリプト
1.06.1シェル環境のカスタマイズ
1.06.2シェルスクリプト
1.07︓ネットワークの基礎
1.07.1インターネットプロトコルの基礎
1.07.2基本的なネットワーク構成
1.07.3基本的なネットワークの問題解決
1.07.4クライアント側のDNS設定
1.08︓システム管理
1.08.1アカウント管理
1.08.2ジョブスケジューリング
1.08.3ローカライゼーションと国際化
1.09︓重要なシステムサービス
1.09.1システム時刻の管理
1.09.2システムのログ
1.09.3メール配送エージェント(MTA)の基本
1.10︓セキュリティ
1.10.1セキュリティ管理業務の実施
1.10.2ホストのセキュリティ設定
1.10.3暗号化によるデータの保護
1.10.4クラウドセキュリティの基礎
1.11︓オープンソースの⽂化
1.11.1オープンソースの概念とライセンス
1.11.2オープンソースのコミュニティとエコシステム© LPI-Japan / EDUCO all rights reserved.

11

LinuC Level2試験
201試験

2.01︓システムの起動とLinuxカーネル
2.01.1 ブートプロセスとGRUB
2.01.2 システム起動のカスタマイズ
2.01.3 Linux カーネルの構成要素
2.01.4 Linuxカーネルのコンパイル
2.01.5 カーネル実⾏時における管理とトラブルシューティング
2.02︓ファイルシステムとストレージ管理
2.02.1 ファイルシステムの設定とマウント
2.02.2 ファイルシステムの管理
2.02.3 論理ボリュームマネージャの設定と管理
2.03︓ネットワーク構成
2.03.1 基本的なネットワーク構成
2.03.2 ⾼度なネットワーク構成
2.03.3 ネットワークの問題解決
2.04︓システムの保守と運⽤管理
2.04.1 makeによるソースコードからのビルドとインストール
2.04.2 バックアップとリストア
2.04.3 ユーザへの通知
2.04.4 リソース使⽤状況の把握
2.04.5 死活監視、リソース監視、運⽤監視ツール
2.04.6 システム構成ツール
2.05︓仮想化サーバー
2.05.1 仮想マシンの仕組みとKVM
2.05.2 仮想マシンの作成と管理
2.06︓コンテナ
2.06.1 コンテナの仕組み
2.06.2 Dockerコンテナとコンテナイメージの管理
https://linuc.org/linuc2/range/201.html
https://linuc.org/linuc2/range/202.html

202試験

2.07︓ネットワーククライアントの管理
2.07.1 DHCPサーバーの設定と管理
2.07.2 PAM認証
2.07.3 LDAPクライアントの利⽤⽅法
2.07.4 OpenLDAPサーバーの設定
2.08︓ドメインネームサーバー
2.08.1 BINDの設定と管理
2.08.2 ゾーン情報の管理
2.08.3 セキュアなDNSサーバーの実現
2.09︓HTTPサーバーとプロキシサーバー
2.09.1 Apache HTTPサーバーの設定と管理
2.09.2 OpenSSLとHTTPSの設定
2.09.3 nginxの設定と管理
2.09.4 Squidの設定と管理
2.10︓電⼦メールサービス
2.10.1 Postfixの設定と管理
2.10.2 Dovecotの設定と管理
2.11︓ファイル共有サービス
2.11.1 Sambaの設定と管理
2.11.2 NFSサーバーの設定と管理
2.12︓システムのセキュリティ
2.12.1 iptables や firewalld によるパケットフィルタリング
2.12.2 OpenSSH サーバーの設定と管理
2.12.3 OpenVPNの設定と管理
2.12.4 セキュリティ業務
2.13︓システムアーキテクチャ
2.13.1 ⾼可⽤システムの実現⽅式
2.13.2 キャパシティプランニングとスケーラビリティの確保
2.13.3 クラウドサービス上のシステム構成
2.13.4 典型的なシステムアーキテクチャ© LPI-Japan / EDUCO all rights reserved.

12LinuC 学習のコツ①出題範囲の内容について調べてみる
公式ドキュメント・技術書など②実際に操作してみる
これが⼤事︕③学習の補助教材などを利⽤する・メールマガジン
・標準教科書・過去のセミナー資料
詳細は、https://lpi.or.jp/learning/

LPI-Japan LinuC通信「レベル2・レベル3を受けてみよう︕」でサンプル問題作ってるので、よかったら登録
してください︕© LPI-Japan / EDUCO all rights reserved.

13

LinuC 学習のコツ④過去セミナーの動画
https://www.youtube.com/user/LPIJapan© LPI-Japan / EDUCO all rights reserved.

14

LinuC 学習のコツ
学習の具体的な進め⽅(2~3か⽉程度)
試験範囲の確認(LinuC HP)●月頃、受験しようという目標を立てる↓
LinuC認定教材の購⼊・1週⽬読込 https://lpi.or.jp/linuc1/book.shtml
https://lpi.or.jp/linuc2/book.shtml↓
LinuC認定教材・Webサイトを参考に、実機操作(サーバ構築やコマンド操作)を試す※操作やトラブルシュートで⼒が⾝に付く︕↓
LinuC認定教材 2週⽬読込●月●日頃、受験しようと決める↓問題集やメルマガサンプル問題で理解⼒確認 https://linuc.org/study/samples/※理解不⾜箇所の洗い出し↓
LinuC認定教材 3週⽬※弱点の補強
↓受験申込
受験日の変更も可能なので安心↓問題を8~9割以上、正解となるまで繰り返し解く
苦⼿な部分を重点的に復習・受験まで継続して学習すること↓・繰り返し学習し、理解度/問題正解率を⾼めた状態で受験すること
受験© LPI-Japan / EDUCO all rights reserved.

15

技術解説

コンテナ技術© LPI-Japan / EDUCO all rights reserved.

16

技術解説
1.01.2 仮想マシン・コンテナの概念と利⽤
重要度

4

概要
仮想マシンとコンテナを実現する基本技術を理解している。
ハイパーバイザー、コンテナのそれぞれの特徴と違いを理解する。
仮想マシン、コンテナの起動、停⽌ができる。
詳細
カーネルとハイパーバイザーと仮想マシンの関係を理解している。
ハイパーバイザー、仮想化⽀援機能仮想マシンとコンテナの特徴を理解している。
ホストOSとコンテナの関係を理解している。
仮想マシンの起動と停⽌ができる。
virsh
仮想マシンにログインできる。
コンテナの起動と停⽌ができる。
docker© LPI-Japan / EDUCO all rights reserved.

17

技術解説
2.06.1 コンテナの仕組み
重要度

2

概要
詳細

基本的なコンテナの仕組みについて理解している。

物理マシン、仮想マシン、コンテナの特徴と違いを理解している。
コンテナのファイルシステムとイメージの関係を知っている。
コンテナを実現する技術の概念を知っている。
名前空間, cgroups© LPI-Japan / EDUCO all rights reserved.

18

技術解説
2.06.2 Dockerコンテナとコンテナイメージの管理
重要度

3

概要
Dockerを導⼊してコンテナ実⾏環境を構築できる。
Dockerコンテナを実⾏できる。
コンテナイメージを管理できる。
詳細
Dockerを導⼊して、ネットワークを構成する。
ポート変換, フラットL2ネットワーク
Dockerコンテナを実⾏して、停⽌する。
docker ps/stats, docker run/create/restart, docker pause/unpause, docker stop/kill, docker rm
Dockerコンテナに接続してプロセスを実⾏する。
docker attach, docker exec
コンテナイメージを管理する。
Dockerレジストリ: docker images, docker pull, docker rmi, docker import
Dockerfile: docker build, docker commit© LPI-Japan / EDUCO all rights reserved.

19

技術解説

物理マシン・仮想マシン・コンテナの違い© LPI-Japan / EDUCO all rights reserved.

20

物理マシン・仮想マシン・コンテナの違い
物理マシンの特徴
1HWを1OSで占有できる⇔環境構築まで⻑時間要する（HW調達・インストールの⼿間など）柔軟なリソース調整が困難（過剰になったり、不⾜したり）

アプリケーション・ソフトウェア

ホストOS（Linux・Windows・Mac OSなど）
ハードウェア© LPI-Japan / EDUCO all rights reserved.

21

物理マシン・仮想マシン・コンテナの違い
仮想マシンの特徴
1HWを複数OSで共有⇔

柔軟なリソース調整（増減）が可能
環境構築まで⻑時間要する（インストールの⼿間など）

仮想環境（VM）
仮想環境（VM）
仮想化ソフトウェア（Virtualboxなど）
ホストOS

ハイパーバイザー（ESXi・Hyper-Vなど）
ハードウェア© LPI-Japan / EDUCO all rights reserved.

22

物理マシン・仮想マシン・コンテナの違い
コンテナの特徴
1HWを複数コンテナで共有 ⇔コンテナ

柔軟なリソース調整（増減）が可能
環境構築が容易（インストールの⼿間など）
軽量

コンテナ

コンテナ

コンテナ

コンテナ

コンテナ

コンテナ管理ソフトウェア（Docker・Podman・Kubernetesなど）
ホストOS
ハードウェア© LPI-Japan / EDUCO all rights reserved.

23

物理マシン・仮想マシン・コンテナの違い
コンテナの特徴
移植性に優れる

起動が速い

コンテナイメージが共通であり、共有が可能

物理マシン/
仮想マシン

コンテナ

vs

数秒程度

数分程度
Linux

Mac OS

Windows

軽量である

e
op

DevOps（開発・運⽤保守）との相性がよい
pl
oy
e
l
a
d
p
n
co
de

HDD 数⼗GBvsコンテナ
HDD 100MB

tera

物理マシン/
仮想マシン

Dev

bu
ild

Ops
te

s t fee

db

ac
k

m

r
to
i
on
© LPI-Japan / EDUCO all rights reserved.

24

コンテナを⽀える技術 名前空間（namespaces）
名前空間は、 グローバルシステムリソースを抽象化層で覆うことで、 名前空間内のプロセスに対して、 ⾃分たちが専⽤の分離されたグローバルリソースを持っているかのように⾒せる仕組みである。 グローバルリソースへの変更は、 名前空間のメンバーである他のプロセスには⾒えるが、 それ以外のプロセスには⾒えない。
名前空間の⼀つの利⽤⽅法はコンテナーの実装である。
名前空間

定数

分離対象

Cgroup

CLONE_NEWCGROUP

Cgroupルートディレクトリ

IPC

CLONE_NEWIPC

System V IPC/POSIX メッセージキュー

Network

CLONE_NEWNET

ネットワークデバイス/スタック/ポート など

Mount

CLONE_NEWNS

マウントポイントPID

CLONE_NEWPID

プロセスIDTime

CLONE_NEWTIME

起動時刻/モノトニック時刻

User

CLONE_NEWUSER

ユーザID/グループID

UTS

CLONE_NEWUTS

ホスト名/NISドメイン名

これらを使い各コンテナを仮想に隔離する
Linux kernelの機能

http://man7.org/linux/man-pages/man7/namespaces.7.html
http://manpages.ubuntu.com/manpages/focal/ja/man7/namespaces.7.html
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/namespaces.7.html© LPI-Japan / EDUCO all rights reserved.

25

コンテナを⽀える技術 cgroupscgroups（Control Groups）は、Linuxカーネルの機能の1つで、プロセスを階層的なグループに編成し、さまざまなタイ
プのリソースの使⽤（メモリ、CPU,ネットワーク帯域など）を制限および監視できるようにします。
カーネルのcgroupインターフェースは、cgroupfsと呼ばれる疑似ファイルシステムを介して提供されます。

プロセス
1

プロセス
2

プロセス
3

システムリソースの割当などを管理

リソース
コントローラー

http://man7.org/linux/man-pages/man7/cgroups.7.html
https://wiki.archlinux.jp/index.php/Cgroups
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/setting-limitsfor-applications_managing-monitoring-and-updating-the-kernel© LPI-Japan / EDUCO all rights reserved.

26

技術解説

Docker© LPI-Japan / EDUCO all rights reserved.

27

Dockerとはコンテナ

コンテナ管理ソフトウェア
ホストOS
ハードウェアhttps://www.docker.com/resources/what-container© LPI-Japan / EDUCO all rights reserved.

28

コンテナイメージの配布場所
DockerHubなどにあるコンテナイメージを利⽤できる

https://hub.docker.com/search?q=&type=image© LPI-Japan / EDUCO all rights reserved.

29

コンテナイメージの構成
ベースイメージを取得し、そこにイメージの層（レイヤー）を重ねて利⽤する

nginxの起動(systemctl start nginx)
コンテンツファイル配置（vi index.html）
nginxの設定（vi ***.conf）

ベースイメージに対して、コマンドを実施しサービスを構築

パッケージのインストール（apt install nginx）
取得したベースイメージ（CentOS,Ubuntuなど）

Overlay Filesystemという仕組みを使っている

https://www.kernel.org/doc /html/latest/filesystems/overlayfs.html
https://docs.docker.jp/v17.06/engine/userguide/storagedriver/overlayfs-driver.html© LPI-Japan / EDUCO all rights reserved.

30

コンテナ・コンテナイメージのライフサイクル
コンテナイメージの配布場所

コンテナイメージのアップロード(docker push)

コンテナイメージの取得(docker pullなど)

コンテナの⽣成・起動(docker run/createなど)

コンテナ
イメージ

コンテナイメージの⽣成(docker commitなど)

コンテナ

コンテナの停⽌・削除(docker stop/rmなど)

コンテナ

コンテナ管理ソフトウェア© LPI-Japan / EDUCO all rights reserved.

31

Dockerによるコンテナの操作
docker images（取得したコンテナイメージの⼀覧表⽰）
使い⽅︓docker images
docker pull（コンテナイメージの取得）
使い⽅︓docker pull URL/取得するコンテナイメージ[:タグ名]※デフォルトでは、https://hub.docker.com/からコンテナイメージ取得をする※タブ名を未指定の場合、:latest が適⽤される[root@cc6516dd95d9 ~]# docker images
REPOSITORYTAG
IMAGE ID
CREATED
SIZE[root@cc6516dd95d9 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
07aded7c29c6: Pull complete
bbe0b7acc89c: Pull complete
44ac32b0bba8: Pull complete
91d6e3e593db: Pull complete
8700267f2376: Pull complete
4ce73aa6e9b0: Pull complete
Digest: sha256:969419c0b7b0a5f40a4d666ad227360de5874930a2b228a7c11e15dedbc6e092
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest[root@cc6516dd95d9 ~]# docker images
REPOSITORYTAG
IMAGE ID
CREATEDSIZE
nginx
latestf8f4ffc8092c
2 days ago
133MB

コンテナイメージ名とタグ

https://docs.docker.com/engine/reference/commandline/images/
https://docs.docker.com/engine/reference/commandline/pull/© LPI-Japan / EDUCO all rights reserved.

32

Dockerによるコンテナの操作
docker create（コンテナ⽣成）
使い⽅︓docker create コンテナイメージ
docker ps（稼働コンテナの⼀覧表⽰）
使い⽅︓docker ps [-a]※-aをつけると、停⽌中などのコンテナを含めて表⽰する[root@cc6516dd95d9 ~]# docker images
REPOSITORYTAG
IMAGE ID
CREATEDSIZE
nginx
latestf8f4ffc8092c
2 days ago
133MB[root@cc6516dd95d9 ~]# docker create nginx
29cf25137989beb7d527f02f2e66a409f65b7aa90fcbecea7652f2847fa9cae3[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED[root@cc6516dd95d9 ~]# docker ps -a
CONTAINER ID
IMAGE
COMMAND
CREATED
29cf25137989
nginx"/docker-entrypoint.…" 14 seconds ago

STATUSSTATUS
Created

PORTS
PORTS

NAMES
NAMES
sharp_lamarr

コンテナID ※コンテナを制御するために使⽤

https://docs.docker.com/engine/reference/commandline/create/https://docs.docker.com/engine/reference/commandline/ps/© LPI-Japan / EDUCO all rights reserved.

33

Dockerによるコンテナの操作
docker run（コンテナ⽣成 & コンテナ起動）
使い⽅︓docker run オプション コンテナイメージ[:タグ名]-d︓バックグラウンドでコンテナを実施-i︓コンテナの標準⼊⼒を開く-t︓端末（TTY）を割り当てる-p︓公開ポートを指定（ポート変換）-p 8080:80 とした場合、ホストOSのTCP8080番ポート経由で、コンテナのTCP80番ポートへアクセスする--priviledge︓systemctlを使える権限などを付与[root@cc6516dd95d9 ~]# docker run --name nginx01 -d -p 8080:80 nginx
73760180eb30b9a93a1c57873a1406fe8e99d8060ae312254bcadebb3cb8913b[
root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATEDSTATUS
73760180eb30
nginx"/docker-entrypoint.…" 4 seconds ago
Up 2 seconds

https://docs.docker.com/engine/reference/commandline/run/

PORTS
NAMES
0.0.0.0:8080->80/tcp nginx01© LPI-Japan / EDUCO all rights reserved.

34

Dockerによるコンテナの操作
docker stats（コンテナの稼働状況確認）
使い⽅︓docker stats [コンテナID]※ctrl + c で終了させる[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
73760180eb30
nginx"/docker-entrypoint.…" 2 minutes ago

STATUSUp 2 minutes

PORTS
NAMES
0.0.0.0:8080->80/tcp nginx01[root@cc6516dd95d9 ~]# docker stats
CONTAINER ID
73760180eb30

NAME
nginx01

CPU %
0.00%

MEM USAGE / LIMIT MEM %NET I/O
BLOCK I/O
1.98MiB / 1.46GiB 0.13%
2.63kB / 0B
0B / 4.1kB
3https://docs.docker.com/engine/reference/commandline/stats/

PIDS© LPI-Japan / EDUCO all rights reserved.

35

Dockerによるコンテナの操作
docker pause（コンテナプロセスの中断）
使い⽅︓docker pause コンテナID
docker unpause（コンテナプロセスの再開）
使い⽅︓docker unpause コンテナID[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
73760180eb30
nginx"/docker-entrypoint.…" 3 minutes ago[
root@cc6516dd95d9 ~]# docker pause 73760180eb30
73760180eb30[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
73760180eb30
nginx"/docker-entrypoint.…" 3 minutes ago

STATUSUp 2 minutes

PORTS
NAMES
0.0.0.0:8080->80/tcp nginx01

STATUSPORTS
NAMES
Up 3 minutes (Paused) 0.0.0.0:8080->80/tcp nginx01[root@cc6516dd95d9 ~]# docker unpause 73760180eb30
73760180eb30[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
73760180eb30
nginx"/docker-entrypoint.…" 3 minutes ago

STATUSUp 3 minutes

https://docs.docker.com/engine/reference/commandline/pause/
https://docs.docker.com/engine/reference/commandline/unpause/

PORTS
NAMES
0.0.0.0:8080->80/tcp nginx01© LPI-Japan / EDUCO all rights reserved.

36

Dockerによるコンテナの操作
docker stop（コンテナの停⽌）
使い⽅︓docker stop コンテナID-t︓コンテナ停⽌の待ち時間を指定（デフォルト10秒）
docker kill（コンテナの強制停⽌）
使い⽅︓docker kill コンテナID
docker start（停⽌しているコンテナの起動）
使い⽅︓docker start コンテナID
docker restart（コンテナの再起動）
使い⽅︓docker restart コンテナID

https://docs.docker.com/engine/reference/commandline/stop/
https://docs.docker.com/engine/reference/commandline/kill/
https://docs.docker.com/engine/reference/commandline/start/
https://docs.docker.com/engine/reference/commandline/restart/© LPI-Japan / EDUCO all rights reserved.

37

Dockerによるコンテナの操作
docker attach（稼働コンテナへの接続）
使い⽅︓docker attach コンテナID※接続し作業完了後、ctrl + c でコンテナごと終了、ctrl + p・ctrl + q でコンテナ内のプロセスのみ終了となる
docker exec（稼働コンテナでのコマンド実⾏）
使い⽅︓docker exec コンテナID 実⾏コマンド-i︓コンテナの標準⼊⼒を開く-t︓端末（TTY）を割り当てる[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
73760180eb30
nginx"/docker-entrypoint.…" 5 minutes ago

STATUSUp 4 minutes

PORTS
NAMES
0.0.0.0:8080->80/tcp nginx01[root@cc6516dd95d9 ~]# docker exec -it 73760180eb30 /bin/bash
root@73760180eb30:/# uname -a
Linux 73760180eb30 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64 GNU/Linuxroot@73760180eb30:/# exit
exit

https://docs.docker.com/engine/reference/commandline/attach/https://docs.docker.com/engine/reference/commandline/exec /© LPI-Japan / EDUCO all rights reserved.

38

Dockerによるコンテナの操作
docker rm（コンテナの削除）
使い⽅︓docker rm コンテナID※停⽌しているコンテナを削除-f︓稼働コンテナを強制削除[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
73760180eb30
nginx"/docker-entrypoint.…" 7 minutes ago

STATUSUp 7 minutes

PORTS
NAMES
0.0.0.0:8080->80/tcp nginx01[root@cc6516dd95d9 ~]# docker stop 73760180eb30
73760180eb30[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND

CREATED[root@cc6516dd95d9 ~]# docker ps -a
CONTAINER ID
IMAGE
COMMAND
CREATED
73760180eb30
nginx"/docker-entrypoint.…" 7 minutes ago

STATUS

PORTS

NAMES

STATUS
PORTS
Exited (0) 7 seconds ago

NAMES
nginx01[root@cc6516dd95d9 ~]# docker rm 73760180eb30
73760180eb30[root@cc6516dd95d9 ~]# docker ps -a
CONTAINER ID
IMAGE
COMMAND

CREATEDSTATUShttps://docs.docker.com/engine/reference/commandline/rm/

PORTS

NAMES

© LPI-Japan / EDUCO all rights reserved.

39

Dockerによるコンテナの操作
docker rmi（コンテナイメージの削除）
使い⽅︓docker rmi コンテナイメージ[:タグ名][root@cc6516dd95d9 ~]# docker images
REPOSITORYTAG
IMAGE ID
CREATEDSIZE
nginx
latestf8f4ffc8092c
2 days ago
133MB[root@cc6516dd95d9 ~]# docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:969419c0b7b0a5f40a4d666ad227360de5874930a2b228a7c11e15dedbc6e092
Deleted: sha256:f8f4ffc8092c956ddd6a3a64814f36882798065799b8aedeebedf2855af3395b
Deleted: sha256:f208904eecb00a0769d263e81b8234f741519fefa262482d106c321ddc9773df
Deleted: sha256:ed6dd2b44338215d30a589d7d36cb4ffd05eb28d2e663a23108d03b3ac273d27
Deleted: sha256:c9958d4f33715556566095ccc716e49175a1fded2fa759dbd747750a89453490
Deleted: sha256:c47815d475f74f82afb68ef7347b036957e7e1a1b0d71c300bdb4f5975163d6a
Deleted: sha256:3b06b30cf952c2f24b6eabdff61b633aa03e1367f1ace996260fc3e236991eec
Deleted: sha256:476baebdfbf7a68c50e979971fcd47d799d1b194bcf1f03c1c979e9262bcd364[root@cc6516dd95d9 ~]# docker images
REPOSITORYTAG
IMAGE ID

CREATED

SIZE

https://docs.docker.com/engine/reference/commandline/rmi/© LPI-Japan / EDUCO all rights reserved.

40

Dockerによるコンテナの操作
docker export（コンテナからtarball作成）
使い⽅︓docker export コンテナID > tarballファイル名[root@cc6516dd95d9 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATED
d6bd1c3a6c3c
nginx:1.21.3"/docker-entrypoint.…" 5 seconds ago

STATUSUp 4 seconds

PORTS
NAMES
0.0.0.0:8080->80/tcp nginx02[root@cc6516dd95d9 ~]# docker export d6bd1c3a6c3c > nginx02.tar[root@cc6516dd95d9 ~]# ls
nginx02.tar original-ks.cfg

https://docs.docker.com/engine/reference/commandline/export/© LPI-Japan / EDUCO all rights reserved.

41

Dockerによるコンテナの操作
docker import（tarballからコンテナイメージ作成）
使い⽅︓cat tarballファイル名 | docker import – コンテナイメージ名:タグ名[root@cc6516dd95d9 ~]# ls
nginx02.tar original-ks.cfg[root@cc6516dd95d9 ~]# cat nginx02.tar | docker import - nginx:import_test
sha256:a3b9f3b60499f28caa95435b1f4e5293baf704fd1e88b66334ee70026bdeb31d[root@cc6516dd95d9 ~]# docker images
REPOSITORYTAG
IMAGE ID
CREATED
SIZE
nginx
import_test
a3b9f3b60499
6 seconds ago
132MB
nginx
1.21.3f8f4ffc8092c
2 days ago
133MB

https://docs.docker.com/engine/reference/commandline/import/© LPI-Japan / EDUCO all rights reserved.

42

Dockerによるコンテナの操作
Dockerfileを使ったコンテナの⽣成必要なもの（以下を同⼀ディレクトリに保存する）
・Dockerfile
・設定ファイル(nginx.repo)やWebサーバのコンテンツファイル(index.html)など
Dockerfileのサンプル
FROM centos:latest・・・利⽤するベースイメージの指定
MAINTAINER SubMattNesk(kujiraitakahiro) <SMN@test.local>・・・メンテナーの情報記載
COPY ./nginx.repo /etc/yum.repos.d/・・・コンテナビルド時にコピーするファイルとその配置場所
RUN [“/bin/bash”,“-c”,“yum -y install nginx”]・・・コンテナビルド後、実⾏するコマンド
EXPOSE 80・・・コンテナで公開するポート
LABEL “version” = “0.02” ¥・・・コンテナに付与するラベル（複数⾏の場合、バックスラッシュを使う）"description" = "presented by SubMattNesk"
ADD ./index.html /usr/share/nginx/html/・・・コンテナにコピーするファイルとその配置場所
ENTRYPOINT [“/usr/sbin/nginx”,“-g”,“daemon off;”]・・・コンテナ構築時に実⾏するコマンド
CMD [“-c”,“/etc/nginx/nginx.conf”]・・・ENTRYPOINTで使うコマンドオプション

https://docs.docker.com/engine/reference/builder/© LPI-Japan / EDUCO all rights reserved.

43

Dockerによるコンテナの操作
nginx.repo[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=trueindex.html<!DOCTYPE html><link rel="stylesheet" href="main.css"><html><head><title>Sample HTML5 Page</title><!-- ここを編集すると、HTML⽂書のタイトルを変更できます --></head><body><p>Test Message</p><!-- ここを編集すると、表⽰される⽂字情報を変更できます --></body></html>https://docs.docker.com/engine/reference/builder/© LPI-Japan / EDUCO all rights reserved.

44

Dockerによるコンテナの操作
docker build（Dockerfileからのコンテナイメージ⽣成）
使い⽅︓docker build Dockerfileがあるディレクトリパス-t︓タグ名を指定する[root@cc6516dd95d9 ~]# cat Dockerfile
FROM centos:latest
MAINTAINER SubMattNesk(kujiraitakahiro) <SMN@test.local>
COPY ./nginx.repo /etc/yum.repos.d/
RUN [“/bin/bash”,“-c”,“yum -y install nginx”]
EXPOSE 80
LABEL “version” = “0.02” ¥"description" = "presented by SubMattNesk"
ADD ./index.html /usr/share/nginx/html/
ENTRYPOINT [“/usr/sbin/nginx”,“-g”,“daemon off;”]
CMD [“-c”,“/etc/nginx/nginx.conf”][root@54b9b9864066 ~]# lsDockerfile index.html nginx.repo original-ks.cfg© LPI-Japan / EDUCO all rights reserved.

45

Dockerによるコンテナの操作[ [root@54b9b9864066 ~]# docker build -t sample/nginx ./Sending build context to Docker daemon 316.5MB
Step 1/9 : FROM centos:latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest---> 5d0da3dc9764
Step 2/9 : MAINTAINER SubMattNesk(kujiraitakahiro) <SMN@test.local>---> Running in 86d8fccafb27
Removing intermediate container 86d8fccafb27---> 328876b7c4d0.
省略.
Step 8/9 : ENTRYPOINT [“/usr/sbin/nginx”,“-g”,“daemon off;”]---> Running in edc416928338
Removing intermediate container edc416928338---> f682e9a6f5df
Step 9/9 : CMD [“-c”,“/etc/nginx/nginx.conf”]---> Running in 7951c25c67e4
Removing intermediate container 7951c25c67e4---> 2307099dcce3
Successfully built 2307099dcce3
Successfully tagged sample/nginx:latest[root@54b9b9864066 ~]# docker images
REPOSITORYTAG
IMAGE ID
sample/nginx
latest2307099dcce3
centoslatest5d0da3dc9764

CREATED
SIZE
6 seconds ago
343MB
2 weeks ago
231MB⽣成されたコンテナイメージ© LPI-Japan / EDUCO all rights reserved.

46

Dockerによるコンテナの操作
docker commit（コンテナからコンテナイメージを⽣成）
使い⽅︓docker commit コンテナID コンテナイメージ名:タグ名[root@2414cef14360 ~]# docker images
REPOSITORYTAG
IMAGE ID
CREATEDSIZE
nginx
latestf8f4ffc8092c
2 days ago
133MB[root@2414cef14360 ~]# docker images
REPOSITORYTAG
IMAGE ID
CREATEDSIZE
nginx
latestf8f4ffc8092c
2 days ago
133MB[root@2414cef14360 ~]# docker run --name nginx_production -d -p 8080:80 nginx
97e02fefac1dc4d8a76178fd5ab863b1aabcbbea63bc53fa3252c1a227bf7abb[root@2414cef14360 ~]# docker ps
CONTAINER ID
IMAGE
COMMAND
CREATEDSTATUS
PORTS
NAMES
97e02fefac1d
nginx"/docker-entrypoint.…" 4 seconds ago
Up 3 seconds
0.0.0.0:8080->80/tcp nginx_production[root@2414cef14360 ~]# docker commit nginx_production dev_nginx:version1.0
sha256:1937bcc85c93ac4b4ccf6374466114a049c787459fcdc5e5400258b6e68b83d3[root@2414cef14360 ~]# docker images
REPOSITORYTAG
IMAGE ID
CREATED
SIZE
dev_nginx
version1.0
1937bcc85c93
6 seconds ago
133MB⽣成されたコンテナイメージ
nginx
latestf8f4ffc8092c
2 days ago
133MB※⽣成したコンテナイメージは、docker login（Dockerhubへのログイン）・
docker push（Dockerhubへのアップロード）で共有・公開が可能

https://docs.docker.com/engine/reference/commandline/commit/© LPI-Japan / EDUCO all rights reserved.

47

技術解説

コンテナ操作デモ© LPI-Japan / EDUCO all rights reserved.

48

コンテナ操作デモØPC(WindowsまたはMacなど)でWebブラウザから利⽤できます。

Ø

ユーザ登録すれば利⽤可能です。
Twitter、LinkedIn、Google、Githubのソーシャルアカウントを使えます。
https://www.katacoda.com/submattnesk© LPI-Japan / EDUCO all rights reserved.

49

コンテナ操作デモ
実際に触ってみてコンテナを学ぼう︕

https://www.katacoda.com/submattnesk/courses/courses© LPI-Japan / EDUCO all rights reserved.

50

技術解説

Kubernetesとは© LPI-Japan / EDUCO all rights reserved.

51

KubernetesとはKubernetesとは

https://kubernetes.io/ja/© LPI-Japan / EDUCO all rights reserved.

52

KubernetesとはKubernetesが提供してくれるもの

https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/© LPI-Japan / EDUCO all rights reserved.

53

KubernetesとはKubernetesの動作環境

コンテナの制御を担当

コンテナの格納先※冗⻑構成https://kubernetes.io/ja/docs/concepts/overview/components/© LPI-Japan / EDUCO all rights reserved.

54

KubernetesとはCNCF(Cloud Native Computing Foundation)のlandscapeでKubernetesに関するプロジェクトを確認できる。

https://landscape.cncf.io/
https://www.cncf.io/© LPI-Japan / EDUCO all rights reserved.

55

Kubernetesとはコンテナを起動してみる

ubuntu@kubeonubu:~$ kubectl run nginx001 --image=nginx:latest --port=80
pod/nginx001 createdubuntu@kubeonubu:~$ kubectl get pods
NAME
READY STATUSRESTARTS AGE
nginx001 0/1 ContainerCreating 0
5subuntu@kubeonubu:~$ kubectl get pods
NAME
READY STATUS RESTARTS AGE
nginx001 1/1 Running 0
7s

dockerでのコンテナ起動と同じような操作© LPI-Japan / EDUCO all rights reserved.

56

Kubernetesとはコンテナを起動してみる Part2
ubuntu@kubeonubu:~$ cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:yamlファイルを使ったコンテナ起動
app: nginx
spec:※3台のnginxを起動し、replicas: 3
⾃動復旧などしてくれる
selector:
matchLabels:
app: nginx
template:
metadata:labels:ubuntu@kubeonubu:~$ kubectl apply -f nginx-deployment.yaml
app: nginx
deployment.apps/nginx-deployment createdspec:
containers:
ubuntu@kubeonubu:~$ kubectl get pods,deployments- name: nginx
NAME
READY STATUS RESTARTS AGE
image: nginx:1.21.3
pod/nginx001
1/1 Running 015m
ports:
pod/nginx-deployment-db9778f94-dj4q9 1/1 Running 0
12m- containerPort: 80
pod/nginx-deployment-db9778f94-s5hbl 1/1 Running 012m
pod/nginx-deployment-db9778f94-7mlc5 1/1 Running 0
12m
NAME
READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 3/3 3
312m© LPI-Japan / EDUCO all rights reserved.

57

Appendix© LPI-Japan / EDUCO all rights reserved.

58

Podmanについて
PodmanとはRedhat社を中⼼としてコミニティで開発されているコンテナ管理ソフトウェア。
podmanコマンドを使う・内部アーキテクチャー・リリースサイクルなどに違いがある。

https://podman.io/© LPI-Japan / EDUCO all rights reserved.

59Podmanについて
Podmanを使ってみよう︕
https://www.katacoda.com/submattnesk/courses/courses© LPI-Japan / EDUCO all rights reserved.

60

コンテナ関連でよかった書籍
イラストでわかるDockerとKubernetes
https://gihyo.jp/book/2020/978-4-297-11837-2© LPI-Japan / EDUCO all rights reserved.

61

本⽇のまとめ© LPI-Japan / EDUCO all rights reserved.

62

本⽇のまとめØオンプレ/仮想マシン/コンテナの違いを理解するØコンテナ技術の概要を理解するØDockerの操作を理解するØKubernetesについて知る“コンテナの良さ”を中⼼に話をしてきましたが、コンテナを理解し、物理マシン・仮想マシン・コンテナのどれが⼀番適切か判断できることが⼤事︕© LPI-Japan / EDUCO all rights reserved.

63

Q&A

© LPI-Japan / EDUCO all rights reserved.

64

Thank you for join todayʼs seminar!

https://www.opensourcetech.tokyo/
https://twitter.com/matt_zeus
https://www.facebook.com/takahiro.kujirai.1© LPI-Japan / EDUCO all rights reserved.

65