opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

ArchLinuxでfigでdockerを使ってみた

VPSのArchLinuxの各種サーバーをDockerに移行中なのでそのメモがてら。
前にDockerの記事をかなり適当に書いた気がするが、もう一度ちゃんとメモしておく。
ただし使い方だけでDockerの細かいメモは書かない。

Dockerを使えるようにする

ArchLinuxでDockerを使うにはpacmanでdockerをインストールしてデーモンを立ち上げておく。

$ (sudo) pacman -S docker

して

$ (sudo) systemctl start docker
$ (sudo) systemctl enable docker

しておく。
dockerをコントロールできるのは、dockerグループに所属するユーザーのみである。
なのでdockerグループにユーザーを追加。

$ (sudo) gpasswd -a username docker

これでおk。

figをインストール

figはAURにあるが、最近調子が悪いらしい。
というか、私が実際に作業をしていた時点では依存関係周りに問題があるようでPKGBUILDを無理やり書き換えてインストールしてもエラーで動作しなかった。
うちの環境の場合、dockerの作業(操作)をまとめて担当する適当なユーザーを作ってdockerに関して何か作業を行うときはそのユーザーにログインして作業するようにしている。
なので、figは別にそのユーザーのローカルで動けばよいのでpipで入れても良い。

pipが入っていない場合はインストールする。

$ (sudo) pacman -S python2-pip

で、

$ pip2 install fig --user

だったかな。コマンドうろ覚えだが確かこんな感じだった気がする(適当)。
pipはオプションをつけないとroot権限でグローバルに入れようとするのでローカルにいれるように指定する。

nginxとか動かしてみる

docker操作ユーザーのホームディレクトリ以下にnginxという名前(名前は適当でいいが)を作る。

$ mkdir ~/nginx

その中に適当にDockerfileを作る。editは好きなエディタに置き換えて。

$ edit ~/nginx/Dockerfile

以下はサンプル

## -*- docker-image-name: "image-name-here" -*-
FROM base/archlinux:latest
MAINTAINER opamp_sando <opampg@gmail.com>

RUN pacman -Syu --noconfirm > /dev/null
RUN pacman -S --noconfirm nginx > /dev/null &&rm -fr /etc/nginx

ADD nginx /etc/nginx

CMD ["/usr/bin/nginx", "-g", "daemon off;"]

nginxの設定済みの設定ファイルが入ったディレクトリを用意して、~/nginx以下に配置する。
ちょっと気持ち悪いが~/nginx/nginxがコンテナ内では/etc/nginxに配置されるようにする。
名前が気に入らないなら別にどうとでも変えれるので問題ない。

人によっては設定はあとでVOLUMEとしてホストのものをコンテナにマウントする方法を使う人もいるかもしれない。
私もどちらが良いのかはっきり断言はできないが、kindleで買ったDocker本などでは設定ファイルをコンテナに格納する手法だったのでここでもそれに従った。
よほど頻繁に書き換えるものでない限り格納して問題ないと思われ。

fig.ymlをかく

~/fig.ymlを書く。適当なエディタで開く。

$ edit ~/fig.yml

以下にサンプルを載せる

nginx:
  build: nginx/
  command: nginx -g 'daemon off;'
  ports:
    - "80:80"
  volumes:
    - /var/srv/http:/srv/http
    - /var/log/docker/nginx:/var/log/nginx
    - /home:/home

buildにはDockerfileがあるディレクトリを記載する。commandはコンテナ実行時に実行するコマンドを書けばいいと思うが、Dockerfileで記載しているのでいらない気がする。

portsやvolumesは基本的に左側にホストのものを書いて右側にコンテナのものを書く。
ログは上のように、ホストの/var/log/dockerというディレクトリに全部いれるようにしている。
userdirもどきの設定を行っているので/home以下もマウントしておく。
このvolumesの設定はDockerfileにも記載できるようだが書きにくいので、fig.ymlに書くほうが私は好み。

この例ではhttpsは使わない設定だったとする。(ちなみに実際にVPSで動かしてるnginxの設定はhttpsを使ってるのでこれに443番ポートの設定やSSL証明書の設定が加わる)

ちなみに、volumesの最後に:roのようにするとread onlyにできたりする。
例: /etc/ssl:/etc/ssl:ro

動かしてみる

$ fig up nginx

とすると動かせる。

$ fig up

だけだとfig.ymlに書いたすべてのコンテナが作成される。

コンテナがちゃんと構築できたら

$ fig start

でコンテナを実行させ

$ fig stop

でコンテナを停止できる。
うまくユーザー権限を切り替えてfig startを走らせるserviceファイルを書いたらサーバー起動時に自動でコンテナを動かすようにもできるはず。

コンテナを消したいときは

$ fig rm

する。

終わり

やっぱりかなり適当なまとめだった気がするが、何か思いついたら追記するかもしれない。
それにしてもnginxなんかはコンテナ作りやすいがpostgresなんかは結構難しい。
postgresも動かす予定だが、とりあえず後回しで問題ないのでラスボスになりそう。
もしかしたらそのうち記事にするかもしれない。

参考

fig:
http://www.fig.sh/

Docker本:

Firefox ブラウザ無料ダウンロード