================================================ MySQL の Docker コンテナーを Fedora 上に構築する ================================================ :blog_date:`2017/05/07` Alpine Linux で MySQL を立ち上げようかなと思いましたが、主目的は MySQL を使えるようにすることなので手軽に MySQL の公式 Docker イメージを利用することとしました。 環境 ==== * Fedora 25 目的 ==== * MySQL の Docker コンテナを Fedora 上に立てる。 * 設定ファイルやデータをコンテナ外にて管理する。 * Firewalld の設定で Fedora ホスト外からアクセスできるようにする。 お断り ====== * 以下でパスワードが脆弱なものとなっており、 また設定ファイルに直書きする手順となっています。 手順 ==== 以下、 ``/etc/mysql/conf.d`` を設定ファイルの、 ``/var/lib/mysql`` をデータのホスト上の保存ディレクトリパスとする。 .. contents:: :local: 1. docker のインストール ------------------------ .. code-block:: console $ sudo dnf install docker 2. 設定ファイルやデータ向けディレクトリの構築 --------------------------------------------- .. code-block:: console $ 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 については適宜書く環境向けに変えること。 .. code-block:: console $ 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 を確認する。 .. code-block:: console $ 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 については適宜書く環境向けに変えること。 .. code-block:: console $ 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となる。必要に応じて後者を変えること。 .. code-block:: console $ sudo sh -c 'cat >> /etc/firewalld/services/mysql.xml' MySQL MySQL Database Server 次にデフォルトのゾーンにサービスを追加するため、デフォルトのゾーンを確認する。今回は ``FedoraServer`` となった。 .. code-block:: console $ firewall-cmd --get-default-zone FedoraServer 最後にゾーン ``FedoraServer`` にサービスを追加し、設定を反映する。 .. code-block:: console $ sudo firewall-cmd --permanent --zone=FedoraServer --add-service=mysql $ sudo firewall-cmd --reload 参考 ==== * `CentOS7 firewalldの設定方法 `_ * firewall-cmd の使い方まとめ * `library/mysql - Docker Hub `_ * MySQL Docker Image の説明 * SELinux の設定