クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

Docker-composeでCentOS7のコンテナを立ち上げてhttpdサービスを起動してみた

こんにちは、みっきーです。

先輩からDockerを引き継いだは良いものの、何がなんだかさっぱり・・・。
そこで今回は、Dockerで遊んだ記録を書きたいと思います。
途中、実行に失敗するのでご注意ください。

登場人物のステータス

  • みっきー(私):新卒1年目
  • みっちー   :SREチームの、さわやかイケメン先輩

環境

OS Docker Engine
CentOS7 1.12.3

概要

  • Docker-composeでCentOS7のコンテナを立ち上げる
  • コンテナを立ち上げた時点で、httpdサービスが起動してる状態にする

とりあえずやってみる

Docker Engineのインストール

$ yum update
$ curl -fsSL https://get.docker.com/ | sh
$ systemctl start docker

動かない!!
そういえばインストール時に作成されるグループに実行ユーザを登録しないとだめって言われたような・・・

ということでdockerグループにユーザを追加

$ sudo usermod -aG docker mikki
$ sudo usermod -aG wheel docker

ついでにwheelにdockerユーザを入れておくと、いちいちsudoしなくて済むらしいです。

切断再接続後、DockerEngine起動

$ systemctl start docker
$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) 

起動しましたぁ!

CentOS7のイメージをひっぱてコンテナを立ててみる

$ docker pull centos:7
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   67591570dd29        3 months ago        192 MB

$ docker run centos:7
$ docker ps -a
b9f8c5ca727a        centos:7            "/bin/bash"              18 seconds ago      Exited (0) 17 seconds ago                          elegant_banach

”Exited (0) 17 seconds ago”一瞬で落ちてるじゃーん!
Bashにアクセスしたいよー。ということで起動時にオプションを追加

$ docker run -it centos:7
[root@7cbf45351e50 /]#

CentOS7のコンテナを立ち上げることに成功! 簡単ですね♪

Apache2.4とphp5.6をインストール

# yum -y update
# yum -y install httpd
# yum -y install epel-release
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum -y install --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd
# systemctl start httpd
Failed to get D-Bus connection: Operation not permitted

ん?
rootなのに??なんで??
どうやら、コンテナを立てる際に--privilegedを付けてあげないといけないようです。
詳しいことはこちらを参照
Docker privileged オプションについて
CentOS7 に Docker をインストールし、CentOS7コンテナ上で Apache を起動する: ある SE のつぶやき

# exit
$ docker run -it -privileged centos:7 -p 8080:80 /sbin/init
Apache2.4とphp5.6をインストール
# systemctl start httpd

動いた!!

ここからやっとDocker-compose.yml作成

まずは、Dockerfileの作成

コンテナ内で行ったことをそのまま書き込み

FROM centos:7
MAINTAINER "mikki"

RUN yum -y update

# install apache2.4
RUN yum -y install httpd

# install php5.6
RUN yum -y install epel-release
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum remove php-*
RUN yum -y install --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd

CMD docker-entrypoint.sh


docker-entrypoint.shの中身
#!/bin/bash
system enable httpd
system start httpd
system status httpd

docker-compose.yml作成

ここで問題発生。
私、yamlの書き方知りませんでした。。。
困ったぞと、お昼休みに歯磨きを始めたら救世主みっちーさんと出くわします。

私「みっちーさん。Dockerがゆうことを聞いてくれないんです(泣)」
    中省略(やりたいこと伝え中)
みっちーさん「とりあえずこうかけばいいよ!」

ババーン!

version: '2'
services:
  web:
    build: ./docker
    ports:
      - "8080:80"
    volumes:
      - ./:/var/www/html
    working_dir: /var/www/html
    privileged: true
    command: /sbin/init

やったーyamlクリアした-!
コレでやっと立ち上がるぞ!!と思ってbuild後upしたら

$docker-compose build
$docker-compose up
Starting masano_web_1
Attaching to masano_web_1

とまった・・・。
ブラウザからアクセスできず、bashに入ってサービスが立ち上がってるか確認しても動いてない!!
次の日の朝、みっちーさんが出勤してきてそうそうにヘルプを出すことに。

私「みっちーさんみっちーさん動かないよぉ。あ、おはようございます。」
みっちーさん「おはよー。うーん。ちょっと調べてみるね。」

ということで、救世主みっちーさん、Dockerを触ったことがなかったのに色々調べてくれました。


概念的な話
そもそも、Dockerfile には「コンテナ”起動時”に実行してほしいコマンドは書かない」
(らしいです)
→ サービスの起動とか、コンテナが立ち上がった時にやってほしいことは、ここでは書くべきでは無いらしいです。
※ ここで書くのは、コンテナイメージを作る=docker compose build した時に、実行してほしい内容(rpmのinstallとか、ファイルのコピーとか)を書く。
じゃあサービスの起動はどーしたらいい?
→ Centosの起動時に、サービスが自動で立ち上がるようにすれば良い。
  = CMD systemctl enable httpd って書いてあげれば良い。
みたいです。
全部グーグルせんせーの受け売りですが・・・

docker-compose.yml の編集 (とりあえずこんな感じで

# vi ./docker-compose.yml
version: '2'
services:
  web:
    #build: ./docker
    build: /home/micchi/docker
    ports:
      - "8081:80"
    volumes:
      - ./:/var/www/html/micchi_test
    working_dir: /var/www/html/micchi_test
    privileged: true

Dockerfile の編集 

# vi ./docker/Dockerfile
FROM centos:7
MAINTAINER "micchi"

# install apache2.4
RUN yum -y install httpd

# install php5.6
RUN yum -y install epel-release
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum remove php-*
RUN yum -y install --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd

# enable service.
RUN systemctl enable httpd

# exec.
CMD ["/sbin/init"]

動いた-!!
自分でDockerfileやcomposeを書いたことがなかったので、すごくいい勉強になりました。
覚えちゃえばDockerなんて怖くないですね!お強い味方になりますね!!
開発環境も作り放題の配布し放題です~!

これで少しは、インフラ音痴を脱却できるといいなぁ。

ブラックサンダー買いに行きたいので、今日はこの辺で失礼します(`・ω・́)ゝ