Docker安裝MySQL 8.0並掛載數據及配置文件


安裝部署環境

  • Ubuntu 18.04.3 LTS
  • Docker 19.03.2
  • MySQL latest(8.0.17)

下載鏡像

# docker從倉庫中拉取最新版的mysql鏡像,如果沒加標簽的話,默認獲取最新的版本
Docker pull mysql

  

 

掛載數據卷以及配置文件

Docker容器原則上是短暫的,如果容器被刪除或損壞,任何數據或配置都將丟失。因為,我們需要將 Docker 內的 MySQL 數據文件以及配置文件轉移到宿主機的指定路徑。

每個人部署的 MySQL 內,可能文件路徑不一致。我們可以先創建個測試的 MySQL 容器,然后再根據查找出的文件具體路徑位置,重新創建我們符合我們需求的 MySQL 容器,命令如下:

docker run --name mysqltest \
-p 3307:3306 -e MYSQL_ROOT_PASSWORD=root \
-d mysql  

進入Docker容器內

docker exec -it mysqltest bash

確定Docker內 MySQL 文件相關路徑

根據官網說明:如果要掛載 MySQL 配置文件的話,我們必須在物理機上存在着該配置文件。

# 查找Docker內,MySQL配置文件my.cnf的位置
mysql --help | grep my.cnf
# 顯示如下,意思是路徑按優先排序,會是在以下路徑里:
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
# 配置文件的路徑不一定都一樣,有些博客介紹的位置是在/etc/my.cnf。而本人Ubuntu系統上,實際存在位置是在/etc/mysql/my.cnf

查找數據文件位置

用於在容器上運行docker inspect命令的JSON輸出具有一個 Mount密鑰,其值提供了有關數據目錄卷的信息:

docker inspect mysqltest 
...
 "Mounts": [
            {
                "Type": "volume",
                "Name": "4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652",
                "Source": "/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
... 

輸出顯示源文件夾:/var/lib/docker/volumes,表示已安裝在 /var/lib/mysql容器內的服務器數據目錄中。

創建本地路徑並掛載Docker內數據

接下來,我們需要在物理機上,創建指定好一個數據和配置文件的掛載路徑。

mkdir -p /home/docker/mysql/conf && mkdir -p /home/docker/mysql/datadir

創建好本地的掛載數據路徑后,我們再將測試容器里 MySQL 的配置文件復制到該路徑。日后需改配置,直接在掛載路徑的配置文件上修改即可。

docker cp mysqltest:/etc/mysql/my.cnf /home/docker/mysql/conf

創建 MySQL 容器並啟動

解決了配置文件的問題,就可以根據需求創建我們的 MySQL 容器並掛載數據了。

docker run --name mysql1 \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
--mount type=bind,src=/home/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
--mount type=bind,src=/home/docker/mysql/datadir,dst=/var/lib/mysql \
--restart=on-failure:3 \
-d mysql
  • --name:為容器指定一個名字
  • -p:指定端口映射,格式為:主機(宿主)端口:容器端口
  • -e:username="xxx",設置環境變量
  • --restart=on-failure:3:是指容器在未來出現異常退出(退出碼非0)的情況下循環重啟3次
  • -mount:綁定掛載
  • -d:后台運行容器,並返回容器 id

網上許多人的博客寫的掛載 MySQL數據卷方法,采用的是--volume,但是在最新的MySQL官方Docker搭建MySQL文檔中,建議我們大家使用--mount,因為研究表明它更易於使用。故我們根據官網推薦的方法,這里也采用--mount掛載。

查看在運行的容器

docker ps 

們可以看到mysql1容器正在運行,包括之前我們創建的測試容器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM