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