自宅サーバコンテナ化対応として、今回はプロキシ機能であるSquidのコンテナ化を行う。
- DockerでPostfixをコンテナ化してメールサーバを構築する
- DockerでUnboundをコンテナ化してDNSサーバを構築する
- DockerでSquidをコンテナ化してプロキシサーバを構築する ★本記事
- Docker Composeを作って複数のコンテナの作成・起動・停止・削除を制御する
環境
今回のDocker環境構築時のソフトウエアバージョンを以下に記載する。
- DockerホストOS : CentOS 8.2
- Docer : 19.03.14
- コンテナ用OSイメージ : centos:latest
Dockerホストとコンテナ間では、サービス提供に必要なポートの紐づけと、ログファイルを出力させるディレクトリの紐づけを行う。以下に簡単に図示しておく。
Squidコンテナ化手順
1. Dockerのインストール
Dockerのインストールは別記事を参照。CentOS 7にDockerをインストールする内容となっているが、CentOS 8も同様の手順でインストールできる。
Dockerインストール後、Dockerfile等を配置するディレクトリを作成し、以後はそのディレクトリ内にすべてのファイルを配置する。
2. Squid用の設定ファイルを準備
Squidの設定手順は、過去記事にて記載しているので、そちらを参照いただきたい。
コンテナにする場合も同様の設定を行えばよい。あらかじめ、以下の通り設定ファイルを作成しておく。
squid.conf
※★箇所は各環境に合わせて変更すること。
acl localnet src 192.168.33.0/24 #★プロキシ利用を許可するIPアドレス
acl localnet src 192.168.11.0/24 #★プロキシ利用を許可するIPアドレス
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl NOCACHE src all
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 8080 #★プロキシを提供するポート番号
cache deny NOCACHE #★キャッシュ無効
cache_dir ufs /var/spool/squid 100 16 256
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
shutdown_lifetime 5 seconds # 停止時の待機時間をDockerのタイムアウト(10s)以下に設定
3. Dockerホストにログ出力先を作成
今回はコンテナのSquidが出力したaccess.log
とcache.log
をDockerホストのディレクトリ出力するよう構成するため、以下の通りあらかじめログ出力先のディレクトリを作成しておく。
mkdir -p /var/log/docker/centos-squid
chmod 777 /var/log/docker/*
4. Dockerfile
を作成
コンテナの構成情報はDockerfile
に記述する。いくつか記述内容にポイントがあるので以下表にまとめる。
命令 | 記述内容 | 説明 |
---|---|---|
FROM | centos |
コンテナのベースとなるイメージはCentOSを使用する。 |
ENV | TZ |
タイムゾーンを日本標準時 (Asia/Tokyo) にする。 |
ENV | http_proxy , https_proxy |
プロキシ環境の場合は、プロキシサーバを指定する。 |
RUN | dnf , mkdir , chown |
必要なパッケージのインストールを行う。Squidのみインストールすれば問題ない。 |
COPY | - | 事前に作成したsquid.conf の設定ファイルを /etc/squid/ にコピーする。 |
RUN | /usr/sbin/squid -N -z |
squid コマンドを使用して、キャッシュファイルを作成する。 |
EXPOSE | 8080 | Squidで指定した8080番ポートを記述する。 |
CMD | ["/usr/sbin/squid", "-N", "-f", "/etc/squid/squid.conf"] |
/usr/sbin/squid -N にてSquidを実行する。フォアグラウンドで起動させるため、-N オプション (No daemon mode) を付与している。[] で囲まずに記述すると/bin/sh -c が付与されてプロセスが実行されてしまうので、通常は必ず[] にてコマンドを囲むこと。 |
実際のDockerfile
は以下の通りとなった。
FROM centos
ENV TZ=Asia/Tokyo \
http_proxy=http://192.168.33.23:8080 \
https_proxy=http://192.168.33.23:8080
RUN dnf install squid -y
COPY squid.conf /etc/squid/
RUN /usr/sbin/squid -N -z
EXPOSE 8080
CMD ["/usr/sbin/squid", "-N", "-f", "/etc/squid/squid.conf"]
5. コンテナイメージを作成
作成したDockerfile
を使って、docker build
コマンドにてコンテナイメージを作成する。
# docker build -t centos-squid:1 .
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-squid 1 398945a07be3 4 days ago 306MB
6. コンテナを起動
コンテナ起動時には、以下オプションの設定を行う。
設定内容 | 説明 |
---|---|
--name |
コンテナの名称を設定。今回は「centos-squid」という名前にする。 |
-p |
Dockerホストの通信ポートとコンテナの通信ポートを紐づけを行う。<ホストポート>:<コンテナポート> の書式で記載する。今回はコンテナ側で8080番ポートを使用し、ホスト側も同様に8080番ポートに指定することとし、8080:8080 で指定する。 |
-v |
Dockerホストのディレクトリ/ファイルとコンテナのディレクトリ/ファイルの紐づけを行う。<ホストディレクトリ/ファイル>:<コンテナディレクトリ/ファイル> の書式で記載する。今回はホストの/var/log/docker/centos-squid/ ディレクトリにコンテナの/var/log/squid を紐づけることで、ログを出力させる。 |
上記をふまえ、以下の通りdocker run
コマンドでコンテナの起動を行う。
# docker run -d -p 8080:8080 --name "centos-squid" -v /var/log/docker/centos-squid:/var/log/squid centos-squid:1
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
facb736671ae centos-squid:1 "/usr/sbin/squid -N …" 12 hours ago Up 12 hours 0.0.0.0:8080->8080/tcp centos-squid
7. logrotate設定
ホストに出力させたログをローテーションさせるため、logrotateの設定を行う。logrotateは/etc/logrotate.d/
に以下のような設定ファイルを置けば自動でローテーションが実行されるようになる。
# cat /etc/logrotate.d/docker-log
/var/log/docker/*/maillog
/var/log/docker/*/*.log
{
rotate 7
daily
copytruncate
dateext
su root root
}
詳細な説明は、以前の記事を参照いただきたい。
以上でSquidのコンテナ化が完了となる。
0 件のコメント:
コメントを投稿