如何在数据库docker容器中创建数据库?

时间:2018-02-15 13:07:56

标签: mysql docker docker-compose clickhouse

我是docker中的新手,所以无法理解 - 如果我想构建mysql / postgresql / clickhouse等容器 - 如何创建数据库/表的数据库和模式?也许在Dockerfile或我可以从docker-compose.yml做到这一点?

我的意思是,我不知道何时何地使用CREATE DATABASE;创建表...;查询我是否使用流行数据库的docker容器

3 个答案:

答案 0 :(得分:0)

您可以同时使用docker和docker-compose。例如,使用docker撰写。

创建名为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文件中使用的环境变量,如:{ {1}}

您的${DATABASE}文件:

.env

使用SQL命令执行# MySQL DATABASE=db_name_here ROOT_USER=root ROOT_PASSWORD=root USER=dev PASSWORD=dev 的文件(您可以根据需要命名文件)

./data/init.sql

每次执行此文件时都会执行:

CREATE DATABASE 'whatever';
DROP DATABASE 'whatever';
-- you can do whatever you want here

答案 1 :(得分:0)

以下是我用于使用容器初始化SQL Server 2017数据库的示例。 https://www.handsonarchitect.com/2018/01/build-custom-sql-server-2017-linux.html

诀窍是使用shell脚本来运行,这将调用数据库初始化脚本。在执行初始化脚本之前,您可能需要等待几秒钟才能启动数据库引擎服务。

答案 2 :(得分:0)

首先,您需要为数据库服务器创建一个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

这将创建一个包含已定义参数的数据库:name,root password,...,或者如果数据库已存在,它将尝试使用定义的凭据进行访问。检查/创建数据库的功能已在图像中定义。

如果您想定义自己的功能,可以定义图片(例如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

构建和升级容器