如何创建数据库搬运工容器数据库?

问题描述 投票:2回答:3

我在泊坞窗新的,所以无法理解 - 如果我想建立的容器的MySQL / PostgreSQL的/ clickhouse等 - 如何创建数据库/表的数据库和模式?也许在Dockerfile或者我可以从码头工人,compose.yml办呢?

我的意思是,我不知道何时何地使用CREATE DATABASE; CREATE TABLE ...;查询如果我使用流行的数据库Docker容器

mysql docker docker-compose clickhouse
3个回答
0
投票

这里是我以前使用的容器来初始化的SQL Server数据库2017年的例子。 https://www.handsonarchitect.com/2018/01/build-custom-sql-server-2017-linux.html

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


0
投票

首先,你需要创建一个码头工人的形象你的数据库服务器,或者使用已经存在的图像。

波纹管是MySQL的搬运工图像的一个例子。

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


0
投票

您可以使用这两个码头工人和码头工人,撰写。例如用搬运工撰写。

创建一个名为泊坞窗,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文件中使用的环境变量下.env文件,不管你想运行和SQL命令和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
© www.soinside.com 2019 - 2024. All rights reserved.