Docker - 在Windows主机

时间:2017-01-11 17:38:03

标签: django bash perl docker

我使用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脚本旁边运行perlawkexpect,所以在这种情况下,我只是将每个图像导入到容器中吗?

1 个答案:

答案 0 :(得分:1)

你有一些错误概念:

  1. 每个容器只加载一个图像。容器运行该映像的实例。将容器视为包含的虚拟机,将图像视为操作系统。
  2. 您不希望每个脚本有一个容器。包含容器,如果您在其中一个中运行脚本,它将不会影响另一个容器。当然,你可以拥有许多ubuntu图像,但它对你想要做的事情没有意义。将容器视为必须执行任务的服务(运行数据库,托管网页等);它必须包含所需的一切内容。
  3. 如果需要在容器中运行脚本,则必须首先使用Dockerfile中的ADDCOPY将其置于容器中,然后CMD执行脚本。这将在容器内执行,因此会影响其状态。有关如何使用这些命令的详细信息,请查看Dockerfile reference