docker 搭建Mysql 集羣:使用composer 啓動Mysql服務

docker 搭建Mysql 集羣: 主從配置html

前言搭建基礎服務docker-compose.yml 解析Dockerfile 解析啓動Mysql服務結語mysql

前言

docker,docker-composer 的安裝就很少說明了,請自行安裝。
這一系列文章,經過搭建Mysql 服務集羣,讓你們學會如下知識點:web

  • docker composer 的使用
  • Mysql 的一些配置項

搭建基礎服務

新建文件夾mysql_composersql

mkdir mysql_composer
cd mysql_composer
複製代碼

新建docker-composer.ymldocker

version: '3'

networks:  #定義網路
  backend:
    driver: ${NETWORKS_DRIVER}

services:
  ### MySQL ################################################
  mysql0:
    build:
      context: ./mysql  #自定義鏡像
      args:
        - MYSQL_VERSION=${MYSQL_VERSION} #指定版本
    environment:
      - MYSQL_DATABASE=${MYSQL_DATABASE}  #默認建立數據庫
      - MYSQL_USER=${MYSQL_USER}  #建立用戶
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}  #用戶密碼
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} #root 用戶祕密
      - TZ=${WORKSPACE_TIMEZONE}
    volumes:
      - ${DATA_PATH_HOST}/mysql:/var/lib/mysql
      - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
    ports:
      - "${MYSQL_PORT}:3306"
    networks:
      - backend
複製代碼

新建.envshell

# All Networks driver
NETWORKS_DRIVER=bridge

WORKSPACE_TIMEZONE=UTC

DATA_PATH_HOST=~/.my_env/data
### MYSQL #################################################

MYSQL_VERSION=5.7
MYSQL_DATABASE=test
MYSQL_USER=test
MYSQL_PASSWORD=test123456
MYSQL_PORT=3308
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
複製代碼

在當前路徑下新建文件夾mysql數據庫

mkdir mysql
複製代碼

新建Dockfile文件bash

ARG MYSQL_VERSION=latest
FROM mysql:${MYSQL_VERSION}

#####################################
# Set Timezone
#####################################

ARG TZ=UTC
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && chown -R mysql:root /var/lib/mysql/

COPY my.cnf /etc/mysql/conf.d/my.cnf

CMD ["mysqld"]

EXPOSE 3306
複製代碼

新建Mysql的配置文件my.cnf網絡

# The MySQL  Client configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysql]

[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8
複製代碼

新建docker-entrypoint-initdb.d目錄composer

mkdir docker-entrypoint-initdb.d
複製代碼

新建文件createdb.sql

FLUSH PRIVILEGES ;
複製代碼

最終的目錄結構應該是:

image.png
image.png

docker-compose.yml 解析

  • 變量:文件中定義了${NETWORKS_DRIVER},${MYSQL_VERSION},${MYSQL_DATABASE}等變量。這些變量可以在咱們定義服務時,提供方便的管理。而變量對應的值咱們放在.env文件中。默認狀況下,docker-compose.yml 會自動讀取相同目錄下的.env 文件。
  • networks 用來定義網絡。
  • 上面咱們定義了一個名爲backend(這個名字能夠隨本身喜歡取)的網絡,這個網絡的驅動是bridge模式。
  • services 用來定義要啓動的服務。
  • 這裏咱們先只啓動一個名爲mysql0的服務。爲了啓動服務,咱們固然還要配置些參數。
  • build 參數用來自定義鏡像
    • context: 指定Dockerfile 所在目錄
  • environment: environment 和 Dockerfile 中的 ENV 指令同樣會把變量一直保存在鏡像、容器中,相似 docker run -e 的效果。
    • 這個例子中咱們配置`MYSQL_DATABASE`,`MYSQL_USER`等變量
  • volumes: 掛在目錄
    • 例子中咱們掛在了2個目錄/var/lib/mysql 掛載到${DATA_PATH_HOST}/mysql 中,這樣mysql 存儲的數據就不會隨着容器被刪除而消失了。
    • /docker-entrypoint-initdb.d 是用來作些初始化db的工做的,好比你但願建立容器後自動建立一些數據庫和表,均可以在這個目錄下建立對應sql文件。
  • ports: 映射端口
    • "${MYSQL_PORT}:3306" 例子中咱們把3306 端口映射到了`${MYSQL_PORT}`端口。
  • networks: 指定要使用的網絡
    • 這裏咱們指定了使用`backend`網絡。固然目前沒有什麼用,畢竟只有一個服務。

Dockerfile 解析

dockerfile 使用來自定義鏡像的,可讓咱們方便的構建本身的docker 鏡像
這個例子中的作的事情其實很簡單
設置服務的時區,而且把自定義的配置文件,放入到mysql 的配置文件目錄下。

啓動Mysql服務

docker-compose up -d
複製代碼

你可使用帳戶test,密碼test123456連接mysql服務,也可使用帳戶root,密碼root鏈接mysql服務。因爲我本地已經有個Mysql 服務佔用了3306端口,全部配置文件中,我給改爲了3308。

結語

經過本篇文章,相信你們都會快速搭建一個Mysql 服務了。固然咱們的目標是打一個集羣出來。下一篇咱們講解怎麼搭建另外一臺Mysql 服務,並使兩臺服務連通。

docker 搭建Mysql 集羣: 主從配置

相關文章
相關標籤/搜索