Docker環境をCentOS Stream8に構築した時の手順備忘。
Docker, docker-compose導入の他、複数のサービスを立ち上げた際にリバースプロキシ経由でリクエストを実現したいためにnginxの導入を行った。
Dockerの導入
# Dockerとの競合パッケージを削除
$ dnf -y remove podman runc
$ yum install -y yum-utils
# リポジトリの登録
$ yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ yum install docker-ce docker-ce-cli containerd.io
# インストールされているか確認
$ docker -v
Docker version 20.10.12, build e91ed57
# docker起動
$ systemctl start docker
Docker Composeの導入
# 最新版をダウンロード
$ curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# バイナリに実行権限を付与
$ sudo chmod +x /usr/local/bin/docker-compose
# インストールされているか確認
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
# コマンド補完機能の導入
$ curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
nginxの導入
任意のディレクトリに下記ファイルを作成
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum info nginx
を実行し、下記のようなリポジトリ情報が取得できればOK
$ yum info nginx
Last metadata expiration check: 0:05:14 ago on Sat 22 Jan 2022 05:50:14 PM JST.
Available Packages
Name : nginx
Epoch : 1
Version : 1.14.1
Release : 9.module_el8.0.0+1060+3ab382d3
Architecture : x86_64
Size : 570 k
Source : nginx-1.14.1-9.module_el8.0.0+1060+3ab382d3.src.rpm
Repository : appstream
Summary : A high performance web server and reverse proxy server
URL : http://nginx.org/
License : BSD
Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
: IMAP protocols, with a strong focus on high concurrency, performance and
: low memory usage.
yumでインストール
$ yum -y install nginx
$ nginx -v
nginx version: nginx/1.14.1
実行と起動の自動化
$ systemctl enable nginx
$ systemctl start nginx
firewall-cmd
でhttpポートを解放するのを忘れずに。
$ firewall-cmd --add-port=80/tcp --permanent
$ firewall-cmd --reload
ブラウザ上でサーバIPにアクセスし、nginxのWelcome画面が出たら成功。
【重要】nginxのSELinux設定
SELinuxの設定により、nginx経由でDockerにアクセスしようとすると502Bad Gatewayになる場合がある。
CentOS Stream8ではSELinuxがデフォルトで有効なため、本設定をしないとうまくいかなかった。
SELinuxの外部接続許可パラメータを確認する。
$ getsebool httpd_can_network_connect
httpd_can_network_connect --> off
これをonに変更する。 -P
は恒久設定の意味。
$ setsebool -P httpd_can_network_connect 1
$ getsebool httpd_can_network_connect
httpd_can_network_connect --> on
これでうまくいった。
尚、接続エラー等の調査をする場合は、auditログを確認するのが有効。
tail -f /var/log/audit/audit.log
参考
[docker公式] https://docs.docker.com/engine/install/centos/
https://www.server-world.info/query?os=CentOS_Stream_8&p=docker&f=1
https://docs.docker.jp/compose/toc.html
https://hirooooo-lab.com/development/install-nginx-for-centos/
[docker UI(自身の過去記事)] https://qiita.com/kod314/items/f96541373398dfffea37
https://dev.classmethod.jp/articles/redhat-selinx-might-block-network-connection-to-servers-from-apache-php/