安裝部署環境
- 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
容器正在運行,包括之前我們創建的測試容器。