Top Banner
LinAction.Lab Presents LinAction Theme Docker WordPress 環環環環環環環環 環環環環環環 ver1.3 Date : 2016.3.23 Location : 日日 IBM 日 1
28

LinAction Theme Docker

Jan 12, 2017

Download

Technology

Linux Action
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: LinAction Theme Docker

LinAction.Lab Presents

LinAction Theme Docker~WordPress 環境を作ってみる ハンズオン編 ver1.3 ~

Date : 2016.3.23 Location : 日本 IBM 本社

1

Page 2: LinAction Theme Docker

LinAction.Lab について

LinAction  =  Linux + Action

「 Linux で行動を起こそう!」というスローガンを基に、ハンズオンを中心に Linux に関わるあらゆることを追求するコミュニティです。

難しいことはひとまず置いて、まずは試して、触って、行動優先から深めて行きましょう。

その、「まずは試して、触って」のお役に立てればと思います。

2

Page 3: LinAction Theme Docker

サーバ仮想化について

① ベアメタル環境 ( 非仮想化環境 )

OS物理ハードウェア

② ソフトウェアによる仮想化

仮想マシン

物理ハードウェア

ゲストOS

仮想マシン

ゲストOS

仮想マシン

ゲストOS

③ ソフトウェアによる仮想化

仮想マシン

ハイパーバイザー(カーネルモジュール)

物理ハードウェア

ゲストOS

仮想マシン

ゲストOS

ハイパーバイザー(ソフトウェア)

ホスト OS

ホスト OS にハイパーバイザ機能を追加

物理ハードウェア上にハイパーバイザを導入

VMware,Xen など

Linux KVM

3

Page 4: LinAction Theme Docker

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

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

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

物理ハードウェア

ベアメタル環境(非仮想化環境)

ユー

ザー

プロ

セス ユ

ーザ

ープ

ロセ

ス ユー

ザー

プロ

セス

・ ・ ・カーネル空間

物理ハードウェア

コンテナーで分割した環境

カーネル空間

ユー

ザー

プロ

セス

・ ・

ユーザー空間 ユーザ空間

ユー

ザー

プロ

セス ユ

ーザ

ープ

ロセ

ス ユー

ザー

プロ

セス

ユーザー空間

OSコンテナ

4

Page 5: LinAction Theme Docker

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

物理ハードウェア

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

カーネル空間

ユー

ザー

プロ

セス

・ ・

コンテナー コンテナー

ユー

ザー

プロ

セス ユ

ーザ

ープ

ロセ

ス ユー

ザー

プロ

セス

5

ユー

ザー

プロ

セス

ユー

ザー

プロ

セス

Dockerサービス

ユーザー空間

Page 6: LinAction Theme Docker

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

■namespace 機能

namespace 説明 実装対象カーネル

Mount namespace ファイルシステムの分離 Kernel 2.4.19UTS namespace ホストネームの分離 Kernel 2.6.19IPC namespace IPC (プロセス間通信)の分離 Kernel 2.6.19User namespace ユーザ( UID/GID )の分離 Kernel 2.6.23 ~ Kernel3.8PID namespace プロセステーブルの分離 Kernel 2.6.24Network namespace ネットワーク設定の分離 Kernel 2.6.24

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

■cgroups 機能

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

6

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

Page 7: LinAction Theme Docker

Docker とは?

Linux コンテナーは、 Linux カーネルの機能( namespace 機能や cgroups 機能)を組み合わせて実現されるものです。

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

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

7

Page 8: LinAction Theme Docker

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

物理ハードウェア

pull

カーネル空間

ユー

ザー

プロ

セス

コンテナー コンテナー

ユー

ザー

プロ

セス ユ

ーザ

ープ

ロセ

8

ユーザー空間

Docker Hub(レジストリ)

CentOSレポジトリ

Ubuntuレポジトリ

https://hub.docker.com/

push

tag:latesttag:6.7・・

tag:latesttag:14.04・・

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

Page 9: LinAction Theme Docker

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

9

Dockerイメージ

読み込み専用( ReadOnly

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

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

ベースイメージCentOS,Ubuntu 等

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

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

読み込み専用( ReadOnly

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

( 1 ) Docker イメージの構造

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

Page 10: LinAction Theme Docker

Docker の基本機能

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

Dockerfile

10

Docker イメージ

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

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

OS イメージ

Docker サーバ

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

の保存・公開

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

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

docker pull

docker push

docker builddocker commit

Page 11: LinAction Theme Docker

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

11

Page 12: LinAction Theme Docker

12

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 13: LinAction Theme Docker

Docker のインストール

スライドに記載しているテキストは、以下をご利用ください。http://qiita.com/cyberblack28/private/0be8ff750951193406081.Docker のインストール

# yum -y install docker

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

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

13

3. コンテナーイメージへのディスク最適化設定追加# vi /etc/sysconfig/dockerOPTIONS=‘--selinux-enabled’↓OPTIONS=‘--selinux-enabled --storage-opt dm.no_warn_on_loop_devices=true’:wq

4.Docker サービスの再起動

# systemctl restart docker.service

Page 14: LinAction Theme Docker

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

14

Page 15: LinAction Theme Docker

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

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

15

Page 16: LinAction Theme Docker

コンテナーの起動

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 は、コンテナー内で最初に実行するコマンドを指定します。

①② ③ ④ ⑤

16

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

Page 17: LinAction Theme Docker

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

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)

17

Page 18: LinAction Theme Docker

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

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

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

# docker attach centos01[root@f2f7ecdecaf2 /]#

Ctrl + P Q

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

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

18

Page 19: LinAction Theme Docker

コンテナーの起動と停止

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

19

Page 20: LinAction Theme Docker

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番に転送。

20

Page 21: LinAction Theme Docker

#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 の内容

21

命令 説明

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

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

ENV 環境変数を設定

RUN コマンドの実行

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

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

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

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

Page 22: LinAction Theme Docker

コンテナーの 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

22

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

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

名③ タグ名

Page 23: LinAction Theme Docker

コンテナーイメージを 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

23

Page 24: LinAction Theme Docker

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

24

Page 25: LinAction Theme Docker

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

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

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

# docker rmi イメージ ID# 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

25

Page 26: LinAction Theme Docker

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

26

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

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

プロセス

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

保存イメージ

run start

stop rm

commit

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

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

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

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

Page 27: LinAction Theme Docker

アプリケーション開発における Docker の利用

Dockerfile

27

docker builddocker commitdocker push

Web/AP環境DB環境

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

=====================

=====================

開発用端末 テストサーバ

git pushgit pull

git pull

CI ツール等を用いてインテグレーションテストの自動実行

本番サーバ

Web/AP環境

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

DB環境======

=============

==============

docker push

docker pull

======

======

テストが実施された OS も含めたアプリケーション環境を Docker イメージにして、本番環境にデプロイすることでアプリケーションの配布を安全かつ容易にします。

Docker イメージを自動で作成する。

======

======

======

======

======

======

======

======

docker run

docker pull

Page 28: LinAction Theme Docker

おまけ~ Docker + TensorFlow ~

28

2015 年 11 月末に Google から公開された深層学習フレームワーク、 TensorFlow もDocker で簡単に利用できます。

※ちなみに、 AlphaGO の機械学習には Google Cloud Platform 上で TensorFlow が使用されています。

# docker run -it b.gcr.io/tensorflow/tensorflow