docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

33
LinAction.Lab Presents LinAction Theme Docker 入入 WordPress 入入入入入入入入 入入入入入入 ver1.4 Date : 2017.2.28 Location : Rancher ももももももも #3 1

Upload: linux-action

Post on 06-Apr-2017

228 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

LinAction.Lab Presents

LinAction Theme

Docker入門~WordPress 環境を作ってみる ハンズオン編 ver1.4 ~

Date : 2017.2.28 Location : Rancher もくもく勉強会 #3

1

Page 2: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

コミュニティ活動

LinAction  =  Linux + Action

ハンズオンを中心に Linux に関わるあらゆることを追求するコミュニティです。

2

日本で Rancher 及び関連するコンテナ技術の啓蒙活動を行うコミュニティです。

Page 3: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

サーバ仮想化について

Docker の基礎技術~ Linux コンテナー~

Docker とは?

Docker の基礎技術~ Docker イメージ~

Docker ハンズオン~ WordPress の環境作成~

参考図書・資料

Docker のインストール

Docker Hub からコンテナーイメージの pullコンテナーの起動

起動したコンテナーの確認

コンテナーとホスト Linux との切替

コンテナーの起動と停止

Dockerfile から WordPress 環境作成

コンテナーの commitコンテナーイメージを Docker Hub に pushコンテナーのライフサイクル

3

アジェンダ

Page 4: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

サーバ仮想化について

① 非仮想化環境

4

物理ハードウェア

OS

アプリケーション

Page 5: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

サーバ仮想化について

5

物理ハードウェア

ホスト OS仮想化アプリケーション

仮想マシン Aアプリケーション

ゲスト OS

仮想マシン Bアプリケーション

ゲスト OS

仮想マシン Cアプリケーション

ゲスト OS

② ホスト OS 型仮想

ホスト OS 上の仮想化アプリケーション上で仮想マシンを稼働させる。

VMware Workstation 、 Microsoft VirtualPC 、 VirtualBox

Page 6: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

サーバ仮想化について

6

物理ハードウェアハイパーバイザー

仮想マシン Aアプリケーション

ゲスト OS

仮想マシン Bアプリケーション

ゲスト OS

仮想マシン Cアプリケーション

ゲスト OS

③ ハイパーバイザー型仮想(ソフトウェア)

ホスト OS を必要とせず、ハイパーバイザーというソフトウェア上で仮想マシンを稼働させる。

VMware ESXi 、 Xen/Citrix XenServer 、 Microsoft Hyper-V

Page 7: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

サーバ仮想化について

7

物理ハードウェア

ホスト OSハイパーバイザー

仮想マシン Aアプリケーション

ゲスト OS

仮想マシン Bアプリケーション

ゲスト OS

④ ハイパーバイザー型仮想(カーネルモジュール)

ホスト OS ( Linux )のカーネルモジュールのハイパーバイザー機能で仮想マシンを稼働させる。

Linux KVM

Page 8: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker の基礎技術~ Linux コンテナー~

Linux コンテナーは、仮想マシン、ゲスト OS という考え方はありません。(仮想ではない)

Linux カーネルの機能により、 Linux 上で稼働するユーザープロセスをグループに分割し、各グループごとに異なる環境(ファイルシステム、ネットワーク等)を割り当てたユーザー空間(コンテナー)のことです。

物理ハードウェア

非仮想化環境

ユー

ザー

プロ

セス ユ

ーザ

ープ

ロセ

ス ユー

ザー

プロ

セス

・ ・ ・カーネル空間

物理ハードウェア

分割した環境

カーネル空間

ユー

ザー

プロ

セス

・ ・

ユーザー空間 ユーザー空間

ユー

ザー

プロ

セス ユ

ーザ

ープ

ロセ

ス ユー

ザー

プロ

セス

ユーザー空間

OSコンテナ

8

Page 9: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker の基礎技術~ Linux コンテナー~

物理ハードウェア

コンテナーに属さないユーザー空間を Linux ホストと呼んだりします。

カーネル空間

ユー

ザー

プロ

セス

・ ・

ユーザー空間 ユーザー空間ユ

ーザ

ープ

ロセ

ス ユー

ザー

プロ

セス ユ

ーザ

ープ

ロセ

9

ユー

ザー

プロ

セス

ユー

ザー

プロ

セス

ユーザー空間 = Linux ホスト

ユー

ザー

プロ

セス

・ ・ ・ コンテナ

Page 10: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker の基礎技術~ Linux コンテナー~

■namespace 機能

namespace 説明

Mount namespace ファイルシステムの分離

UTS namespace ホストネームの分離

