Linux研修【ハンズオン】
コンテナを体験してみよう！
／仮想マシン・コンテナの概念と利用
LinuC取得を⽬指す⼈を応援する情報サイト「リナスク」主宰
LinuCエバンジェリスト

⽔澤泰敬© LPI-Japan / EDUCO all rights reserved.

⾃⼰紹介

⽔澤泰敬（ミズサワヤスタカ）
⽂系⼤学を卒業後、⽇経新聞関連企業、商社などへの転職を重ねた
のち、フリーランスを経て有限会社を設⽴。10数年にわたり数々の情報まとめサイトの運営に携わる。
サイト運営時に取材したキュレーションサイトへの転職、事業譲渡によるTSUTAYA関連企業への転籍を経て再度フリーランスとなる。

Linux技術者認定資格取得を⽬指す⼈を応援する情報サイト
https://linuc.spa-miz.com/

2020年、⽇本のエンジニア育成に何らかのカタチで携わりたいと思い、エンジニアスクールで企業研修講師を務めながら約半年の準備期間を経てリナスクを⽴ち上げ。
趣味はギターとテレビゲーム。

© LPI-Japan all rights reserved.

2

本セミナーの内容
n主題・内容ハンズオンを通じてコンテナ技術に実際に体験していただき、以下の主題の理解を深めます。
レベル１︓1.01.2 仮想マシン・コンテナの概念と利⽤
レベル２ 2.06.1 コンテナの仕組み、2.06.2 Dockerコンテナとコンテナイメージの管理

n想定スキルレベル・コンテナについて勉強したい
・Linuxについて勉強を始めたばかり（LinuCレベル１取得が⽬標）

n本セミナーのゴール・コンテナの起動・再開・停⽌が⾏える（1.02.2の範囲）
・Dockerコンテナを実際に⾃分の⼿で操作してみる（2.06.2の⼀部）© LPI-Japan all rights reserved.

3

本セミナーのサマリー

n LinuCの概要
n 仮想化とコンテナ技術の概要
n Dockerの概要
n Webブラウザで使えるクラウド環境の概要
n ハンズオン© LPI-Japan all rights reserved.

4

ハンズオンの内容
l クラウド経由でLinuxの仮想環境を利⽤
l クラウド仮想環境にWebサーバーを構築
l Dockerコマンドでさまざまなコンテナを実⾏
l Dockerfileでカスタムイメージを作成
l Docker ComposeでWordpressサーバーを構築

質問については随時Q&Aで受け付けますが、時間と進⾏の都合上、セミナー中に全てお答えできるとは限りません。その場合は、後⽇公開される動画の中で回答させていただきますのであらかじめご了承ください。

© LPI-Japan all rights reserved.

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

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

6

「LinuC」の出題範囲

nVersion10.0と従来の出題範囲の⽐較
テーマLinuC-1

Version 10.0

従来仮想技術・仮想マシン／コンテナの概念
・クラウドセキュリティの基礎←（Version10.0で新設）

オープンソースの文化・オープンソースの定義や特徴
・コミュニティやエコシステムへの貢献←（Version10.0で新設）

その他→（Version10.0で削除）

アクセシビリティ、ディスククォータ、プリンタの管理、SQLデータ管理、他

仮想化技術

・仮想マシンの実行と管理（KVM）
・コンテナの仕組みとDockerの導入←（Version10.0で新設）

システムアーキテクチャ

・クラウドサービス上のシステム構成
・高可用システム、スケーラビリティ、他←（Version10.0で新設）

LinuC-2
その他

・統合監視ツール（zabbix）
・自動化ツール（Ansible）→（Version10.0で削除）←（Version10.0で出題範囲に含む）
RAID、記憶装置へのアクセス方、FTP
サーバーの保護、他© LPI-Japan all rights reserved.

7

LinuCの3つのレベル

n順次ステップアップしていく認定構成

n上位レベルに認定されるためには、下位レベルの認定が必須© LPI-Japan all rights reserved.

8LinuC認定資格を取得したら
nLinuC試験に合格して認定資格の認定を取得すると、LPI-Japanから認定証と認定カードが送られてきます。認定者の証明としての認定ロゴが名刺などに使⽤できます。

