使用Docker搭建MySQL服務

1、安裝docker

windows 和 mac 版能夠直接到官網下載 docker desktophtml

linux 的安裝方法能夠參考 http://www.javashuo.com/article/p-znesnbxp-dp.htmlmysql

能夠在shell中輸入如下命令檢查是否成功安裝: sudo docker versionlinux

2、創建鏡像

  1. 拉取官方鏡像(咱們這裏選擇5.7,若是不寫後面的版本號則會自動拉取最新版)sql

    docker pull mysql:5.7   # 拉取 mysql 5.7
    docker pull mysql       # 拉取最新版mysql鏡像

    MySQL文檔地址docker

  2. 檢查是否拉取成功shell

    $ sudo docker images
  3. 通常來講數據庫容器不須要創建目錄映射數據庫

    sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    • –name:容器名,此處命名爲mysql
    • -e:配置信息,此處配置mysql的root用戶的登錄密碼
    • -p:端口映射,此處映射 主機3306端口 到 容器的3306端口
  4. 若是要創建目錄映射windows

    duso docker run -p 3306:3306 --name mysql \
    -v /usr/local/docker/mysql/conf:/etc/mysql \
    -v /usr/local/docker/mysql/logs:/var/log/mysql \
    -v /usr/local/docker/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:5.7
    • -v:主機和容器的目錄映射關係,":"前爲主機目錄,以後爲容器目錄
  5. 檢查容器是否正確運行bash

    docker container ls
    • 能夠看到容器ID,容器的源鏡像,啓動命令,建立時間,狀態,端口映射信息,容器名字

3、鏈接mysql

  1. 進入docker本地鏈接mysql客戶端tcp

    sudo docker exec -it mysql bash
    mysql -uroot -p123456
  2. 使用 Navicat 遠程鏈接mysql

    我只找到了 mac 版本的 Navicat Premiun(以下),沒有找到windows和linux的。你們能夠自行尋找。

    百度雲鏈接 密碼: qps3 (該軟件包來自著名分享網站 Pirate ,並感謝網友 chaosgod 和 jor_ivy)

    img

    img

    安裝完以後:複製中文包」zh-Hans.lproj」放到 /Contents/Resources 便可。(應用程序右鍵顯示包內容)

  3. 使用遠程鏈接軟件時要注意一個問題

    咱們在建立容器的時候已經將容器的3306端口和主機的3306端口映射到一塊兒,因此咱們應該訪問:

    host: 127.0.0.1
    port: 3306
    user: root
    password: 123456
  4. 若是你的容器運行正常,可是沒法訪問到MySQL,通常有如下幾個可能的緣由:

    • 防火牆阻攔

      # 開放端口:
      $ systemctl status firewalld
      $ firewall-cmd  --zone=public --add-port=3306/tcp -permanent
      $ firewall-cmd  --reload
      # 關閉防火牆:
      $ sudo systemctl stop firewalld
    • 須要進入docker本地客戶端設置遠程訪問帳號

      $ sudo docker exec -it mysql bash
      $ mysql -uroot -p123456
      mysql> grant all privileges on *.* to root@'%' identified by "password";

      原理:

      # mysql使用mysql數據庫中的user表來管理權限,修改user表就能夠修改權限(只有root帳號能夠修改)
      
      mysql> use mysql;
      Database changed
      
      mysql> select host,user,password from user;
      +--------------+------+-------------------------------------------+
      | host                    | user      | password                                                                 |
      +--------------+------+-------------------------------------------+
      | localhost              | root     | *A731AEBFB621E354CD41BAF207D884A609E81F5E      |
      | 192.168.1.1            | root     | *A731AEBFB621E354CD41BAF207D884A609E81F5E      |
      +--------------+------+-------------------------------------------+
      2 rows in set (0.00 sec)
      
      mysql> grant all privileges  on *.* to root@'%' identified by "password";
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> flush privileges;
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> select host,user,password from user;
      +--------------+------+-------------------------------------------+
      | host                    | user      | password                                                                 |
      +--------------+------+-------------------------------------------+
      | localhost              | root      | *A731AEBFB621E354CD41BAF207D884A609E81F5E     |
      | 192.168.1.1            | root      | *A731AEBFB621E354CD41BAF207D884A609E81F5E     |
      | %                       | root      | *A731AEBFB621E354CD41BAF207D884A609E81F5E     |
      +--------------+------+-------------------------------------------+
      3 rows in set (0.00 sec)

參考鏈接:

http://www.javashuo.com/article/p-xihkxgqu-bu.html

https://www.52pojie.cn/thread-727433-1-1.html

相關文章
相關標籤/搜索