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

k5hmc34c  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(3)|浏览(608)

我是docker的新手,所以不明白-如果我想建立mysql/postgresql/clickhouse等容器-如何创建数据库和数据库/表的模式?也许在dockerfile或者我可以在docker-compose.yml上完成?
我的意思是,我不知道何时何地使用创建数据库;创建表。。。;查询是否使用流行数据库的docker容器

aelbi1ox

aelbi1ox1#

首先,您需要为db服务器创建docker映像,或者使用已经存在的映像。
下面是mysql docker映像的一个例子。

  1. version: "3"
  2. services:
  3. ****************
  4. mysql:
  5. container_name: mysql
  6. image: mysql:5.7
  7. restart: on-failure
  8. environment:
  9. - MYSQL_DATABASE=YOUR_DB_NAME
  10. - MYSQL_ROOT_PASSWORD=YOUR_ROOT_USER_PASSWORD
  11. - MYSQL_USER=YOUR_USER
  12. - MYSQL_PASSWORD=YOUR_USER_PASSWORD
  13. ports:
  14. - "33060:3306"
  15. volumes:
  16. - "./data/db/mysql:/var/lib/mysql"

让我们来描述一些部分:

  1. volumes:
  2. - "./data/db/mysql:/var/lib/mysql"

这就像“安装”容器的 /var/lib/mysql 到系统的 ./data/db/mysql . 因此,您的数据将在系统驱动器上,因为在debian中,mysql数据的默认路径是 /var/lib/mysql .

  1. ports:
  2. - "33060:3306"

这将把端口3306从容器Map到系统的33060端口,以避免在系统上安装mysql服务器时发生冲突。

  1. environment:
  2. - MYSQL_DATABASE=YOUR_DB_NAME
  3. - MYSQL_ROOT_PASSWORD=YOUR_ROOT_USER_PASSWORD
  4. - MYSQL_USER=YOUR_USER
  5. - MYSQL_PASSWORD=YOUR_USER_PASSWORD

这将使用定义的参数创建一个数据库:名称、根密码,…,或者如果数据库已经存在,它将尝试使用定义的凭据进行访问。图像中已经定义了检查/创建数据库的功能。
如果你想定义你自己的功能,你可以定义你的图像(例如。 dockerfile: ./Dockerfile 而不是 image: mysql:5.7 ). dockerfile可以是这样的:

  1. FROM mysql:5.7
  2. ARG MYSQL_DATABASE
  3. ARG MYSQL_USER
  4. ARG MYSQL_PASSWORD
  5. ARG MYSQL_ROOT_PASSWORD
  6. ENV MYSQL_DATABASE=${MYSQL_DATABASE}
  7. ENV MYSQL_USER=${MYSQL_USER}
  8. ENV MYSQL_PASSWORD=${MYSQL_PASSWORD}
  9. ENV MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
  10. # copy predefined config file
  11. COPY configs/default.cnf /etc/mysql/conf.d/
  12. # To be sure that MySQL will not ignore configs
  13. RUN chmod og-w /etc/mysql/conf.d/default.cnf
  14. # DO SOMETHING ELSE YOU WANT
  15. EXPOSE 3306
  16. CMD ["mysqld"]

所以你可以用命令来建立你的容器 docker-compose up -d --build

展开查看全部
jq6vz3qz

jq6vz3qz2#

您可以同时使用docker和docker compose。例如docker compose。
创建一个名为docker-compose.yml的文件,如下所示:

  1. version: '3'
  2. services:
  3. db:
  4. image: percona:5.7
  5. container_name: whatever_you_want
  6. environment:
  7. - MYSQL_DATABASE=${DATABASE}
  8. - MYSQL_ROOT_PASSWORD=${ROOT_PASSWORD}
  9. - MYSQL_USER=${USER}
  10. - MYSQL_PASSWORD=${PASSWORD}
  11. volumes:
  12. - ./data:/docker-entrypoint-initdb.d
  13. ports:
  14. - "3306:3306"

此外,你需要一个文件下 ./data 使用您想要运行的任何sql命令 .env 文件中定义我在 docker-compose.yml 上面的文件如下: ${DATABASE} 你的 .env 文件:

  1. # MySQL
  2. DATABASE=db_name_here
  3. ROOT_USER=root
  4. ROOT_PASSWORD=root
  5. USER=dev
  6. PASSWORD=dev

您的文件包含要执行的sql命令 ./data/init.sql (您可以随意命名文件)

  1. CREATE DATABASE 'whatever';
  2. DROP DATABASE 'whatever';
  3. -- you can do whatever you want here

每次执行以下操作时,都将执行此文件:

  1. docker-compose up -d db
展开查看全部
deikduxw

deikduxw3#

下面是一个使用容器初始化sql server 2017数据库的示例。https://www.handsonarchitect.com/2018/01/build-custom-sql-server-2017-linux.html
诀窍是使用shell脚本来运行,它将调用数据库初始化脚本。在执行初始化脚本之前,可能需要等待几秒钟,数据库引擎服务才能启动。

相关问题