Docker學習之docker-compose部署mysql

一、安裝部署docker、docker-compose

可以參考之前的兩篇博客

安裝docker

安裝docker-compose

二、編寫docker-compose文件(這裏提供二種方式)

第一種、不掛載本地文件,文件都由docker附加捲直接生成,而後修改其中的文件即可

1、配置docker-compose.yml文件

version: '2'
services:
    mysql1:
        environment:
            MYSQL_ROOT_PASSWORD: "yourpassword"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'yourpassword'
        image: "docker.io/mysql:latest" 
        container_name: mysql1
        ports:
            - "3339:3306"
    mysql2:
        environment:
            MYSQL_ROOT_PASSWORD: "yourpassword"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'yourpassword'
        image: "docker.io/mysql:latest" 
        container_name: mysql2
        ports:
            - "3340:3306"
  • MYSQL_ROOT_PASSWORD爲數據庫的密碼,也就是root用戶的密碼。
  • MYSQL_USER和MYSQL_PASS另外一個用戶名和密碼。
  • image爲你拉取鏡像的地址和版本,當然也可以換成自己的鏡像倉庫,這裏使用官方的。
  • volumes裏面的參數爲映射本地和docker容器裏面的文件夾和目錄。.
  • ports 爲映射主機和容器的端口,前面的端口是你要暴露給外部的端口,後面的端口是docker自己的端口。

2、啓動鏡像

docker-compose up -d

3、進入容器內部,連接上mysql數據庫

進入容器:docker exec -it mysql1(容器ID或者name) /bin/bash
連接mysql:mysql -u root -p
接着就輸入剛剛docker-compose.yml裏配置的密碼

正常情況下是能夠正常連接的。不過也會出現下面的問題

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)

解決辦法:

(1)、跳過MySQL的密碼認證過程。修改/etc/my.cnf文件,加入"skip-grant-tables"用來跳過密碼驗證的過程

(2)、重啓MySQL

     /etc/init.d/mysql restart(有些用戶可能需要使用/etc/init.d/mysqld restart),

     service mysqld resatrt

     systemctl restart docker(三選一)

(3)、重啓之後輸入mysql即可進入mysql

(4)、接下來就是用sql來修改root的密碼(這步修改的方式有好多種,不一樣的版本有不同的方式,每個試下成功了即可)

1.update user set password=password("你的新密碼") where user="root";
2.update user set authentication_string=password("你的新密碼") where user="root";
3.ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼'

(5)、編輯/etc/my.cnf,去掉剛纔添加的內容,然後重啓MySQL。大功告成!

4、查看容器狀態,docker container ps

5、使用navicat測試遠程連接,ip添docker-compose.yml暴露的端口而不是3306

第二種、掛載本地文件,文件本地生成好

1、配置docker-compose.yml文件

version: '2'
services:
    mysql1:
        environment:
            MYSQL_ROOT_PASSWORD: "yourpassword"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'yourpassword'
        image: "docker.io/mysql:latest" 
        container_name: mysql1
        volumes:
            - "./db:/var/lib/mysql"
            - "./conf/my.cnf:/etc/my.cnf"
            - "./init:/docker-entrypoint-initdb.d/"
        ports:
            - "3305:3306"

當前文件夾的tree結構

root@localhost mysql # tree
.
├── conf
│   └── my.cnf
├── db
├── docker-compose.yml
└── init
    └── init.sql

2、配置文件和初始化文件

root@localhost conf # cat my.cnf 
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
root@localhost init # cat init.sql 
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword';

3.其它步驟同上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章