IPC namespace IPC (プロセス間通信)の分離

User namespace ユーザ( UID/GID )の分離

PID namespace プロセステーブルの分離

Network namespace ネットワーク設定の分離

namespace 機能は、ユーザープロセスのグループ分割を始め、ファイルシステムやネットワーク設定の分離等、いくつかの種類があります。

■cgroups 機能

cgroups 機能は、それぞれのグループ(コンテナー)に対して、 CPU 、メモリの割り当てを制御する機能です。

10

Linux コンテナーを実現するための主なカーネル機能として、 namespace 機能と cgroups 機能があります。

Page 11: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker とは?

Linux コンテナーは、 Linux カーネルの機能である namespace 機能や cgroups 機能

を組み合わせて実現されるものです。

11

Page 12: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker とは?

それでは、 Docker とは何でしょうか?

12

Page 13: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker とは?

Docker とは、 Linux カーネルの機能を統合してコンテナーを作り上げる管理ツールです。

13

Page 14: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker の基礎技術~ Docker イメージ~

物理ハードウェア

pull

カーネル空間

ユー

ザー

プロ

セス

コンテナー コンテナー

ユー

ザー

プロ

セス ユ

ーザ

ープ

ロセ

14

ユーザー空間Docker Hub(レジストリ)

CentOSレポジトリ

Ubuntuレポジトリ

https://hub.docker.com/

push

tag:latesttag:6.7・・

tag:latesttag:14.04・・

DockerHub から pull した Docker イメージをコンテナーに当てることでCentOS や Ubuntu をコンテナーで起動できます。

Page 15: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker の基礎技術~ Docker イメージ構造~

15

Dockerイメージ

読み込み専用( ReadOnly

) ベースイメージCentOS,Ubuntu 等

イメージ層コマンドごとに記録

ベースイメージCentOS,Ubuntu 等

イメージ層コマンド( RUN )及びビルドごとに記録

書き込み可能なイメージ層

