背景
在建立一个新项目时,有时会有一个完整的先决条件列表才能运行该项目,这可能导致我们使用多个数据库甚至不同的版本。Docker 非常适合在开发环境中运行本地数据库。在这里,我们将探索 docker-compose.yml
文件以在 docker 中设置多个 DB 和 GUI 客户端。考虑到多个数据库,这将是一个非常快速和基本的遍历。
我们需要的东西
- 本地安装的 Docker
- 码头工人基础知识
- 使用数据库的经验
- 使用 GUI 客户端的经验
PostgreSQL
数据库: PostgreSQL
图形用户界面客户端: pgAdmin
这将创建一个postgres
在 Db 实例中命名的数据库,其中包含凭据 admin
和 secret
<span style="color:#000000"><span style="background-color:#fbedbb">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:</span></span>
客户
pdAdmin 将在 http://localhost:5011/login
admin@admin.com
并secret
作为凭证。
访问数据库
主机名或服务器作为数据库容器名称 PostgreSQL
港口 5432
数据库凭据admin
和secret
MySQL
数据库: MySQL
图形用户界面客户端: phpMyAdmin
这将创建一个quotes
在 Db 实例中命名的数据库,其中包含凭据 citizix_user
和 An0thrS3crt
<span style="color:#000000"><span style="background-color:#fbedbb">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:</span></span>
另一个 GUI 客户端: MySQL Workbench
<span style="color:#000000"><span style="background-color:#fbedbb">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:</span></span>
服务器名称作为数据库容器名称 MySQL
和其他数据库凭据
客户
PhpMyAdmin 将在 http://localhost:5013/
访问数据库
服务器名称作为数据库容器名称 MySQL
数据库凭据citizix_user
和 An0thrS3crt
MongoDB
数据库: MongoDB
GUI客户端: Nosqlclient
这将在没有凭据的 Db 实例中创建一个名为 chats 的数据库
<span style="color:#000000"><span style="background-color:#fbedbb">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:</span></span>
客户
Nosqlclient 将在 http://localhost:5016/
访问数据库
主机名作为数据库容器名称 MongoDB
港口 27017
我们也可以使用像 mongodb://userName:password@containerName:27017/dbname 这样的连接字符串
甲骨文
数据库: 甲骨文
图形用户界面客户端: CloudBeaver
这将创建一个带有凭据的 Db 实例
<span style="color:#000000"><span style="background-color:#fbedbb">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:</span></span>
甲骨文 APEX
http://localhost:5020/apex/apex_admin
用户名:ADMIN
密码:Oracle_11g
客户
CloudBeaver 将在 http://localhost:5021/
最初,它会要求设置一个凭据,所以我使用 adminuser
和adminpass
访问数据库
主机名作为数据库容器名称 OracleDb
港口 1521
db 或 sid xe
数据库凭据system
和 oracle
SQL服务器
数据库: SQLServer
图形用户界面客户端: CloudBeaver
这将创建一个带有凭据的 Db 实例
<span style="color:#000000"><span style="background-color:#fbedbb">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</span></span>
客户
和甲骨文一样
访问数据库
主机名作为数据库容器名称 SQLServer
港口 1433
数据库(默认) master
数据库凭据sa
和 MyPass@word
使用 Management Studio 访问数据库
服务器名称 localhost, 5017
凭证sa
和 MyPass@word
设置 TrustServerCertificate = True ( "The certificate chain was issued by an authority that is not trusted" when connecting DB in VM Role from Azure website - Stack Overflow )