目录
背景
在设置新项目时,有时会有一个完整的先决条件列表才能运行该项目,这可能会导致我们使用多个数据库甚至不同版本。Docker非常适合在开发环境中运行本地数据库。在这里,我们将探索在docker中设置多个数据库和GUI客户端的docker-compose.yml文件。考虑到多个数据库,这将是一个非常快速和基本的循环。
我们需要的东西
- 本地安装的Docker
- 基本的Docker知识
- 使用数据库的体验
- 使用GUI客户端的体验
PostgreSQL
数据库:PostgreSQL
GUI客户端:pgAdmin
这将创建一个在Db实例中命名为postgres的数据库,其中包含凭据admin和secret
version: "3.7"
services:
pgsql:
image: postgres:12.2
container_name: PostgreSQL
restart: always
environment:
POSTGRES_DB: postgres
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
PGDATA: /var/lib/postgresql/data
volumes:
- pgsql-data:/var/lib/postgresql/data
ports:
- 5010:5432
pgadmin:
image: dpage/pgadmin4:4.18
container_name: PgAdmin
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: secret
PGADMIN_LISTEN_PORT: 80
ports:
- 5011:80
volumes:
- pgadmin-data:/var/lib/pgadmin
links:
- pgsql:pgsql-server
volumes:
pgsql-data:
pgadmin-data:
客户端
pdAdmin将在http://localhost:5011/login获取
admin@admin.com和secret作为凭证。
访问数据库
主机名或服务器作为数据库容器名称PostgreSQL
端口5432
数据库凭据admin和secret
MySQL
数据库:MySQL
GUI客户端:phpMyAdmin
这将创建一个在Db实例中命名为quotes的数据库,其中包含凭据citizix_user和An0thrS3crt
version: "3.7"
services:
mysql:
image: mysql:8.0
container_name: MySQL
restart: always
cap_add:
- SYS_NICE
environment:
- MYSQL_DATABASE=quotes
- MYSQL_USER=citizix_user
- MYSQL_PASSWORD=An0thrS3crt
- MYSQL_ROOT_PASSWORD=mauFJcuf5dhRMQrjj
volumes:
- mysql-data:/var/lib/mysql
ports:
- 5012:3306
phpmyadmin:
image: phpmyadmin:5.2.0
container_name: PhpMyAdmin
restart: always
ports:
- 5013:80
environment:
- PMA_ARBITRARY=1
volumes:
mysql-data:
另一个GUI客户端:MySQL工作台
version: "3.7"
services:
mysql-workbench:
image: lscr.io/linuxserver/mysql-workbench:8.0.29
container_name: MySQL-Workbench
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
volumes:
- mysql-workbench-data:/config
ports:
- 5014:3000
cap_add:
- IPC_LOCK
restart: unless-stopped
volumes:
mysql-workbench-data:
作为数据库容器名称的服务器名称MySQL和其他数据库凭据
客户端
PhpMyAdmin将在http://localhost:5013/获取
访问数据库
作为数据库容器名称的服务器名称MySQL
数据库凭据citizix_user和An0thrS3crt
MongoDB
数据库:蒙戈数据库
图形用户界面客户端:Nosqlclient
这将在Db实例中创建一个名为chats的数据库,而无需凭据
version: '3.7'
services:
mongo:
image: mongo:4.4.2
container_name: MongoDB
restart: always
environment:
- MONGO_INITDB_DATABASE=chats
ports:
- 5015:27017
volumes:
- mongodb-data:/data/db
mongo_client:
image: mongoclient/mongoclient:4.0.1
container_name: Nosqlclient
restart: always
depends_on:
- mongo
ports:
- 5016:3000
volumes:
mongodb-data:
客户端
Nosqlclient将在http://localhost:5016/获取
访问数据库
作为数据库容器名称的主机名MongoDB
端口27017
我们也可以使用连接字符串,例如mongodb://userName:password@containerName:27017/dbname
Oracle
数据库:Oracle
GUI 客户端:CloudBeaver
这将创建一个具有凭据的Db实例
version: '3.7'
services:
oracle:
image: wnameless/oracle-xe-11g-r2:18.04-apex
container_name: OracleDb
restart: always
environment:
- ORACLE_ALLOW_REMOTE=true
- ORACLE_DISABLE_ASYNCH_IO=true
- ORACLE_ENABLE_XDB=true
ports:
- 5019:1521
- 5020:8080
dbeaver:
image: dbeaver/cloudbeaver:22.1.1
container_name: CloudBeaver
restart: unless-stopped
volumes:
- dbeaver-data:/opt/cloudbeaver/workspace
ports:
- 5021:8978
volumes:
dbeaver-data:
Oracle APEX
http://localhost:5020/apex/apex_admin
用户名:ADMIN
密码:Oracle_11g
客户端
CloudBeaver将在http://localhost:5021/获取
最初,它会要求设置凭据,所以我使用了adminuser和adminpass
访问数据库
作为数据库容器名称的主机名OracleDb
端口1521
Db或sid xe
数据库凭据system和oracle
SQLServer
数据库:SQLServer
GUI客户端:CloudBeaver
这将创建一个具有凭据的Db实例
version: '3.7'
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2019-latest
container_name: SQLServer
restart: always
environment:
- ACCEPT_EULA=Y
- MSSQL_PID=Express
- SA_PASSWORD=MyPass@word #user sa
#volumes:
#- sqlserver-data:/var/opt/mssql/data #not working in windows
#- "./sqlserver-data/:/var/opt/mssql/data" #this working in windows
ports:
- 5017:1433
客户端
与Oracle相同
访问数据库
作为数据库容器名称的主机名SQLServer
端口1433
数据库(默认)master
数据库凭据sa和MyPass@word
使用Management Studio访问数据库
服务器名称localhost, 5017
凭据sa和MyPass@word
设置TrustServerCertificate=True(https://stackoverflow.com/a/50504551/2948523)
MariaDB
数据库:MariaDB
这将创建一个在Db实例中命名为quotes的数据库,其中包含凭据citizix_user和An0thrS3crt
version: "3.7"
services:
maria:
image: mariadb:10.6
container_name: MariaDB
restart: always
environment:
- MARIADB_DATABASE=quotes
- MARIADB_USER=citizix_user
- MARIADB_PASSWORD=An0thrS3crt
- MARIADB_ROOT_PASSWORD=mauFJcuf5dhRMQrjj
volumes:
- maria-data:/var/lib/mysql
ports:
- 5018:3306
volumes:
maria-data:
客户端
PhpMyAdmin或CloudBeaver
访问数据库
作为数据库容器名称的服务器名称MariaDB
数据库凭据citizix_user和An0thrS3crt
其他
命令
PostgreSQL
docker-compose -f docker-compose.pgsql.yml up -d
MySQL
docker-compose -f docker-compose.mysql.yml up -d
docker-compose -f docker-compose.mysql.workbench.yml up -d
MongoDB
docker-compose -f docker-compose.mongo.yml up -d
SQLServer
docker-compose -f docker-compose.sqlserver.yml up -d
MariaDB
docker-compose -f docker-compose.maria.yml up -d
Oracle
docker-compose -f docker-compose.oracle.yml up -d
端口
5010, 5011 pgsql
5012, 5013, 5014 mysql
5015, 5016 mongo
5017 sqlserver
5018 maria
5019, 5020, 5021 oracle
检查数据库版本
以下是一些用于检查工作数据库版本的SQL查询:
SELECT @@VERSION; /*sql server*/ /*also works with mysql*/
SELECT * FROM V$VERSION; /*oracle*/
SELECT VERSION(); /*mysql*/ /*also works with postgre*/
SELECT VERSION(); /*mariadb*/
SELECT VERSION(); /*postgre sql*/ /*also works with mysql*/
在线游乐场
https://www.codeproject.com/Tips/5336563/Run-Database-and-GUI-Clients-in-Docker