© LPI-Japan all rights reserved.

9LinuCを学習することの意味「LinuCレベル1 / レベル2」の認定を取得できるIT技術者であれば、どのような分野のIT技術者にもつながる技術を持っていることを証明できる

LinuCを学習することで、IT技術者として身に付けておきたい重要かつ基礎的なスキルを獲得できる© LPI-Japan all rights reserved.

10Linux/LinuCの学習環境

n 実機

 Windows PCなどにLinux OSを直接導⼊
 外付HDD/SDDに導⼊して外付から起動すればWindowsを消さなくて済む

n 仮想環境 パソコンのホストOSはそのままにLinux仮想環境を導⼊ Virtual BoxやVagrantなどを利⽤

n クラウド型環境

 AWSやGCPの仮想マシンでLinux環境を構築（無料枠もあるが基本的には有料） Weブラウザで使えるクラウド型学習環境サービス（無料）

LinuCを取得するなら、実機、仮想、クラウド、それぞれを可能な限り試してみよう© LPI-Japan all rights reserved.

11

仮想化

n仮想化は、コンピューターをはじめとした種々の物理的なハードウ
ェア環境を抽象化しソフトウェア化すること
 1台のサーバーに複数の仮想サーバーを構築する
 複数のサーバーを1台のサーバーのように⾒せるnコンピューティング環境では、仮想化を⾏うため「仮想マシン」と「コンテナ」技術が使われているnストレージ、クライアント環境、ネットワークなども仮想化できる（LinuC Version10.0 新出題範囲学習補助教材より）© LPI-Japan all rights reserved.

12

仮想マシンn仮想マシンとは 物理的なサーバーと同等の機能・動作を再現した仮想的なハードウェア環境
 ハイパーバイザーと呼ばれるソフトウェアで実現 ハイパーバイザーはハードウェア上で直接動作する「Type1(ネイティブ型)」とハードウェアのホストOS上で稼働するアプリケーションが仮想マシンを再現する「Type2(ホスト型)」の2種類がある

Type1︓KVM 、VMware ESX/ESXi、Hyper-V、Xenなど
Type2︓VMware Workstation Player、VirtualBox、
Microsoft Virtual Serverなど

n仮想マシンの特徴
 それぞれの仮想マシンには個別にOS(ゲストOS)、ライブラリ(実⾏環境)、ミドルウェア、アプリケーションをインストールして独⽴したコンピューティング環境が構築できる ハードウェアをエミュレートするためCPUやメモリのリソースを多く消費する 仮想マシンはホストOSとは独⽴しているため実⾏環境が変わってもそのまま動作させることができる
 ホストOSとは異なる種類のOSを仮想マシン上で実⾏することが可能（LinuC Version10.0 新出題範囲学習補助教材より）© LPI-Japan all rights reserved.

13

コンテナ
nコンテナの概念とその特徴(レベル1補助教材)
 物理的なコンピューター上で稼働するOS(ホストOS)のリソースの⼀部を隔離し、仮想的に作り出された実⾏環境。chrootの機能を拡張したもの。

↓
ルートディレクトリを変更してコマンドを実⾏する＝アプリケーションによるアクセスを指定したディレクトリに限定する

 ホストOSとは隔離されたプロセスを作成し、その上にライブラリ(実⾏環境)、ミドルウェア、アプリケーションをインストールして、独⽴したコンピューティング環境を構築する。
 ホストOSのプロセスとして動作するので、CPUやメモリのリソース消費は少なく、起動するまでの時間がかからない。
 コンテナ管理ソフトウェアがハードウェアやOSごとの違いを吸収するため、他の実⾏環境へコンテナを容易に移動・配布できる。

(レベル2補助教材)
 ホスト上に区画化された空間を実現することが「コンテナ型仮想化」、実現⽅法が「コンテナ技術」。
 アプリケーションだけでなく動作に必要となるライブラリや設定ファイルなど実⾏環境をまとめたもの。
 コンテナエンジンがホストOSに常駐しコンテナの操作・管理を⾏う。
 各コンテナはコンテナエンジンが動作しているホストOSのカーネルを共有している。
 各コンテナの機能を構成するプロセスをプロセス群として扱うことができコンテナ間で互いのプロセスは参照できない。

