我使用Docker设置了一个django项目,它有两个容器,一个用于django
服务器,一个用于postgres
服务器。我希望能够为此项目执行不同的操作,例如运行bash脚本和perl脚本,例如,我需要使用bash脚本自动从实时站点下载和恢复数据库转储。我是否为每个bash脚本设置了一个新的Docker镜像?或者我需要设置一个Ubuntu容器并通过它运行bash脚本?
继承人Dockerfile:
FROM python:3.5
ENV PYTHONBUFFERED 1
ENV APPLICATION_ROOT /app/
ENV APP_ENVIRONMENT L
COMPOSE_CONVERT_WINDOWS_PATHS=1
RUN mkdir -p $APPLICATION_ROOT
WORKDIR $APPLICATION_ROOT
ADD requirements.txt $APPLICATION_ROOT
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . $APPLICATION_ROOT
docker-compose文件:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8998:8998"
links:
- db
db:
image: postgres:9.4
environment:
APP_ENVIRONMENT: L
POSTGRES_USER: postgres
POSTGRES_PASSWORD: root
POSTGRES_DB: mydb
我是Docker的新手,所以还不知道做事的最佳方法。我将把bash脚本和新的docker文件放在哪里,以及如何将它链接到这个项目,以便我可以在项目运行时执行脚本?我可以通过几种方式实现这一点,我可以创建一个bash容器,并使用它来运行脚本。或者我可以创建一个基于bash图像构建的容器,该容器包含我需要的所有脚本,或者我可以为每个脚本创建一个容器。我可能需要在这些bash脚本旁边运行perl
或awk
或expect
,所以在这种情况下,我只是将每个图像导入到容器中吗?
答案 0 :(得分:1)
你有一些错误概念:
ADD
或COPY
将其置于容器中,然后CMD
执行脚本。这将在容器内执行,因此会影响其状态。有关如何使用这些命令的详细信息,请查看Dockerfile reference。