MySQL の Docker コンテナーを Fedora 上に構築する¶
2017/05/07
Alpine Linux で MySQL を立ち上げようかなと思いましたが、主目的は MySQL を使えるようにすることなので手軽に MySQL の公式 Docker イメージを利用することとしました。
環境¶
Fedora 25
目的¶
MySQL の Docker コンテナを Fedora 上に立てる。
設定ファイルやデータをコンテナ外にて管理する。
Firewalld の設定で Fedora ホスト外からアクセスできるようにする。
お断り¶
以下でパスワードが脆弱なものとなっており、 また設定ファイルに直書きする手順となっています。
手順¶
以下、 /etc/mysql/conf.d
を設定ファイルの、 /var/lib/mysql
をデータのホスト上の保存ディレクトリパスとする。
1. docker のインストール¶
$ sudo dnf install docker
2. 設定ファイルやデータ向けディレクトリの構築¶
$ mkdir -p /etc/mysql/conf.d
$ mkdir -p /var/lib/mysql
$ chcon -Rt svirt_sandbox_file_t /etc/mysql/conf.d
$ chcon -Rt svirt_sandbox_file_t /var/lib/mysql
3. 自動起動のために Systemd のユニットファイルを作成し起動する¶
パスワードの root については適宜書く環境向けに変えること。
$ sudo sh -c 'cat >> /systemd/system/docker-mysql.service'
[Unit]
Description=Docker Container for MySQL
Requires=docker.service
After=docker.service
[Service]
ExecStart=
ExecStart=/usr/bin/docker run --rm -v /etc/mysql/conf.d:/etc/mysql/conf.d -v /var/lib/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
[Install]
WantedBy=default.target
$ sudo systemctl daemon-reload
$ sudo systemctl enable docker-mysql.service
$ sudo systemctl start docker-mysql.service
4. root ユーザーについてコンテナ外から接続できるようにする¶
最初にコンテナの ID を確認し、 docker exec
で対象のホストに入り、 mysql
コマンドにて接続設定を行う。
最初 docker ps にて起動コンテナの id を確認する。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3cecfcdec9f4 mysql:5.7 "docker-entrypoint.sh" 29 minutes ago Up 29 minutes 0.0.0.0:3306->3306/tcp condescending_hawking
次にコンテナに入り、設定をする。 172.17.%
はホストマシンからアクセス時の設定、 192.168.%
は、今回は Hyper-V 上に
Fedora を構築しているのでその IP となる。必要に応じて後者を変えること。
パスワードの root については適宜書く環境向けに変えること。
$ docker exec -it 3ce bash
$ mysql -h localhost -u root
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'172.17.%' IDENTIFIED BY 'root' WITH GRANT OPTION ;
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'192.168.%' IDENTIFIED BY 'root' WITH GRANT OPTION ;
5. firewalld に接続を通すように設定する¶
firewalld 向け設定ファイルを作成する。
192.168.137.0/24
は、今回は Hyper-V 上に Fedora を構築しているのでその
IPとなる。必要に応じて後者を変えること。
$ sudo sh -c 'cat >> /etc/firewalld/services/mysql.xml'
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>MySQL</short>
<description>MySQL Database Server</description>
<port protocol="tcp" port="3306"/>
<destination ipv4="192.168.137.0/24"/>
</service>
次にデフォルトのゾーンにサービスを追加するため、デフォルトのゾーンを確認する。今回は
FedoraServer
となった。
$ firewall-cmd --get-default-zone
FedoraServer
最後にゾーン FedoraServer
にサービスを追加し、設定を反映する。
$ sudo firewall-cmd --permanent --zone=FedoraServer --add-service=mysql
$ sudo firewall-cmd --reload
参考¶
-
firewall-cmd の使い方まとめ
-
MySQL Docker Image の説明
SELinux の設定