読み込み専用( ReadOnly

コンテナーが起動すると、自動的に書き込み可能なレイヤーが作られる仕組みです。

( 1 ) Docker イメージの構造

( 2 ) Docker コンテナー起動時の構造

Page 16: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker の基本機能

Docker Hub(イメージレジストリ)

Dockerfile

16

Docker イメージ

アプリケーションフレームワーク

アプリケーションライブラリ

OS イメージ

Docker サーバ

① Docker イメージ自動作成 ② Docker イメージ

の保存・公開

③ Docker サーバにイメージ配布・実行

イメージの作成手順を記載

docker pull

docker push

docker builddocker commit

Page 17: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker ハンズオン~ WordPress の環境作成~

概要• Docker のインストール• Docker Hub からコンテナーイメージの pull• コンテナーの起動• 起動したコンテナーの確認• コンテナーとホスト Linux との切替• コンテナーの起動と停止• Dockerfile から WordPress 環境作成• コンテナーの commit• コンテナーイメージを Docker Hub に push

Docker Hub

仮想環境( Virtualbox,VMWare )

docker pull

docker push

docker rundocker psdocker imagesdocker startdocker stopdocker attachdocker commitdocker builddocker rmdocker rmi

docker searchdocker login Dockerfile

17

Page 18: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

18

Docker 実践入門

中井悦司さん

SoftwareDesign2015 年 12 月号

参考図書・資料

http://www.slideshare.net/enakai/docker-with-rhel7

Docker with RHEL7 技術勉強会 http://www.slideshare.net/zembutsu/devsumi-2016-docker-introduction

Docker 基礎講座

前佛雅人さん

Page 19: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker のインストール

スライドに記載しているテキストは、以下をご利用ください。http://qiita.com/cyberblack28/items/e3fb956f584094341c62

1.Docker のインストール

# yum -y install docker

2.Docker の自動起動設定及びサービスの起動

# systemctl enable docker.service# systemctl start docker.service

19

ディストリビューションの Docker をインストールする場合

# curl -fsSL https://get.docker.com/ | sh

最新の Docker をインストールする場合※ 本ハンズオンでは最新の Docker では後半のビルドでエラーとなるので yum でインストールします。

3.Docker のバージョンを確認

# docker version

Page 20: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Docker Hub からコンテナーイメージの pull

CentOS6 のコンテナーイメージを Docker Hub からダウンロードします。

1.search サブコマンドでレジストリーを検索

# docker search linactionINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATEDdocker.io docker.io/linaction/centos Sample CentOS6.7(Final) 0

2. コンテナーイメージをダウンロード# docker pull -a linaction/centoscentos6: Pulling from docker.io/linaction/centos

47d44cb6f252: Already exists6a7b54515901: Already existse788880c8cfa: Already exists1debf8fb53e6: Already exists72703a0520b7: Already exists68833123ff9e: Already existsce76491a3be1: Already existsDigest: sha256:759ea478951130a32e9191daaffc9b4e3c5ad089331eccc32112e370bf7c9fb8Status: Image is up to date for docker.io/linaction/centos

20

Page 21: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

3. ダウンロードしたイメージを確認

# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEdocker.io/linaction/centos centos6 ce76491a3be1 About an hour ago 190.6 MB

21

Page 22: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

コンテナーの起動

CentOS6 のイメージからコンテナーを起動してみましょう。

1. コンテナーを起動

# docker run -it --name centos01 linaction/centos:centos6 /bin/bash[root@f2f7ecdecaf2 /]#

# docker run -it -name centos01 linaction/centos:centos6 /bin/bashコマンド詳細

① -i オプションは、コンテナーを実行したコマンドの標準出力に接続して、対話的に操作できるようにします。

② -t オプションは、コンテナーに疑似 TTY端末を割り当てます。

③ --name オプションは、起動するコンテナーに名前を付与します。省略すると自動的に名前が付与されます。

④ linaction/centoos:centos6 は使用するコンテナーイメージを指定します。

⑤ /bin/bash は、コンテナー内で最初に実行するコマンドを指定します。

①② ③ ④ ⑤

22

新規にコンテナーを起動する度に自動的にランダムに割り当てられます。

Page 23: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

起動したコンテナーの確認

1. コンテナー環境の OS のバージョンを確認[root@f2f7ecdecaf2 /]# cat /etc/redhat-releaseCentOS release 6.7 (Final)

2. コンテナー内のプロセスを確認[root@f2f7ecdecaf2 /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 04:55 ? 00:00:00 /bin/bashroot 13 1 0 04:59 ? 00:00:00 ps -ef

3. コンテナー環境のネットワークを確認[root@f2f7ecdecaf2 /]# ifconfig eth0eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 inet addr:172.17.0.4 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:648 (648.0 b) TX bytes:738 (738.0 b)

23

Page 24: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

コンテナーとホスト Linux の切替

1. コンテナーの /bin/bash から抜けてホスト Linux に戻る

2. ホスト Linux から再度コンテナー内の bash に接続

# docker attach centos01[root@f2f7ecdecaf2 /]#

Ctrl + P Q

Ctrl キーを押したまま、 P と Q を順番に押す。

attach の後には、 --name で指定した名前を指定します。

24

Page 25: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

コンテナーの起動と停止

1.Linux ホストに戻る

2. コンテナーを停止

# docker stop centos01

Ctrl キーを押したまま、 P と Q を順番に押す。

stop の後には、 --name で指定した名前を指定します。

3. 停止したコンテナーを確認

4. コンテナーを起動

start の後には、 --name で指定した名前を指定します。

# docker start centos01

# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf2f7ecdecaf2 linaction/centos:centos6 "/bin/bash" 23 minutes ago Exited (137) 13 seconds ago centos01

5. 起動したコンテナーを確認# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf2f7ecdecaf2 linaction/centos:centos6 "/bin/bash" 30 minutes ago Up 4 seconds centos01

25

Page 26: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

Dockerfile から WordPress 環境作成

1. コンテナーを停止# docker stop centos01

2.build 用のディレクトリを作成

3.Dockerfile を作成# cd build_wordpress# vi DockerfileDockerfile の内容は次のページを参照:wq

# mkdir ~/build_wordpress

4.Dockerfile を実行# docker build -t linaction/wordpress:ver1.0 ~/build_wordpress・・Successfully built 0c4e45b86bcd

5. コンテナーを起動# docker run -itd -p 8000:80 --name wordpress01 linaction/wordpress:ver1.03ce407416874308af370951ecf56c77b53e2aa405ba20aae51593fd3a0e2e108

-d オプションはバックグラウンドでの実行。-p オプションはポートフォワーディング、 Linux ホスト 8000番→コンテナー 80番に転送。

26

Page 27: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

#centos6 のイメージを取得FROM centos:centos6

#Dockerfile 作成者MAINTAINER linaction

#タイムゾーンの設定RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

#yum による HTTPD,MySQL,PHP,tar,wget のインストールRUN yum -y install httpd php php-mysql mysql-server tar wget php-gd

#tmp ディレクトリに移動WORKDIR /tmp/

#wordpress一式のダウンロードRUN wget https://ja.wordpress.org/latest-ja.tar.gz

#wordpress の展開RUN tar xvfz ./latest-ja.tar.gz

# ダウンロードした wordpress の削除RUN rm -f ./latest-ja.tar.gz

#wordpress ディレクトリ内のファイルを DocumentRoot に移動RUN mv wordpress/* /var/www/html/

#wordpress の config ファイルをリネームして利用可能にするRUN cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php

#wordpress の config ファイルに必要な情報を sed コマンドで書き換えるRUN sed -i -e 's/database_name_here/wordpress/g' -e 's/username_here/wordpress/g' -e 's/password_here/wppass/g' /var/www/html/wp-config.php

#DocumentRoot ディレクトリの所有者を apache に変更RUN chown -R apache.apache /var/www/html/

#mysqld の起動、 DB 作成、ユーザ作成および権限設定、 mysqld の停止RUN service mysqld start && mysql -u root -e "CREATE DATABASE wordpress; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'wppass'; FLUSH PRIVILEGES;" && service mysqld stop

#mysqld,httpd の起動スクリプトの作成RUN echo -e "service mysqld start\nservice httpd start\n/bin/bash" > /startService.sh

#mysqld,httpd の起動スクリプトの権限設定RUN chmod o+x /startService.sh

# 公開ポートEXPOSE 80

#mysqld,httpd の起動スクリプトの実行CMD /startService.sh

Dockerfile の内容

27

命令 説明

FROM コンテナーイメージを指定 「リポジトリー :タグ名」

MAINTAINER コンテナーイメージ作成者名

ENV 環境変数を設定

RUN コマンドの実行

ADD ホスト Linux からファイルを設置

EXPOSE コンテナーで使用するポート番号を指定

CMD コンテナー起動時に実行するコマンドを指定

WORKDIR RUN,CMD,ENTRYPOINT を実行する時のワーキングディレクトリを指定

Page 28: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

コンテナーの commit

1. ブラウザを起動し、「 http://VirtualBox の IP アドレス :8000/」にアクセスし、 WordPress の管理画面が表示されることを確認

2. コンテナーを停止# docker stop wordpress01

3. コンテナーを保存# docker commit wordpress01 linaction/wordpress:ver1.0cf75652d0f8a1509a5ad132ecf1214416c2b8dbf9fe9f93830ab8b51e738db73

4. コンテナーイメージを確認

# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZElinaction/wordpress ver1.0 cf75652d0f8a 56 seconds ago 474.9 MBdocker.io/linaction/centos centos6 ce76491a3be1 2 hours ago 190.6 MB

28

# docker commit wordpress01 linaction/wordpress:ver1.0コマンド詳細

① ② ③① コンテナ名② リポジトリ

名③ タグ名

Page 29: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

コンテナーイメージを Docker Hub に push

事前に「 https://hub.docker.com/」にアクセスし、 Docker Hub のアカウントを作成しておく必要があります。本勉強会では linaction のアカウントでデモします。

1.Docker Hub にログイン

# docker loginUsername: linactionPassword:Email:Login Succeeded

2.Docker Hub にコンテナーイメージを push# docker push linaction/wordpressDo you really want to push to public registry? [y/n]: yThe push refers to a repository [docker.io/linaction/wordpress] (len: 0)・・Digest: sha256:97e3bd8b7ed451163af7284513d398c426c796451d343400a9859156c1a8c021

29

Page 30: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

3. リポジトリーを確認# docker search linactionINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATEDdocker.io docker.io/linaction/centos Sample CentOS6.7(Final) 0docker.io docker.io/linaction/wordpress

30

Page 31: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

最後に全てのイメージと停止コンテナを削除して、 push した wordpress のコンテナーイメージをダウンロードして起動してみましょう。

# docker rm `docker ps -a -q`# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

1. 停止コンテナの一括削除

# docker rmi `docker images -aq`# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

2. イメージの一括削除

# docker pull -a linaction/wordpress

3.wordpress のコンテナーイメージをダウンロード

4. コンテナーを起動# docker run -itd -p 8000:80 --name wordpress01 linaction/wordpress:ver1.0

31

Page 32: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

コンテナーのライフサイクル

32

run( 起動 ) 、 stop( 停止 ) 、 start(再開 ) 、 commit( 保存 ) 、 rm(削除 ) における、コンテナーのライフサイクルは以下の様になります。

保存イメージ スナップショット

プロセス

スナップショット スナップショット

保存イメージ

run start

stop rm

commit

コンテナーが破棄されます。

コンテナーを複製して、保存イメージとして登録します。

コンテナーを停止するとプロセスが終了し、コンテナーが残ります。

コンテナーの起動と同時にスナップショットが作成されます。

Page 33: Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic

33

ご清聴ありがとうございました!