（LinuC Version10.0 新出題範囲学習補助教材より）© LPI-Japan all rights reserved.

14

コンテナ
端的に⾔えば••••単⼀のホストOS上における複数の独⽴したアプリケーション実⾏環境

アプリケーション単位の仮想化
仮想マシンはハードウェア単位の仮想化

代表的なコンテナ技術がDocker（図はLinuC Version10.0 新出題範囲学習補助教材より）© LPI-Japan all rights reserved.

15

Dockerとは各コンテナは、コンテナの動作プラットフォーム(Docker Engineなど、右のロゴでいうと鯨が担う役割)上で動作する。
Docker Engineは、コンテナやイメージを管理するためのアプリケーション。DockerクライアントからDockerデーモンのAPIにアクセスすることでコンテナに関するさまざまな操作が⾏える。
Docker Engine

Docker Engineには、有償のEnterprise Edition(EE)と無償のCommunity Edition(CE)の2系統がある。

Dockerクライアント

Dockerを使いこなすためにはシステム構成を考え、それに適した構成定義ファイル(Dockerﬁle)などを作成するスキルが必要。
Kubernetesなどコンテナオーケストレーション技術を⽤いると、複数コンテナを連動させて可⽤性の⾼いシステムを短時間に構築し稼働させることができる。

REST APIDockerデーモン
コンテナレジストリ（主にLinuC Version10.0 新出題範囲学習補助教材より）© LPI-Japan all rights reserved.

16

コンテナイメージとDocker Hub
各コンテナはイメージと呼ばれるコンテナのテンプレートファイルから⽣成される。

レジストリ

イメージ

https://hub.docker.com/

コンテナ

ユーザーは独⾃にコンテナに含めるコンポーネントを定義してイメージを作成することもできるし、Docker Hubなどのレジストリなどで公開されている既成のイメージを取り込んでコンテナを⽣成することもできる。
Docker HubではcentosやubuntuなどのOSのほか、mysqlなどのDB, httpdなどのWebアプリといった、各種アプリケーションやミドルウェアを含むイメージなどが公開されている。

（主にLinuC Version10.0 新出題範囲学習補助教材より）© LPI-Japan all rights reserved.

17

コンテナのライフサイクル
コンテナのライフサイクルは、作成→実⾏→(⼀時)停⽌という⼀連の流れ。

取得して作成→破棄

ポーズruncreate

作成pause unpausestart

コマンドで状態が変化する。

rm

破棄

stop/kill restart 作成︓docker create 起動︓docker start 停⽌︓docker stop
 破棄︓docker rm

1つのコンテナをアップデートしながら使うのではなく、アップデートされた新しいコンテナを使う（＝次から次へとコンテナを乗り換える）。アップデートされたコンテナに乗り換える⽅が時間的にも速く間違いがない。

実行停止

×
旧型

破棄

×
使⽤中

破棄
新型
© LPI-Japan all rights reserved.

18

Dockerを使うメリットとデメリット
n メリット 1台のホストOSに複数のサーバー(アプリケーション)を構築できる（同じ種類のサーバーの複数構築も可能）
 動作が軽く、データ容量も軽量
 互いに隔離されている＝安全で管理もしやすい 作成、複製、破棄、アップデート、⼊れ替えなどが容易
 カスタマイズしたコンテナをイメージ化して配布できる
 開発環境や運⽤環境といった異なる環境で同じコンテナを再現できる（可搬性に優れる）

WebサーバーOS

Webサーバー1 Webサーバー2 Webサーバー3n デメリット 物理マシンに問題が起こると構築したコンテナ全てに影響が出る
 Linuxとコンテナエンジン(Docker Engine)が必須

Docker EngineOS© LPI-Japan all rights reserved.

19

Dockerコマンドの基本
n基本的な記述⽅法# docker コマンド(上位・副) オプション (オプションの引数) 対象

引数 例︓最新版のubuntuコンテナイメージを取得してubu1という名前で起動しbashターミナルを実⾏
オプション1

対象

docker container run -it --name ubu1 ubuntu /bin/bash
上位コマンド副コマンド

オプション2(引数あり)

引数

