我是 docker 新手,所以无法理解 - 如果我想构建 mysql/postgresql/clickhouse 等容器 - 如何创建数据库和数据库/表的架构?也许在 Dockerfile 中,或者我可以从 docker-compose.yml 中完成?
我的意思是,我不知道何时何地使用 CREATE DATABASE;创建表...; 查询我是否使用流行数据库的 docker 容器
我是 docker 新手,所以无法理解 - 如果我想构建 mysql/postgresql/clickhouse 等容器 - 如何创建数据库和数据库/表的架构?也许在 Dockerfile 中,或者我可以从 docker-compose.yml 中完成?
我的意思是,我不知道何时何地使用 CREATE DATABASE;创建表...; 查询我是否使用流行数据库的 docker 容器
您可以同时使用 docker 和 docker-compose。例如使用 docker compose。
创建一个名为 docker-compose.yml 的文件,例如:
version: '3'
services:
db:
image: percona:5.7
container_name: whatever_you_want
environment:
- MYSQL_DATABASE=${DATABASE}
- MYSQL_ROOT_PASSWORD=${ROOT_PASSWORD}
- MYSQL_USER=${USER}
- MYSQL_PASSWORD=${PASSWORD}
volumes:
- ./data:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
此外,您需要一个文件,./data
其中包含您要运行的任何 SQL 命令,以及.env
定义我在上面文件中使用的环境变量的docker-compose.yml
文件,例如:${DATABASE}
你的.env
文件:
# MySQL
DATABASE=db_name_here
ROOT_USER=root
ROOT_PASSWORD=root
USER=dev
PASSWORD=dev
带有要执行的 SQL 命令./data/init.sql
的文件(您可以随意命名文件)
CREATE DATABASE 'whatever';
DROP DATABASE 'whatever';
-- you can do whatever you want here
每次执行此操作时都会执行此文件:
docker-compose up -d db
首先,您需要为您的数据库服务器创建 docker 映像,或者使用已经存在的映像。
Bellow 是mysql docker image 的一个例子。
version: "3"
services:
****************
mysql:
container_name: mysql
image: mysql:5.7
restart: on-failure
environment:
- MYSQL_DATABASE=YOUR_DB_NAME
- MYSQL_ROOT_PASSWORD=YOUR_ROOT_USER_PASSWORD
- MYSQL_USER=YOUR_USER
- MYSQL_PASSWORD=YOUR_USER_PASSWORD
ports:
- "33060:3306"
volumes:
- "./data/db/mysql:/var/lib/mysql"
让我们描述一些部分:
volumes:
- "./data/db/mysql:/var/lib/mysql"
这就像将容器“安装”/var/lib/mysql
到系统的./data/db/mysql
. 所以您的数据将在您的系统驱动器上,因为在 debian 中 MySQL 数据的默认路径是/var/lib/mysql
.
ports:
- "33060:3306"
这会将端口 3306 从容器映射到系统的 33060 端口,以避免在系统上安装 MySQL 服务器时发生冲突。
environment:
- MYSQL_DATABASE=YOUR_DB_NAME
- MYSQL_ROOT_PASSWORD=YOUR_ROOT_USER_PASSWORD
- MYSQL_USER=YOUR_USER
- MYSQL_PASSWORD=YOUR_USER_PASSWORD
这将使用定义的参数创建一个数据库:名称、root 密码、...,或者如果数据库已经存在,它将尝试使用定义的凭据进行访问。检查/创建数据库的功能已在映像中定义。
如果您想定义您自己的功能,您可以定义您的图像(例如dockerfile: ./Dockerfile
,代替image: mysql:5.7
)。Dockerfile 可以是这样的:
FROM mysql:5.7
ARG MYSQL_DATABASE
ARG MYSQL_USER
ARG MYSQL_PASSWORD
ARG MYSQL_ROOT_PASSWORD
ENV MYSQL_DATABASE=${MYSQL_DATABASE}
ENV MYSQL_USER=${MYSQL_USER}
ENV MYSQL_PASSWORD=${MYSQL_PASSWORD}
ENV MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
# copy predefined config file
COPY configs/default.cnf /etc/mysql/conf.d/
# To be sure that MySQL will not ignore configs
RUN chmod og-w /etc/mysql/conf.d/default.cnf
# DO SOMETHING ELSE YOU WANT
EXPOSE 3306
CMD ["mysqld"]
因此,您可以使用命令构建和构建容器docker-compose up -d --build
这是我使用容器初始化 SQL Server 2017 数据库的示例。 https://www.handsonarchitect.com/2018/01/build-custom-sql-server-2017-linux.html
诀窍是使用 shell 脚本运行,该脚本将调用数据库初始化脚本。在执行初始化脚本之前,您可能需要等待几秒钟才能启动数据库引擎服务。