dokcerをやってみた(前篇)
CentOS7にdockerを入れてApache+PHP+MySQL+phpMyAdminの環境を構築してみたのでその時のメモ(完全自分用)
はじめに
dockerをインストールする環境を晒しておきます。
$ uname -a Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
yumでdockerをインストールします。
$ yum -y install docker
ちなみにこの時のdockerのバージョンは以下です。
$ docker --version Docker version 1.9.1, build 78ee77d/1.9.1
dockerはイメージを使ってコンテナを立てます。
なのでそのイメージを作ってみます。
フォルダ構成
例のごとくフォルダ構成を書いておきます。
docker ├─ Dockerfile ├─ conf ├─ phpMyAdmin.conf
Dockerfileの作成
まずDockerfileを作成します。
#os image FROM centos:latest #Apache RUN yum -y install httpd RUN systemctl enable httpd #wget RUN yum -y install wget #MySQL RUN wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm RUN rpm -Uvh mysql-community-release-el7-5.noarch.rpm RUN sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/mysql-community.repo RUN yum -y --enablerepo=mysql56-community install mysql-community-server RUN systemctl enable mysqld #PHP RUN yum -y install php php-mysql php-mbstring #phpMyAdmin RUN yum install -y epel-release RUN yum install --enablerepo=epel -y phpMyAdmin COPY conf/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf
FROMはイメージを作成するときにベースとなるイメージを指定します。
以下のサイトから検索して、いろいろなイメージを指定することができます。
https://hub.docker.com/
検索後、詳細ページにタグ込みで載っているので使いたいイメージのバージョンまで指定できます。
今回はofficialのcentosのlatestを使用します。
タグを省略すると自動的にlatestタグがついたイメージが使われます。
RUNは実行したいコマンドを記述できます。
ここではApacheやらMySQLやらをインストールしています。
COPYはファイルなどをコピーすることができます。
例のごとくphpMyAdminの設定ファイルをコピーしています。
ほかにもコンテナを起動するときに実行したいコマンドを指定できる「ENTRYPOINT」や「CMD」があります。
ざっと説明をしましたが詳しい仕様はリファレンスへ
https://docs.docker.com/engine/reference/builder/
イメージの作成
Dockerfileがあるディレクトリで以下のコマンドを実行します。
$ docker build -t sample:sample .
書式は以下のとおりです。
docker build [ -t イメージ名 [ :タグ名 ] ] Dockerfileのあるディレクトリ
「-t」 オプションでイメージに名前を付けることができます。
以下のコマンドでイメージが作成されているか確認します。
$ docker images
REPOSITORYがsample,TAGがsampleのイメージが作成されいるはずです。
TAGを省略すると自動的にlatestが付きます。
コンテナの作成
では作成したイメージからコンテナを起動してみます。
$ docker run --privileged -itpd 8080:80 --name sample sample /sbin/init
docker run コマンドでコンテナを作成し、起動します。
「-i」ホストの入力をコンテナの標準出力をつなげるもの。
「-t」コンテナ内の標準出力とホスト側の出力をつなげるもの。ttyを確保する?(表現があってるかわかりません。)
「-p」ホストとゲストのポートフォワーディングを設定しています。
「-d」コンテナをバッググラウンドで起動します。
「--name」--name 作るコンテナ名 使うイメージ名
という書式です。指定しない場合は適当につけられます。
「--privileged」については調べ切ってないので、割愛します・・・。
最後はrun時に実行するコマンドを書いています。
上記の場合だと「/sbin/init」になります。
「--privileged」と「/sbin/init」を指定しないと「systemctl」コマンドが動かなかったため上記のようにしています。
(「Failed to get D-Bus connection: Operation not permitted」というエラーがでる。)
またバッググラウンドで起動する場合、プロセスが終了すると勝手にコンテナも終了してしまうので、動き続けるプロセスを実行させる必要があります。
(httpdをフォアグランドで実行するなど)
アクセス
dockerホストの8080にアクセスしてApacheのテストページが表示されたと思います。
ちなみにコンテナの中に入るときは
$ docker exec -it sample /bin/bash
execコマンドは起動しているコンテナに追加でコマンドを実行することができます。
上記の場合は「/bin/bash」を実行してコンテナの中に入っています。
コンテナからホストに戻る場合は「Ctrl + p」と「Ctrl + q」で戻ることできます。
ざっとこんな感じでしょうか。
Dockerのコマンド
上記にないコマンド
$ docker start sample #コンテナを起動する。 $ docker stop sample #コンテナを停止する。 $ docker attach sample #コンテナに入る。 $ dokcer ps #起動しているコンテナを表示する。 $ docker ps -a #すべてのコンテナを表示する。 $ docker rm sample #コンテナを削除する。 $ docker rmi sample #イメージを削除する。