Mac上にNginx、MySQL、Redis、Nodeが入ったDockerコンテナを準備してみる
そろそろ触ってみないとという謎の焦燥感に急かされて触ってみた。
結論から言うと今のところVagrant + Virtualbox + Ansibleぐらいで事足りてる気がするけど、実運用になると変わってくるのかな。
目標
- DockerにMySQL、Redis、Node、Nginxぐらい入れてみる
理解してなかったんだけど、コンテナ運用をする場合はMySQL用のコンテナ、Redis用のコンテナ、Web Application用のコンテナと分けて運用するのがコンテナの正しい使い方なのね。
用語
- イメージ
- ミドルウェアとか、アプリケーションが乗ってる雛形みたいなもの
- コンテナ
- イメージの実態
全てのイメージをみる
docker images
全てのコンテナをみる
# 起動中 docker ps # 起動中 + 停止中 docker ps -a
参考
手順
docker-toolboxをインストールする
brew cask install docker-toolbox
Docker Machineを使ってホストの作成
Docker MachineとはDockerのホストを簡単に作成、操作できるツール。 今回はVirtualboxをホストとしてDockerコンテナを動かします、Macの場合Mac OSを直接のホストとするとができずVirtualbox上にコンテナを立てないと行けないようです。VirtualboxにはOSが入ってないけど、どうなってるんだこれ??
docker-machine create --driver virtualbox default eval "$(docker-machine env default)"
Dockerfileの作成
いろんなサイトのDockerfileを真似て見よう見まねで作ってみた。
FROM centos:centos6 RUN yum -y update RUN yum -y install gcc git rsync tar openssl openssl-devel readline-devel zlib-devel libffi-devel gdbm-devel tk tk-devel tcl tcl-devel patch gcc-c++ which sqlite-devel wget openssh-server file RUN yum -y install tree wget # MySQL RUN yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm RUN yum -y install mysql mysql-devel mysql-server RUN chkconfig mysqld on # Edit mysql setting file RUN echo "" >> /etc/my.cnf RUN echo "[mysql]" >> /etc/my.cnf RUN echo "default-character-set=utf8" >> /etc/my.cnf RUN echo "" >> /etc/my.cnf RUN echo "[client]" >> /etc/my.cnf RUN echo "default-character-set=utf8" >> /etc/my.cnf # nginx RUN rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm RUN yum -y install nginx # Silver Searcher RUN yum -y install pcre-devel xz-devel automake RUN cd /usr/local/src & \ git clone https://github.com/ggreer/the_silver_searcher.git && \ cd the_silver_searcher && \ ./build.sh && \ make install # Redisのインストール RUN wget http://download.redis.io/releases/redis-3.2.5.tar.gz && \ tar xzf redis-3.2.5.tar.gz && \ cd redis-3.2.5 && \ make && \ make install # nvm, Nodeのインストール ENV NVM_DIR /usr/local/nvm ENV NODE_VERSION 5 RUN curl curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash \ && source $NVM_DIR/nvm.sh \ && nvm install $NODE_VERSION \ && nvm alias default $NODE_VERSION \ && nvm use default ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules ENV PATH $NVM_DIR/v$NODE_VERSION/bin:$PATH ENV APP_HOME /app RUN mkdir $APP_HOME WORKDIR $APP_HOME
NG
RUNでcdしても次のRUNはcdしたディレクトリから始まらないので、&&でコマンドをつなぐかWORKDIRを適宜設定する必要がある。
RUN cd /usr/local/src RUN cd git clone https://github.com/ggreer/the_silver_searcher.git
イメージの作成
docker build -t node/test .
起動
# 起動してコンテナ内に入る docker run -it node/test
その他よく使うコマンド
# エラーが発生した場合途中までの作業がキャッシュされるので、完全に最初から作り直したい場合 docker build --no-cache -t node/test . # imageにタグを付ける docker tag b297c95be09d node/test:latest
起こった問題
1. 何かしてたらDocker Daemonが死んでいた
原因は不明・・・・
$ docker images Cannot connect to the Docker daemon. Is the docker daemon running on this host?
解決
ホストを起動して再度DockerのENV設定を行った。
docker-machine start eval "$(docker-machine env default)"
2. 証明書がない
Dockerのホスト名を途中でdevからdefaultに変えた結果発生した。
Could not read CA certificate "/Users/[USER]/.docker/machine/machines/dev/ca.pem": open /Users/[USER]/.docker/machine/machines/dev/ca.pem: no such file or directory
解決
再度DockerのENV設定を行った。
eval "$(docker-machine env default)"
とりあえず
疎通まで行かずに終わった。 残りの課題は以下のとおりかな。
- 手者のブラウザからNginxへ疎通させる
- Nginxなどの管理ファイルをdocker内に入れる方法
- MySQLサーバーのコンテナを分けてみる
- WebサーバーとMySQLサーバーを疎通させる
参考書籍
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る