2016/03/10

CentOS7 に Docker をインストールし、CentOS7コンテナ上で Apache を起動する


はじめに

今更感がありますが、ちょっと Docker を使うことになりそうなので、CentOS 7 に Docker をインストールして、コンテナにも CentOS 7 と Apache をインストールしてみます。

Docker Engine のインストールと起動

CentOS 7 は既にインストールされているものとして、Docker Engine をインストールします。

Docker Engine は、CentOS では EPEL リポジトリに「docker-io」パッケージが用意されているので、まず EPEL リポジトリを追加します。

# yum -y install epel-release.noarch 

次に、EPEL リポジトリを必要時のみ利用するように、EPEL リポジトリを無効化します。

# sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo

今後、EPEL リポジトリを利用するには、下記のようにコマンドを実行します。

# yum --enablerepo=epel <コマンド> <パッケージ名>

さて、EPEL リポジトリの設定が終わったので、Docker Engine のインストールを行います。

# yum --enablerepo=epel -y install docker-io

docker のサービス名を確認します。

# ls /usr/lib/systemd/system | grep docker
docker-storage-setup.service
docker.service

docker.service のステータスを確認します。

# systemctl status docker.service
docker.service - Docker Application Container Engine
 Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled)
  Active: inactive (dead)
   Docs: http://docs.docker.com

OS の起動時に docker.service を自動起動するようにします。

# systemctl enable docker.service

docker.service を起動しておきます。

# systemctl start docker.service

 

docker イメージのインストール

docker イメージをインストールするには、docker pull コマンドを利用します。docker pull コマンドはデフォルトで「Docker Hub Registory」を見に行きます。

Docker Hub Registory の検索ボックスで、CentOS を検索すると以下のような検索結果画面が表示されます。centos が公式のリポジトリであることが分かります。

Pic01

 

 

docker pull コマンドは以下のように利用します。タグ名は通常 latest が設定されているようなので、最新版を使用したい場合は、latest を使用します。

# docker pull {イメージ名}:{タグ名} 

 

 今回は初めてなので、念のため DETAILS から CentOS イメージのタグ名を確認してみましょう。

latest が CentOS 7 なので問題ありませんね。

Pic02 

 

では、CentOS 7 のイメージをインストールします。

# docker pull  centos:latest

dockerイメージ一覧を確認します。

# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.io/centos latest bb3d629a7cbc 5 days ago 196.6 MB

 

docker コンテナの作成・実行

docker run コマンドを実行することで、docker コンテナの作成・実行を行うことができます。

# docker run [オプション] [--name {コンテナー名}] {イメージ名}[:{タグ名}] [コンテナーで実行するコマンド] [引数]

今回は、オプションに -i : 標準入出力、-t:tty(端末デバイス)の確保を設定します。

実際に起動してみます。1秒もかからず起動しました。早いですね。コンテナ型の本領発揮といったところでしょうか。

# docker run -it --name centos7_doc centos /bin/bash
[root@91415869ff82 /]#

試しに、Apache をインストールしてみます。

# yum -y install httpd
Complete!

 

「Ctrl+d」でシェルを抜けすると、docker コンテナも終了します。

 「Ctrl+p」+「Ctrl+q」で docker コンテナを終了することなくログアウトできます。

 

docker コンテナの一覧を取得する

docker ps コマンドに -a オプションを付けることで停止中のコンテナも表示することができます。

# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91415869ff82 centos "/bin/bash" 18 minutes ago Exited (1) 11 minutes ago centos7_doc

 

docker イメージを作成する

docker イメージの作成は、docker commit コマンドを使用します。

docker イメージを作成しないとバックグラウンドでの実行ができないようですね。

docker commit は以下のように実行します。

# docker commit {コンテナー名}|{コンテナーID} [{ユーザー名}/]{イメージ名}

ここでは、以下のように実行してみます。

# docker commit centos7_doc fnya/apache

c94b292881f33ddb2bb3a5e6906522c394db38539dd32e5bb7abd15b4c6ae14c

 

docker コンテナをバックグラウンドで実行し、Apache を実行する

docker のコンテナをバックグラウンドで実行するには、docker run で -d オプションを使用します。また、ポート番号を -p オプションで使用することができます。

普通に Apache を起動しようとすると、「Failed to get D-Bus connection: No connection to service manager.」というエラーが発生してしまうので、以下の方法で docker コンテナを作成後、シェルを実行することで Apache を起動します。

# docker run --privileged -d -p 80:80 --name httpd fnya/apache /sbin/init
# docker exec -it httpd /bin/bash

[root@0342e64ebd06 /]# systemctl enable httpd.service
[root@0342e64ebd06 /]# systemctl start httpd.service
[root@0342e64ebd06 /]# exit

# curl -s http://localhost/ | head -n 1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>

無事に、HTTP でアクセスできるようになってますね。

 

バックグラウンドで実行するコンテナの終了・起動

以下のようにコマンドを実行します。

# docker stop {コンテナー名}|{コンテナーID}
# docker start {コンテナー名}|{コンテナーID} 

 

おわりに

docker は割り合い簡単に進むかと思っていたのですが、Apache の部分で大きくつまずいてしまいました。

実際に触ってみた感覚では、まだ改善が必要だと思いました。

しかし、docker のイメージは軽量だし容量もとらないのは魅力ですね。

なお、docker コンテナの起動・終了、docker イメージ・コンテナの削除については、参考サイトを参照してください。

 

参考サイト

 

 


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。


    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから