対象読者
イメージとかコンテナとかどうでもいいんじゃ!動かして覚えるからサンプルよこせ!という方。僕自身「よくわからんけどなんか動いたぞ!」レベルなので。
できるようになること
詳しい解説は他の方がいくらでも書かれているので、解説はしません。というかできません。
この記事は「コピペするだけで動くモノを作れる」だけです。
Dockerをインストールする
CentOS7を対象に書きます。他のOSの方は各自お調べください。
$ sudo yum -y install docker
インストールしたら起動します。
$ sudo systemctl start docker
Dockerfileを書いてwebサーバーを建てる
もういきなりサンプルに入ります。まず、適当なところにdocker/
というフォルダを作成してください。場所はどこでもかまいません。
docker/
内にDockerfileを設置します。
Dockerfile
# alpineをベースにする FROM alpine # 必要なものをインストール RUN mkdir -p /etc/apk && echo "http://alpine.gliderlabs.com/alpine/edge/main" > /etc/apk/repositories &&\ apk update && apk add --update --no-cache openrc nginx curl git # 初期設定 RUN sed -i 's/#rc_sys=""/rc_sys="lxc"/g' /etc/rc.conf &&\ echo 'rc_provide="loopback net"' >> /etc/rc.conf &&\ sed -i 's/^#\(rc_logger="YES"\)$/\1/' /etc/rc.conf &&\ sed -i '/tty/d' /etc/inittab &&\ sed -i 's/hostname $opts/# hostname $opts/g' /etc/init.d/hostname &&\ sed -i 's/mount -t tmpfs/# mount -t tmpfs/g' /lib/rc/sh/init.sh &&\ sed -i 's/cgroup_add_service /# cgroup_add_service /g' /lib/rc/sh/openrc-run.sh &&\ sed -i '1s/^/pid \/var\/run\/nginx.pid;\n/' /etc/nginx/nginx.conf && nginx # ローカルにあるファイルをDocker内にコピーする COPY nginx/default.conf /etc/nginx/conf.d/default.conf COPY html /var/www/html EXPOSE 80 # nginxを起動 CMD ["nginx", "-g", "daemon off;"]
最後にnginx/
とhtml/
を用意します。
nginx/default.conf
server { listen 80; location / { root /var/www/html; index index.html; } }
html/index.html
<!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <title>Docker</title> <h1>Hello Docker!</h1>
最後にビルドして実行しましょう!
$ sudo docker build -t test-image --no-cache=true --force-rm=true . $ sudo docker run -d -p 8080:80 --name test-container test-image
建てたサーバーにアクセスしてみます。
$ curl localhost:8080 <!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <title>Docker</title> <h1>Hello Docker!</h1>
解説
まあ解説出来るほど理解できていないので、「どこをどうすると、どう動くのか」解説します。
まず、今回建てたサーバーは、docker/
ディレクトリ内のファイルを使ってサーバーを建てています。そのため、docker/
内のファイルを変えて再ビルドするとサーバーの内容が変わります。
試しにhtml/index.html
の内容を書き換えて再ビルドしてみましょう。
html/index.html
<!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <title>Docker</title> <h1>Hello Docker!</h1> <p> I'm in Docker. </p>
$ sudo docker stop test-container $ sudo docker rm test-container $ # test-containerを停止させる $ sudo docker build -t test-image --no-cache=true --force-rm=true . $ # test-imageを再ビルド $ sudo docker run -d -p 8080:80 --name test-container test-image
こうするとI'm in Docker.
が追加されます。