文章目錄
- 1、拉取鏡像
- 2、運行容器
- 3、進入容器
- 方式一
- 方式二
- 方式三
- 容器進入后連接mysql和在宿主機連接mysql的區別
- 持久化數據
- 持久化數據最佳實踐
1、拉取鏡像
docker pull mysql
2、運行容器
docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 3307:3306
:將主機的3307端口映射到容器的3306端口,因為我主機還有一個 mysql 使用了 3306。
-d
:后臺運行
--name mysql-container
:給容器起一個名字叫 mysql-container
-e MYSQL_ROOT_PASSWORD=123456
: 設置 MySQL 的 root 用戶密碼
mysql:latest
: 使用 MySQL 鏡像,并指定使用最新版本。你也可以指定特定版本號,例如 mysql:8.0。
執行后會生成一串 hash,也就是這個容器的 id,然后我們使用 docker ps
查看所有容器的運行狀況
3、進入容器
方式一
docker exec -it mysql-container /bin/bash
mysql -u root -p
-it 是 Docker 命令中用于設置交互式終端的參數。具體含義如下:
-i: 表示保持標準輸入打開,即允許你通過鍵盤輸入。
-t: 表示分配一個偽終端(pseudo-TTY),即為容器分配一個偽終端設備。
方式二
你也可以直接運行命令
docker exec -it mysql-container mysql -uroot -p
退出一般使用 exit 或者 quit
方式三
直接在客戶端遠程連接,這里注意要指定端口號為 3307
mysql -h 127.0.0.1 -P 3307 -u root -p
直接用一些客戶端工具,注意這里的端口號填寫剛剛設置的端口號
容器進入后連接mysql和在宿主機連接mysql的區別
可以看到,方式一和方式二是進入容器后才連接的mysql,方式三是在宿主機連接的 mysql,那么有什么不同嗎?
容器環境隔離:
進入容器并在容器內運行 MySQL 客戶端命令可以讓你直接與容器內的 MySQL 服務進行交互。這有助于在容器環境中調試和執行數據庫相關操作。
數據卷掛載:
如果容器內使用了數據卷掛載(Volume Mounting),即容器內的 MySQL 數據存儲在宿主機上的某個目錄,你可能需要進入容器來查看或操作這些數據。
容器內環境:
有時容器內可能配置有一些特定的環境或工具,進入容器可以方便你直接使用這些環境。
執行其他容器內操作:
進入容器還允許你執行其他容器內的操作,例如查看容器內部的文件結構、執行腳本等。
然而,在一些簡單的情況下,直接在宿主機上使用 MySQL 客戶端連接容器內的 MySQL 服務也是可行的。這通常適用于只需要執行一些簡單的查詢或操作而不涉及到容器內部的詳細環境時。
持久化數據
我們修改一下運行容器的命令,添加 -v 參數
docker run -d -p 3307:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -v /Users/zhangyu/web/web-all/mysql-all/docker-sourcedata:/var/lib/mysql mysql
-v /Users/zhangyu/web/web-all/mysql-all/docker-sourcedata:/var/lib/mysql
:使用數據卷將 MySQL 數據目錄 (/var/lib/mysql) 映射到宿主機的一個路徑 (/Users/zhangyu/web/web-all/mysql-all/docker-sourcedata)。這樣做可以使 MySQL 數據持久化,即使容器停止和刪除后,數據仍然保存在宿主機上。
可以看到我運行完之后,立馬就有初始化的數據了,而且我刪除這個容器后數據依然存在宿主機目錄
但是這樣做,如果我已經啟動了一個容器,數據庫也使用了,那么我必須刪除掉這個容器才能重新啟動和這個一樣的,因為在 Docker 中,一旦容器啟動,通常來說,其文件系統和數據是在容器內部的。有一個比較好的實踐是這樣的
持久化數據最佳實踐
1、創建一個數據卷容器:
docker run --name mysql-data-container -v /path/to/mysql/data:/var/lib/mysql busybox
這個命令創建了一個名為 mysql-data-container 的容器,并將宿主機上的 /path/to/mysql/data 目錄掛載到容器內的 /var/lib/mysql。這樣,mysql-data-container 將成為一個專門用于持久化 MySQL 數據的數據卷容器。
2、創建一個 MySQL 容器并掛載數據卷:
docker run --name mysql-container --volumes-from mysql-data-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:latest
這個命令啟動了一個名為 mysql-container 的 MySQL 容器,并使用了 --volumes-from 參數,將 mysql-data-container 的數據卷掛載到了 MySQL 容器中。
–volumes-from:用于將容器的卷掛載到另一個容器的參數。
語法:docker run --volumes-from <source_container> ...
這種方法允許你在容器已經啟動的情況下為其添加數據卷。請注意,在 Docker 中,一旦容器啟動后,其文件系統通常是不可更改的,因此通過這種方式掛載數據卷是一種常見的實踐。