首先你需要为你的数据库服务器创建一个镜像,或者使用一个已经存在的镜像。
下面是一个mysql docker镜像示例。
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 构建和构建您的容器