背景
試想一下這種情況,你負責(zé)的某個項目數(shù)據(jù)源有SQL Server、Oracle和MySQL,假設(shè)現(xiàn)在不讓你訪問生產(chǎn)庫,也沒有測試庫給你用,你就只有一臺開發(fā)電腦,要你做開發(fā)你怎么做?
你肯定會說,這問題還不簡單嗎?在開發(fā)電腦上安裝這些數(shù)據(jù)庫不就行了?答案是可以,但是偏題了嘛,你要在一臺電腦上同時裝SQL Server、Oracle和MySQL,能做到秒級?起碼得廢半天勁兒吧
話說n年前我也遇到過這種需求,必須得在我那破筆記本上裝個SQL Server,裝完占用硬盤10G多,用了一上午才裝完,都不用干活兒了,等就完事,卸載還可能卸載不干凈
我們的核心需求是搭建個測試環(huán)境,或者臨時用一下,就不用過多優(yōu)化,一個字,快就完事了,那么有秒級搭建的方法么?
有,下面Docker上場,docker是什么就不用過多介紹了,以前寫了很多篇文章介紹,注意,docker是全平臺支持的,但是如果是在非linux環(huán)境下,我建議先裝個Linux虛擬機,然后在虛擬機里面裝docker,這么做的原因是非Linux環(huán)境下發(fā)行的docker desktop其實也是自己內(nèi)置了一個Linux虛擬機,一個手動擋,一個自動擋的區(qū)別,我建議你用自動擋,這樣更清楚原理一些
如果你還沒有安裝docker,先裝一個吧,我以前寫過一篇全平臺安裝docker的文章【史上最全(全平臺)docker安裝方法!】,可以作為參考
- windows:https://docs.docker.com/docker-for-windows/install/
- mac OS:https://docs.docker.com/docker-for-mac/install/
- Linux:https://docs.docker.com/engine/install/
在docker下搭建至少有兩個好處
- 快速啟動
- 資源隔離
SQLServer
dockerhub參考:
https://hub.docker.com/_/microsoft-mssql-server
這是微軟官方出品的基于Ubuntu的SQL Server docker鏡像,看下最新版鏡像大小(2021-04-30),1.49G,真香
mcr.microsoft.com/mssql/server latest 62c72d863950 3 weeks ago 1.49GB
秒級啟動命令:
# 啟動SQL Server,如果是Docker Desktop要把單引號改成雙引號
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSword=yourStrong(!)Password' -e 'MSSQL_PID=Developer' -p 1433:1433 -d --name MSSQL_1433 mcr.microsoft.com/mssql/server
# 進入容器內(nèi)
docker exec -it MSSQL_1433 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P yourStrong(!)Password
# 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE testDB
go
然后就可以用下面這套參數(shù)連接數(shù)據(jù)庫了
主機:127.0.0.1
端口:1433
數(shù)據(jù)庫:testDB
用戶名:sa
密碼:yourStrong(!)Password
下面是環(huán)境變量的解釋
- ACCEPT_EULA:全稱Accept End-User Licensing Agreement,接收最終用戶許可證協(xié)議,必須得接收嘛,不然微軟不給你用
- SA_PASSWORD:全稱System Administrator Password,系統(tǒng)管理員密碼,密碼必須是8位以上的大小寫字母和數(shù)字/特殊符號的組合。
- MSSQL_PID:全稱Microsoft SQL Server Product Id,SQL Server的產(chǎn)品ID,默認是Developer
產(chǎn)品ID還可以是以下這些值
- Developer : 默認值,以開發(fā)版運行
- Express : 以學(xué)習(xí)版運行
- Standard : 以標準版運行
- Enterprise : 以企業(yè)版運行
- EnterpriseCore : 以企業(yè)核心版運行
完整的環(huán)境變量可以參考此處:
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-environment-variables?view=sql-server-2017
Oracle
Oracle數(shù)據(jù)庫有Express Edition(精簡版,簡稱xe)和Enterprise Edition(企業(yè)版,簡稱ee),xe版本我沒找到任何官方的鏡像,ee倒是有Oracle官方鏡像,但是要使用的話必須填下面這玩意兒,emmmm,還是算了吧,這一點也不符合我們的題意:秒級
搜索大法好,找個評分高的鏡像
docker search Oracle
NAME STARS
oraclelinux 756
jaspeen/oracle-11g 172
oracleinanutshell/oracle-xe-11g 155
wnameless/oracle-xe-11g-r2 59
absolutApps/oracle-12c-ee 48
通過搜索發(fā)現(xiàn)jaspeen/oracle-11g 和
oracleinanutshell/oracle-xe-11g評分高,前者我看過了比較繁瑣,也不符合我們的題意,那就
oracleinanutshell/oracle-xe-11g吧
dockerhub參考:
https://hub.docker.com/r/oracleinanutshell/oracle-xe-11g
看下下載的鏡像有多大,2.13G,體積還是挺大的
oracleinanutshell/oracle-xe-11g latest ad13c30ec346 2 years ago 2.13GB
秒級啟動命令:
# 啟動Oracle 11g xe,如果是Docker Desktop要把單引號改成雙引號
# ORACLE_ALLOW_REMOTE表示允許遠程連接
docker run -d --name ORACLE_1521 -p 1521:1521 -e 'ORACLE_ALLOW_REMOTE=true' oracleinanutshell/oracle-xe-11g
然后就可以用下面這套參數(shù)連接數(shù)據(jù)庫了
主機:127.0.0.1
端口:1521
sid:xe
用戶名:system
密碼:oracle
當然,一般而言不能用system賬號連數(shù)據(jù)庫,下面是創(chuàng)建賬號一把梭流程
-- 創(chuàng)建用戶myuser,密碼password
create user myuser identified by password;
-- 分配表空間權(quán)限
grant create table,unlimited tablespace to myuser;
-- 分配查詢權(quán)限
grant select any table to myuser;
-- 分配增刪改權(quán)限
grant update any table,drop any table,insert any table to myuser;
-- 分配創(chuàng)建session權(quán)限(登陸)
grant create session to myuser;
MySQL
MySQL就好說多了,官方鏡像一堆一堆的,任君挑選,5.X和8.X都有
dockerhub參考:
https://hub.docker.com/_/mysql
看下下載的鏡像有多大,447M和556M,不大不小
mysql 5.7.34 87eca374c0ed 10 days ago 447MB
mysql 8.0.24 0627ec6901db 10 days ago 556MB
秒級啟動命令:
# 啟動MySQL 5,如果是Docker Desktop要把單引號改成雙引號
docker run --name MYSQL_3306 -p 3306:3306 -e 'MYSQL_ROOT_PASSWORD=my-secret-pw' -d mysql:5.7.34
如果需要MySQL 8.X,直接改tag就可以了
# 啟動MySQL 8,如果是Docker Desktop要把單引號改成雙引號
docker run --name MYSQL_3306 -p 3306:3306 -e 'MYSQL_ROOT_PASSWORD=my-secret-pw' -d mysql:8.0.24
然后就可以用下面這套參數(shù)連接數(shù)據(jù)庫了
主機:127.0.0.1
端口:3306
數(shù)據(jù)庫:(可為空)
用戶名:root
密碼:my-secret-pw
PostgreSQL
dockerhub參考:
https://hub.docker.com/_/postgres
秒級啟動命令:
# 啟動PostgreSQL,如果是Docker Desktop要把單引號改成雙引號
docker run --name POSTGRES_5432 -p 5432:5432 -e 'POSTGRES_PASSWORD=mysecretpassword' -d postgres
然后就可以用下面這套參數(shù)連接數(shù)據(jù)庫了
主機:127.0.0.1
端口:5432
數(shù)據(jù)庫:(可為空)
用戶名:postgres
密碼:mysecretpassword