旧体系では省略l コマンド新体系は上位コマンドと副コマンドの組合せ
上位コマンド︓container, image, volume, networkなど
副コマンド︓run, start, stop, ls, exec, commit, buildなど
旧体系は新体系でいう副コマンドが上位コマンド
run, images, start, stop, ps, exec, rm, rmi, pullなど

l オプション
-d, -i, -t, -p, --nameなど
l 対象
イメージやコンテナを指定
l 引数
コマンドなど© LPI-Japan all rights reserved.

20主なDockerコマンド
主コマンド

上位コマンド副コマンド

dockercontainer

run

start
restartstop
pause
unpausekill
attachcreatecommit
ls
rm
prune
exec
cp
logs
inspectstats
dockerimage

主なオプション

内容-d -i -t -p -v -e --name --rm-d-i-tリポジトリからイメージをダウンロードしてコンテナを⽣成し起動する
コンソールを離してバックグラウンドで起動する（--detach）
キーボードからの⼊⼒を標準⼊⼒としてシェルに伝える（--interactive）
シェルのプロンプト表⽰を有効にする（--tty）-p [ホストのポート番号:コンテナのポート番号]

ポート番号を指定する（--publish）-v [ホストのディスク:コンテナのディレクトリ]

ボリュームをマウントする（--volume）-e 環境変数=値--name [コンテナ名]--rm-i

環境変数を指定するコンテナに名称を付与する
コンテナが停⽌されたらコンテナを即時破棄するコンテナを起動するコンテナを再起動するコンテナを停⽌するコンテナを⼀時停⽌する
コンテナの⼀時停⽌を解除する
コンテナを強制終了する
実⾏中のコンテナに接続する
イメージからコンテナを作成する
コンテナをイメージに変換する
コンテナの⼀覧を表⽰する
停⽌済みのコンテナを削除する
停⽌済みのコンテナをまとめて削除する
実⾏中のコンテナでプログラム（コマンド）を実⾏する
コンテナとホスト間でファイルをコピーするコンテナのログを参照する
コンテナの詳細情報を表⽰する
コンテナのステータスを表⽰する-e -p -v --name-a-f -v-i -t

旧体系(v.1.21以前)
docker run

docker start
docker restart
docker stop
docker pause
docker unpause
docker kill
docker attach
docker create
docker commit
docker psdocker rm
docker exec
docker cp
docker logs
docker inspect
docker statspull

リポジトリからイメージをダウンロードする

docker pull

pushtag
lsrm
build
inspect

リポジトリにイメージをアップロードするイメージにタグを付与する
イメージの⼀覧を表⽰する
イメージを削除する
イメージを作成するイメージの詳細情報を表⽰する

docker push
docker tag
docker images
docker rmi
docker build-t© LPI-Japan all rights reserved.

21

出題範囲の確認と補助教材で取りあげられているDockerコマンド
1.01.2 仮想マシン・コンテナの概念と利⽤（重要度︓4）•

コンテナの起動と停⽌ができる。

出題範囲に具体的なコマンドの記述は無いが、レベル1ver.10
補助教材には下記のコマンドが掲載されている

nレベル1
 docker pull docker images
 docker run docker ps (–a)
 docker start docker stop docker restart docker pause docker unpause docker kill
 docker attach
 docker exec

2.06.2 Dockerコンテナとコンテナイメージの管理（重要度︓3）•••

Dockerを導⼊してコンテナ実⾏環境を構築できる。
Dockerコンテナを実⾏できる。
コンテナイメージを管理できる。

