postgresql - 在我的 Dockerfile 中创建一个 postgres 数据库
问题描述
在我的项目中,我有一个像这样的 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,那么你可以在没有专用 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
然后你可以像这样启动你的docker:
make run
Makefile 很好,因为您可以存储所有特定配置(如提到的卷挂载),但同时与 docker-compose 相比,它们感觉有点放错地方:-)
推荐阅读
- android - TextView 高度与RelativeLayout 相同
- android - 以下任务之间的循环依赖:
- android - 将选定的音频 mp3 文件设置为铃声
- javascript - 我收到一个错误,因为 Uncought 语法错误:标识符“i”已在我的 js 代码中声明
- angular - Ngx Bootstrap 下拉菜单无法在 ag 网格中显示完整列表
- linux - 在 vim 缩写中定义 linux 命令
- javascript - 无法更改源自 Android 原生基础的选取器元素的字体大小和字体粗细
- amazon-cloudformation - 如何在从控制台构建的现有服务上执行基础架构代码?
- python - 从 n m 列数据帧创建 m n 列数据帧
- r - 如何重新排列R中的列元素?