Docker容器化開發流程(四)製作mysql鏡像

目標

使用mysql鏡像文件

# 使用 docker pull 下載鏡像   https://hub.docker.com/_/mysql?tab=tags
$ docker pull mysql:5.7
# 查看鏡像
$ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 413be204e9c3        6 days ago          456MB
 
# 運行mysql容器
$ docker run -itd --name mysql-server1 -p 3307:3307 -e MYSQL_ROOT_PASSWORD=111 mysql:5.7
 
-p 3307:3307 :映射容器服務的 3307 端口到宿主機的 3307 端口,外部主機可以直接通過 宿主機ip:3307 訪問到 MySQL 的服務。
MYSQL_ROOT_PASSWORD=111:設置 MySQL 服務 root 用戶的密碼。
 
# 使用 docker ps 查看現在運行的容器信息
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                         NAMES
15c50777c383        mysql:5.7           "docker-entrypoint.s…"   5 seconds ago       Up 3 seconds        3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp   mysql-server1
 
# 將容器中的目錄文件複製到宿主機中
mysql 配置文件;
數據存儲目錄,以便掛載(PS: 若不掛載到宿主機,容器萬一被刪除掉了,數據都會丟失)
mysql 的日誌logs
 
# 將容器中的 mysql 配置文件複製到宿主機中指定路徑下,路徑你可以根據需要,自行修改
$ mkdir -p /usr/local/docker/mysql/config
$ docker cp mysql-server1:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config
# 將容器中的 mysql 存儲目錄複製到宿主機中
$ mkdir -p /usr/local/docker/mysql/data
$ docker cp mysql-server1:/var/lib/mysql/ /usr/local/docker/mysql/data
 
# 將容器中的 mysql log複製到宿主機中
$ mkdir -p /usr/local/docker/mysql/logs
$ docker cp mysql-server1:/logs /usr/local/docker/mysql/logs
 
 
# 將剛纔的容器刪除 PS: mysql-server 是我們運行容器時,指定的名稱,當然,你也可以先執行 docker ps, 通過容器 ID 來刪除。
$ docker rm -f mysql-server1
 
# 修改mysql 配置
$ vi /usr/local/docker/mysql/config/mysqld.cnf
# 修改端口號 設置在 mysqld 項目下新增 port=3307 配置
[mysqld]
port=3307
 
# 重新運行mysql 容器
$ docker run -itd --name mysql-server1 -p 3307:3307 -v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /usr/local/docker/mysql/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111 mysql:5.7
 
其他不變,額外添加了兩個掛載子命令:
 
-v/usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf: 將容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件掛載到宿主機的 /usr/local/docker/mysql/config/mysqld.cnf 文件上;
 
-v/usr/local/docker/mysql/data:/var/lib/mysql: 將容器中 /var/lib/mysql 數據目錄掛載到宿主機的 /usr/local/docker/mysql/data 目錄下;
 
-d: 後臺運行容器
-p 將容器的端口映射到本機的端口
-v 將主機目錄掛載到容器的目錄
-e 設置參數
 
 
# 檢查容器是否啓動
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                         NAMES
15c50777c383        mysql:5.7           "docker-entrypoint.s…"   5 seconds ago       Up 3 seconds        3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp   mysql-server1
 
# mysql容器運行時,進入mysql
$ docker exec -it mysql-server1 bash
或者
docker exec -it 容器ID /bin/bash
 
# 如果修改配置文件
$ vim /etc/mysql/mysql.conf.d/mysqld.cnf
 
# 保存後,重新啓動mysql容器
$ docker restart mysql-server1
或者 docker restart 容器id
 
# 進入mysql 容器的命令行
$ docker exec -it mysql-server1 bash
# 連接mysql
$ mysql -uroot -p
剩下的操作,就是mysql 提供的語法了
 
# 退出容器,不關閉容器
ctrl+p+q
 
例子 : root@15c50777c383:/# mysql -uroot -p111

測試

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9jlYn8dY-1586687431401)(index_files/1586661841314_4.png)]

將mysql鏡像提交到倉庫

由於私人倉庫還沒有建立,先提交至docker hub

# 修改標籤
$ docker tag mysql:5.7 1164014750/mysql:5.7
# 提交
$ docker push 1164014750/mysql:5.7
# 就可以在dock hub 中搜索了
https://hub.docker.com/repository/docker/1164014750/mysql
 
# pull
docker push 1164014750/mysql:5.7

其他命令

# 容器外訪問mysql容器
$ docker exec -it mysql-server1(容器id或者容器名稱) bash
# 查看MySQL日誌
$ docker logs 容器id或者容器名稱
 
# 使用自定義MySQL配置文件
 
如果/my/custom/config-file.cnf是自定義配置文件的路徑和名稱,則可以mysql像這樣啓動容器(請注意,此命令僅使用自定義配置文件的目錄路徑):
 
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
 
# 不使用cnf文件的配置
 
可以將許多配置選項作爲標誌傳遞給mysqld。這將使您可以靈活地自定義容器而無需cnf文件。例如,如果您想更改所有表的默認編碼和排序規則以使用UTF-8(utf8mb4),請運行以下命令:
 
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
 
# 如果您想查看可用選項的完整列表,請運行:
$ docker run -it --rm mysql:tag --verbose --help
 
 

特別注意

參考:Docker官方映像(https://hub.docker.com/_/mysql?tab=description)

# 數據存儲位置,我們在宿主機目錄創建一個存放mysql數據目錄,並將這個目錄掛載到容器中,如果不掛載,容器丟失,之前的數據將丟失
1.在主機系統上的適當捲上創建數據目錄,例如/my/own/datadir
2.mysql像這樣啓動您的容器:
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
 
-v /my/own/datadir:/var/lib/mysql命令的一部分/my/own/datadir從底層主機系統/var/lib/mysql在容器內部安裝目錄,默認情況下,MySQL將在該目錄中寫入其數據文件。
 
# 創建數據庫轉儲到sql文件
大多數普通工具都可以使用,儘管在某些情況下它們的使用可能會有些麻煩,以確保它們可以訪問mysqld服務器。確保這一點的一種簡單方法是docker exec在同一容器中使用和運行該工具,類似於以下內容:
 
$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
 
# 從sql文件還原數據
用於還原數據。您可以使用docker exec帶-i標誌的命令,類似於以下內容:
 
$ docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章