nレベル2 (レベル1の内容に加えて）
 docker network create docker network connect
 docker stats docker tag
 docker push docker rm
 docker rmi
 docker import docker commit- 出題範囲に本ページのコマンド全てが掲載されている。

© LPI-Japan all rights reserved.

22

Dockerを使う⽅法①n Linux実機にDockerを導⼊ ディストリビューション版のインストール(例︓CentOSの場合)# yum install docker 公式CE版のインストール(例︓CentOSの場合、新出題範囲学習補助教材より)# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# yum install docker-ce docker-ce-cli containerd.io

Container

Docker Engine
Linux（LinuC Version10.0 新出題範囲学習補助教材の図を改変）© LPI-Japan all rights reserved.

23

Dockerを使う⽅法②n ホスト型仮想マシン(VMware/VirtualBox+Linux OS)にDockerを導⼊Container

コンテナエンジン

コンテナエンジン

コンテナエンジン

Docker EngineLinux仮想マシン（LinuC Version10.0 新出題範囲学習補助教材の図を改変）© LPI-Japan all rights reserved.

24

Dockerを使う⽅法③nMacやWindowsにDocker Desktopを導⼊ https://www.docker.com/products/docker-desktop

Container

Docker Engine
Docker Desktop

Linux

ホストOS(Windows,Mac)

MacはHyperKitがDocker Desktopに含まれている。
WindowsのDocker Desktopには仮想環境は付属せず、WindowsのHyper-VやWSL2を使う。
Hyper-VはWindows Pro以上で利⽤できるが、WSL2はHomeエディションでも使える。

（LinuC Version10.0 新出題範囲学習補助教材の図を改変）© LPI-Japan all rights reserved.

25

Dockerを使う⽅法④nDockerが使えるクラウドサービスを利⽤ AWSやGCPなどのクラウドサービス（⼀部無料枠もあるが基本的には有料）
 Play with Docker（無料）︓https://www.docker.com/play-with-docker
Webブラウザ経由で使えるDocker実⾏環境。利⽤にはDocker IDが必要。4時間の利⽤制限。サーバーの負荷からか接続できない時がある。

 Katacoda（無料）︓ https://www.katacoda.com/ ← ハンズオンで使⽤
Webブラウザベースのオンライン学習サービス。Linuxインスタンスにはディストリビューション版が導⼊済み。⽐較的安定して利⽤できる（これまでの経験上）。

© LPI-Japan all rights reserved.

26

クラウド型学習環境

Katacodaとはnコンピュータ関連書籍を出版している⽶オライリー社が運営するWebブラウザベースのオンライン学習サービス
nテーマ毎に様々なシナリオが⽤意されており、トータルで300を超えるシナリオを無料提供
nサービス⾃体が仮想化技術で構築されている

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

27

Katacodaで使えるLinux環境• Ubuntu︓16.04, 18.04, 19.04, 20.04• CentOS︓7• Fedora︓ 30（2021/3現在）© LPI-Japan all rights reserved.

28

Katacodaの基本画⾯
学習⽤インスタンスは画⾯左の解説を読みながら、画⾯右のコンソールで操作します。

Linuxプレイグラウンドは解説がありません。画⾯右のコンソールで⾃分の好きなように操作します。

© LPI-Japan all rights reserved.

29

Katacodaを使うメリットとデメリット
メリット
nCentOSとUbuntu両⽅ともに⾃由度の⾼いインスタンスが利⽤可能
nLinuxインスタンスにあらかじめDockerが導⼊済みnコンテナ技術の学習コンテンツが豊富に⽤意されている
n無料（2021/3現在）

LinuC バージョン10.0 の学習に最適
デメリット
n時間制限があり、インスタンスを継続して利⽤できない
n極めて素のLinuxの動作に近いがなんらかの制限はある ターミナルでexitを⼊⼒するとインスタンスが終了してしまう
 Dockerでデタッチ（Ctrl+PのあとにCtrl+Q）するとインスタンスが終了してしまうなど© LPI-Japan all rights reserved.

30

ハンズオン
ここから先はハンズオンになります。
参加する⽅は「Katacoda」にログインしてください。

※Twitter、Google、GitHubいずれかのIDを持っていればソーシャルログインが可能です

https://www.katacoda.com/login© LPI-Japan all rights reserved.

31

CentOSプレイグラウンドにアクセス
Learn CentOSコースでStart Courceを選択後、PlaygroundのExplore Playgroundをクリックしてください。
https://www.katacoda.com/courses/centos/playground

START SCENARIOボタンをクリックすると、しばらくしてBashターミナルが表⽰されます。

左メニューに「Hello World」が表⽰されていればOKです。
インスタンスが終了してしまうので、CONTINUEボタンはクリックしないでください。

© LPI-Japan all rights reserved.

32参考資料についてlリナスクにてハンズオンの⼿順を解説した参考資料を公開しています。そちらを⾒ながら、コマンド⼊⼒してください。
https://linuc.spa-miz.com/?p=2232
講師も参考資料を共有しながらハンズオンを進めていきます。
ü⻑いコマンドは間違えると再⼊⼒も⼤変ですのでコピー＆ペーストを利⽤してください。
ハンズオンの中でも説明しますが、コードをペーストした際、まれにコンソールの頭に全⾓スペースが挿⼊されてしまうことがあります。そうなった場合はスペースを削除してからエンターキーで実⾏してください。
Ctrl+aでコンソールの先頭にカーソルを移動できます。
© LPI-Japan all rights reserved.

33

KatacodaのCentOS Playgroundでコンテナを動かす
nCentOSプレイグラウンドの状態確認(OS情報の確認)
 uname –a, uname –r
 cat /etc/os-release hostnamectl→Virtualizationがkvmになっているのを確認。Kataodaのサービスが仮想化技術で動作

nApache(httpd)の導⼊テスト
 yum install httpd -y
 systemctl start httpd systemctl status httpd Web Previewで80番ポートにアクセスしてApacheが動作していることを確認

nhtmlファイルを作って置き換えてみよう /var/www/htmlにindex.htmlを作成- echo Apache Works! > /var/www/html/index.html

 Web Previewでhttp 80番ポートにアクセス（リロードでOK）© LPI-Japan all rights reserved.

34

KatacodaのCentOS Playgroundでコンテナを動かす
nDockerの導⼊状態確認
 Dockerのバージョン確認- docker –v, docker version, docker info
- バージョンが1.2.xの場合は新体系コマンドは使えないのでアップデート(1.3xでもビルドバージョンが古いので全員でyum update dockerを実施)
 Dockerの再起動- systemctl restart docker- systemctl status docker
 Dockerヘルプの使い⽅- docker help
- docker container --help, docker image --help- docker container run –-help

nDockerの基本動作の確認
 Hello Worldコンテナの実⾏- docker run hello-world© LPI-Japan all rights reserved.

35

KatacodaのCentOS Playgroundでコンテナを動かす
nコンテナを実際にデプロイしてDockerの基本操作を学ぶ
 コンテナの実⾏（run=pull+create+start）- docker run -it --name ubu1 ubuntu:bionic /bin/bash- cat /etc/os-release でubuntuのバージョン情報を確認- uname -r でCentOSのカーネルを共有していることを確認 → exit

 コンテナの起動と停⽌（start, stop）- docker ps → docker ps –a → docker start ubu1 → docker ps → docker stop ubu1 →docker ps

 バックグラウンドで動作中のコンテナでプログラムを実⾏、その後アタッチ- docker run -dit --name ubu2 ubuntu:bionic /bin/bash (2度⽬は⽣成が速い)- docker exec ubu2 cat /etc/os-release- docker attach ubu2 → exit

 ログの確認- docker logs ubu1

→ docker logs ubu2

 コンテナとイメージの管理- docker ps -a, docker container ls –a- docker rm, docker container rm, docker container prune- docker images, docker image ls, docker rmi, docker image rm© LPI-Japan all rights reserved.

36

KatacodaのCentOS Playgroundでコンテナを動かす
nDocker Hubの公式Apacheコンテナを複数動かす

 名前を付け、ポートを指定してバックグランドで実⾏- docker run –d –-name apa01 –p 8081:80 httpd- docker run –d –-name apa02 –p 8082:80 httpd- Webプレビューでそれぞれのポートを指定して動作確認（It Works!）- docker psでコンテナの状態確認

80
直接導⼊したApache8082

apa01

apa02

Docker EngineOS- ホストOSにインストールしたApacheとあわせて3つが同時に動いていることを確認8081

index.htmlファイルを作成（どのような⽅法でも良い）- mkdir web1 web2
- echo Web1 Works! > web1/index.html- echo Web2 Works! > web2/index.html

 ﻿コンテナ内の/usr/local/apache2/htdocsにindex.htmlを配置- docker cp web1/index.html apa01:/usr/local/apache2/htdocs/- docker cp web2/index.html apa02:/usr/local/apache2/htdocs/- Webプレビューでそれぞれのポートを指定して動作確認（Web1 Works!, Web2 Works!）- 隔離されているコンテナにホストOS側からファイルをコピーできることを確認

nデタッチ(Ctrl+p, q)の動作確認

 docker run -it --name ubu3 ubuntu:bionic /bin/bash → Ctrl+p, q
 The environment has expired.Please refresh to get a new environment.

© LPI-Japan all rights reserved.

37

KatacodaのUbuntu Playgroundでコンテナを動かす
nUbuntu 20.04 Playgroundを使⽤
nUbuntuの動作確認
 cat /etc/os-release hostnamectl

nプロンプトの変更（わかりにくいので） export PS1="[¥u@$HOSTNAME ¥w]$"

nUbuntu Playgroundの特徴（CentOS Playgroundとの違い）

 インスタンスにDockerイメージが多数含まれる(docker psで起動中のコンテナが無いことを確認、docker images)
 VS CodeとWeave Scopeの統合(IDEとVisualize Hostを起動)

nDockerの動作確認
 docker –v, docker version, docker info
 docker ps –a (Visualize Host[Weave Scope]のコンテナが動いている)

nCentOSのコンテナを動かす docker run –it --name cent7test centos:7 /bin/bash cat /etc/os-release© LPI-Japan all rights reserved.

38

Dockerfileでカスタムコンテナイメージを作成する
nDockerfileとは カスタマイズしたコンテナイメージを作成するための⼿順書のようなもの

nindex.htmlを置き換え済みのApacheコンテナイメージを作成
 index.htmlファイルを⽤意（Apache Web Server build by Dockerfile）- echo Apache Web Server build by Dockerfile > index.html

 以下の内容をcatコマンドのヒアドキュメントでDockerfileとして作成- FROM httpd- COPY index.html /usr/local/apache2/htdocs/- cat > Dockerfile << EOF> FROM httpd> COPY index.html /usr/local/apache2/htdocs/> EOF

 docker build –t apaimg[イメージ名] .[Dockerfileがあるディレクトリ]
 docker images, docker image lsでイメージがあるか確認

n⽣成したイメージで新たなApacheコンテナを⽣成 docker run –d --name apa03 –p 80:80 apaimg Web Previewで動作確認© LPI-Japan all rights reserved.

39

Docker ComposeでWordPressサイトを構築する
⼀般的に、WordPressサイトの構築には、 LAMP環境と呼ばれる、Linux OS、Apache、MySQL(またはMariaDB)、PHP(またはPython)の4つが必要。
LinuxサーバーでWordPressを使うには、 LAMP環境が連携するように設定しなくてはいけない。
Docker HubにはWordPress社公式のコンテナが公開されており、Docker Composeを使えば、LAMP環境の連携を設定した上でWordPressサイトが簡単に構築できる。

Docker Compose

複数のコンテナで構成されるアプリケーションの構築に必要な、コンテナイメージの情報や起動のための各種設定、さらにコンテナ同⼠が連携するために必要な⼿順などをdocker-compose.ymlファイルに記載してDocker Composeコマンドで実⾏する。構築に必要なコマンドは1つだけ。

© LPI-Japan all rights reserved.

40

Docker ComposeでWordPressサイトを構築するnDocker Composeのインストール

 Ubuntu Playgroundでは導⼊済み CentOS Playgroundで試したい場合はyum install docker-composeでインストール

nDocker Composeのバージョン確認
 docker-compose –v

nプロジェクト⽤ディレクトリを作成し同ディレクトリに移動
 mkdir mywp && cd mywp

ndocker-compose.ymlの作成
 Docker Hub経由でWordpress公式の設定をコピーし、viエディタを使いdocker-compose.ymlというファイル名で作成する。
https://hub.docker.com/_/wordpress
 apacheとphpはWordPressの公式イメージで⾃動的に組み込まれる© LPI-Japan all rights reserved.

41

Docker ComposeでWordPressサイトを構築する
nDocker Composeを実⾏

 docker-compose up -d (-dオプションはデタッチの意味＝バックグラウンド実⾏)を実⾏す
ると、docker-compose.ymlに記載された内容で、WordPressとMySQLのコンテナイメージが取得され、それぞれが連携するように⾃動的に設定が⾏われる。
 特にエラーが表⽰されていなければ導⼊は完了。完了まで多少時間がかかる場合がある。

nDocker Composeの基本コマンド 実⾏- docker-compose up (–d)
 停⽌- docker-compose stop
 終了
- docker-compose down（停⽌、コンテナやネットワークの削除。イメージは残る。）- docker-compose down --rmi all（イメージを含む全削除）© LPI-Japan all rights reserved.

42

Docker ComposeでWordpressサイトを構築する
nWordPressの動作チェック ブラウザ左上の＋ボタン（WebPreview）をクリックして「Select port to view on Host 1」を選択し、####に8080を⼊⼒してDisplay Portボタンをクリック。WordPressのロゴが⼊った
初期設定画⾯が表⽰されたら成功。
 必須事項(注)を記⼊して下のインストールボタンを押せば設定が完了。設定したアカウントでログインすればWordPressのダッシュボードが表⽰される。
 ダッシュボード左上のタイトルにマウスオーバーして「サイトを表⽰」をクリックすればブログ画⾯が表⽰される。
 WordPressの使い⽅についてはセミナー趣旨と異なるのでこれ以上の解説は控える。

nDockerコマンドでコンテナの動作確認
 docker ps → wordpressとmysqlのコンテナが動作していることを確認 docker image inspect wordpressでイメージの詳細が確認できる

nVisualise Host(Weave Scope)で確認
nDocker Composeを実⾏
 docker-compose down→

WordPressに関わる全てのコンテナが停⽌して破棄される。
(注)Katacodaのインスタンス⾃体、短時間で消滅してしまうので必須事項は適当な物で良い。ただし、ユーザー名やパスワードをadminやdockerなど、単純なものにするとWebブラウザが当該ユーザーのパスワードが漏洩しているとして警告してくることがある。
© LPI-Japan all rights reserved.

43

まとめnセミナーゴールにたどり着けた コンテナの起動・再開・停⽌が⾏える（1.02.2の範囲）
 Dockerコンテナを実際に⾃分の⼿で操作してみる（2.06.2の⼀部）
 ハンズオンが滞りなく終わったとしたら60以上のコマンドを実⾏したことになる。

nクラウド型の学習環境を使うと、数ステップでLinuxを操作できる。Webブラウザさえあれば思い⽴った時にすぐに使える。クラウド環境だけでも、各種サーバーアプリケーションやコンテナの構築など、踏み込んだ学習が可能。Dockerも⼤半のコマンドが実⾏できる
し、DockerfileやDocker Composeも利⽤できる。
n⼀⽅で、時間的な制約があるため、継続性が要求される内容の学習は難しい。仮想化技術がベースになっているサービスなので、利⽤者側も使い捨て感覚で利⽤する⽅が精神衛⽣上も良い。クラウド学習環境のメリットとデメリットをしっかし把握した上で、実機環境とうまく使い分けてカジュアルに活⽤したい。
n今回がコンテナ初体験という⽅は、次のステップとしてLinux実機や仮想マシンでDockerを使ってみて欲しい。デプロイしたアプリの継続利⽤やデータの永続化も可能になる。
© LPI-Japan all rights reserved.

44余談
n新体系と旧体系コマンドについて
 どちらで覚える︖
 試験にはどっちが出る︖

nCentOS7コンテナでsystemctlを使えるようにする docker run -itd --privileged centos:7 /sbin/init

nDockerの学習にオススメの書籍
 仕組みと使い⽅がわかるDocker & Kubernetesのきほんのきほん さわって学ぶクラウドインフラ docker基礎からのコンテナ構築© LPI-Japan all rights reserved.

45

ご挨拶

ご静聴、ご参加、ありがとうございました︕
今回のハンズオンで実施したこと
lクラウド経由でLinuxの仮想環境を利⽤lクラウド仮想環境にWebサーバーを構築

lDockerコマンドでさまざまなコンテナを実⾏

lDockerfileでカスタムイメージを作成

lDocker ComposeでWordpressサーバーを構築

LPI-Japanとしてもハンズオン形式は初めての試みです。
実際に⼿を動かしてみていかがでしたか。
ご感想やご意⾒をお寄せください。
© LPI-Japan all rights reserved.

46