【问题标题】:Create a postgres database in my Dockerfile在我的 Dockerfile 中创建一个 postgres 数据库
【发布时间】:2019-10-23 04:29:52
【问题描述】:

在我的项目中,我有一个像这样的 docker-compose.yml 文件:

version: '3'

networks:
  mynetwork:
    driver: bridge

services:

  postgres:
    restart: always
    image: postgres:11
    ports:
      - "5432:5432"
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:5432"]
        interval: 30s
        timeout: 10s
        retries: 5
    volumes:
      - ./data:/var/lib/postgresql/data

  web:
    build: .
    image: <myrepo>/<mypath>
    command: python /Code/core/manage.py runserver 0.0.0.0:8000
    networks:
      - mynetwork

    ports:
      - "8000:8000"

    depends_on:
      - postgres

现在我将仅使用 Dockerfile 而不是 docker compose 将我的 dockerized 应用程序构建为图像。 我需要一种方法来使用我的 docker 文件创建 postgres db 映像,就像我使用 docker-compose 所做的那样。

我的实际 dockerfile 是:

FROM python:3.6-alpine
RUN apk add --no-cache make linux-headers libffi-dev jpeg-dev zlib-dev
RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev
#RUN apk update && apk add build-essential libssl-dev libffi-dev
RUN mkdir /Code
WORKDIR /Code
COPY ./requirements.txt .

RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV PYTHONUNBUFFERED 1

COPY . /Code/

ENTRYPOINT python /Code/core/manage.py runserver 0.0.0.0:8000

如何从 Dockerfile 创建和启动 postgres db 容器?

提前非常感谢

【问题讨论】:

  • 在 docker-compose 中设置 ENV 就足够了。你需要POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORDhub.docker.com/_/postgres
  • 我想分发我的 docker 镜像,如何添加 postgres 镜像并在 Dockerfile 中设置 ENV?
  • 创建基于 postgres 的 dockerfile 并在 Dockerfile 中定义这三个 env 就像 ENV POSTGRES_USER=tes 其余两个变量一样

标签: postgresql docker docker-compose dockerfile


【解决方案1】:

如果你想避免使用 docker-compose,那么你可以在没有专用 Dockerfile 的情况下启动 postgres 容器。

只要运行:

docker pull postgres:11
docker run -it -rm postgres:11

如果您想要持久性,您可以在docker run 命令中指定卷。

如果您将类似的内容放入 Makefile,您可以使用 Makefile 自动执行此操作:

run:
    docker pull postgres:11 && \
    docker run -it -rm \
        --mount type=bind,source=/path/to/your/local/postgres/data,target=/var/lib/postgresql \
        -e POSTGRES_PASSWORD='secret' \
        postgres:11

然后你可以像这样启动你的d​​ocker:

make run

Makefile 很好,因为您可以存储所有特定配置(如提到的卷挂载),但同时与 docker-compose 相比,它们感觉有点错位:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多