2017年7月15日土曜日

Docker for Windows で apt-chacer-ng 環境を作る

やりたいこと

環境構築の試行錯誤する中で、毎回 Debian のミラーサイトにアクセスするのは心苦しい。 なので、ローカルに apt のキャッシュサーバーを立てたい。

実現方針

  1. apt-cacher-ng 用のイメージ作成
  2. apt-cacher-ng 用のキャッシュ用の Named Volume 作成
  3. 実験環境用の docker-compose.yml ひな形を作成
    • 実験用コンテナと、 apt-cacher-ng 用コンテナがネットワークでつながるようにする
    • 実験用コンテナが「2.」で作った Named Volume を使うように設定

これで、各実験環境ごとに apt-cacher-ng サーバが立ち上がり、共有している Volume のキャッシュを使用することで、ミラーサイトへのアクセスを減らすことができるはず。

環境

OS: Windows 10 Pro

やったこと

apt-cacher-ng 用のイメージ作成

コンテナ用ディレクトリ作成

$ mkdir -p ~/project/docker/apt-cacher-ng
$ cd ~/project/docker/apt-cacher-ng

Dockerfile 作成

Dockerize an apt-cacher-ng service を参考に作成。

VOLUME, EXPOSE は、 docker-compose で指定する想定なので削った。

■ Dockerfile

FROM debian:stretch-slim

RUN apt -y update
RUN apt -y upgrade
RUN apt -y install apt-cacher-ng

CMD chmod 777 /var/cache/apt-cacher-ng && /etc/init.d/apt-cacher-ng start && tail -f /var/log/apt-cacher-ng/*

イメージのビルド

cd ~/project/docker/apt-cacher-ng
docker build -t apt-cacher-ng .

作成したイメージの確認

docker images を実行すると、今作ったイメージが表示されるはず。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
apt-cacher-ng       latest              fc58ec7f120b        About a minute ago   79.2MB

apt-cacher-ng 用のキャッシュ用の Named Volume 作成

docker volume create するだけ。

$ docker volume create apt-cacher-ng
apt-cacher-ng
$ docker volume ls
DRIVER              VOLUME NAME
local               apt-cacher-ng

実験環境のひな形を作成

apt のプロキシ設定済みのイメージを作成

$ mkdir -p ~\project\docker\test-base
$ cd ~\project\docker\test-base

ファイル類作成

■ Dockerfile

FROM debian:stretch-slim

COPY ./02proxy /etc/apt/apt.conf.d/02proxy

■ 02proxy

Acquire::http::Proxy "http://apt-cacher-ng:3142/";

イメージのビルド

docker image -t test-base .

ひな形から実験環境を構築する

実験環境用のディレクトリを作って docker-compose.yml を作る

$ mkdir -p ~/project/docker/target
$ cd ~/project/docker/target
$ gvim docker-compose.yml

試行錯誤した結果、こんな感じでよいのではないかと。

■ docker-compose.yml

version: '3'
services:
    # apt-cacher-ng 用の設定
    apt-cacher-ng:
        image: apt-cacher-ng
        # apt-cacher-ng 用の Named Volume を指定
        # Named Volume の apt-cacher-ng が、
        # コンテナの /var/cache/apt-cacher-ng にマウントされる
        volumes:
            - apt-cacher-ng:/var/cache/apt-cacher-ng
        # ポートを開ける
        expose:
            - 3142
    # 実験環境用のコンテナ設定
    target:
        image: test-base

volumes:
    apt-cacher-ng:
        external: true

動作確認

最初の 1 つを作る

apt-cacher-ng のキャッシュが空であることを確認。

$ docker-compose up -d
Creating target_apt-cacher-ng_1 ...
Creating target_target_1 ...
Creating target_target_1
Creating target_apt-cacher-ng_1 ... done
$ docker-compose run apt-cacher-ng /bin/bash
root@a187654c95e3:/# ls /var/cache/apt-cacher-ng/
_xstore
root@a187654c95e3:/# exit
exit

target で、とりあえず git をインストールしてみる。

$ docker-compose run target /bin/bash
root@89ce826c2a94:/# apt -y update; apt -y upgrade; apt -y install git

また apt-cacher-ng に戻って、ログやらキャッシュやらを確認。

$ docker-compose logs apt-cacher-ng
$ docker-compose run apt-cacher-ng /bin/bash
root@310265d1d8e3:/# ls /var/cache/apt-cacher-ng/

中身増えてますね。きちんと動いていそう。

2 つめを作る

一つ目のキャッシュファイルがあることを確認。

$ mkdir ~/project/docker/target2/
$ cd ~/project/docker/target2/
$ cp ~/project/docker/target/docker-compose.yml .
$ docker-compose up -d
$ docker-compose run apt-cacher-ng /bin/bash
root@57d7dc4b271b:/# ls /var/cache/apt-cacher-ng/

うん、増えてますね。 さっきと同じように git インストールまでやってみる。

$ docker-compose run target /bin/bash
root@4aa9a5c1021b:/# apt -y update; apt -y upgrade; apt -y install git

ログを確認。

$ docker-compose logs apt-cacher-ng

うん、効いていそう。

以上。

変更履歴

日付 修正内容
v1 2017/7/15 新規作成
v2 2017/7/16 docker-compose.yml の「ポートを開ける」を ports から expose に変更。
(ホストに公開する必要がないため。)

0 件のコメント:

コメントを投稿