Docker在一个容器中包含多个数据库 [英] Docker compose with multiple databases in one container

查看:152
本文介绍了Docker在一个容器中包含多个数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建Docker容器并将3个数据库导入其中.我尝试使用以下代码:

I want to create Docker container and import 3 databases into it. I've tried with the following code:

version: '3.3'
services:
  web:
    build:
      context: ./php56
      dockerfile: Dockerfile
    container_name: php56
    depends_on:
      - db
    volumes:
      - ../www:/var/www/html/
    ports:
      - 8000:80
  db:
    container_name: mysql
    image: mysql:5.7.21
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dkum
      MYSQL_USER: devuser
      MYSQL_PASSWORD: devpass
    entrypoint:
      sh -c "
        echo 'CREATE DATABASE IF NOT EXISTS dkum_joomla; CREATE DATABASE IF NOT EXISTS dkum_test;' > /docker-entrypoint-initdb.d/init.sql;
        /usr/local/bin/docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
      "
    volumes:
      - ../sql/baze/dkum.sql:/docker-entrypoint-initdb.d/dkum.sql
      - ../sql/baze/dkum_joomla.sql:/docker-entrypoint-initdb.d/dkum_joomla.sql
      - ../sql/baze/dkum_test.sql:/docker-entrypoint-initdb.d/dkum_test.sql
    ports:
      - 6033:3306

此代码仅创建1个数据库(dkum),其中填充了dkum.sql卷中的数据.如果我删除dkum_joomla.sql和dkum_test.sql卷,则它将创建3个数据库(dkum,dkum_joomla和dkum_test),而只有dkum数据库填充了数据.

This code creates only 1 database (dkum) filled with data from the dkum.sql volume. If I remove dkum_joomla.sql and dkum_test.sql volumes then it creates 3 databases (dkum, dkum_joomla and dkum_test) with only dkum database filled with data.

这是我的SQL文件.我稍后再扩展.

Here are my SQL files. I will later expand them.

CREATE TABLE dkum_table (
    DkumID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

dkum_joomla.sql

CREATE TABLE dkum_joomla_table (
    DkumJoomlaID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

dkum_test.sql

CREATE TABLE dkum_test_table (
    DkumTestID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

推荐答案

与其在docker-compose文件中创建其他数据库,不如在SQL文件中创建它们:

Instead of creating additional databases in docker-compose file, just create them in SQL files instead:

version: '3.3'
services:
  web:
    build:
      context: ./php56
      dockerfile: Dockerfile
    container_name: php56
    depends_on:
      - db
    volumes:
      - ../www:/var/www/html/
    ports:
      - 8000:80
  db:
    container_name: mysql
    image: mysql:5.7.21
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dkum
      MYSQL_USER: devuser
      MYSQL_PASSWORD: devpass
    volumes:
      - ../sql/baze/dkum.sql:/docker-entrypoint-initdb.d/dkum.sql
      - ../sql/baze/dkum_joomla.sql:/docker-entrypoint-initdb.d/dkum_joomla.sql
      - ../sql/baze/dkum_test.sql:/docker-entrypoint-initdb.d/dkum_test.sql
    ports:
      - 6033:3306

dkum.sql

CREATE TABLE dkum_table (
    DkumID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

dkum_joomla.sql

CREATE DATABASE IF NOT EXISTS dkum_joomla;
USE dkum_joomla;

CREATE TABLE dkum_joomla_table (
    DkumJoomlaID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

dkum_test.sql

CREATE DATABASE IF NOT EXISTS dkum_test;
USE dkum_test;

CREATE TABLE dkum_test_table (
    DkumTestID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

这篇关于Docker在一个容器中包含多个数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