簡體   English   中英

如何在數據庫docker容器中創建數據庫?

[英]How to create database in database docker container?

我是docker中的新手,所以無法理解 - 如果我想構建mysql / postgresql / clickhouse等容器 - 如何創建數據庫/表的數據庫和模式? 也許在Dockerfile或我可以從docker-compose.yml做到這一點?

我的意思是,我不知道何時何地使用CREATE DATABASE; 創建表...; 查詢我是否使用流行數據庫的docker容器

您可以使用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文件中使用的環境變量,如: ${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

這是我用於使用容器初始化SQL Server 2017數據庫的示例。 https://www.handsonarchitect.com/2018/01/build-custom-sql-server-2017-linux.html

訣竅是使用shell腳本來運行,它將調用數據庫初始化腳本。 在執行初始化腳本之前,您可能需要等待幾秒鍾才能啟動數據庫引擎服務。

首先,您需要為數據庫服務器創建一個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構建和升級容器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM