こんにちは、みっきーです。
先輩から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なんて怖くないですね!お強い味方になりますね!!
開発環境も作り放題の配布し放題です~!
これで少しは、インフラ音痴を脱却できるといいなぁ。
ブラックサンダー買いに行きたいので、今日はこの辺で失礼します(`・ω・́)ゝ