如何使用docker-compose在CI上构建应用程序?

时间:2019-08-14 09:34:39

标签: docker docker-compose

我想配置一个TravisCI之类的CI,以便从Docker构建我的应用程序。我的应用程序有两部分:Javascript和Python。

我想用docker-compose来做到这一点:

version: '3'
services:
  node:
    image: node:12.8.0-buster
    volumes:
    - .:/srv
  python:
    image: python:3.7.4-buster
    volumes:
    - .:/src

我想要一个Makefile,例如:

all: foo bar

foo:
    docker-compose exec node /bin/bash -c ' \
        cd /workdir; \
        npm install; \
        npm run build'

bar: 
    docker-compose exec python /bin/bash -c ' \
    cd /workdir; \
    pip install sphinx; \
    make html'

使用docker compose这样正确吗?而我应该进行哪些更改才能使其正常工作?

1 个答案:

答案 0 :(得分:1)

docker compose不仅支持容器运行,还支持映像构建,请参见this

因此,对于您的情况,您应该在Dockerfile中添加程序包构建,并使用docker-compose up -d --build执行它,这将首先构建docker映像,然后在新的docker映像上启动服务。 / p>

接下来是一个简单的伪代码,接下来的注释只是为了解释主要思想,而不是一个完全可行的示例,您需要根据实际情况添加内容。

Dockerfile.node:

FROM node:12.8.0-buster

# Add related to build
ADD . /srv

# Add all package install
RUN cd /workdir && npm install && npm run build

# Others
......

Dockerfile.python:

FROM python:3.7.4-buster

# Add related to build
ADD . /srv

# Add all package install
RUN cd /workdir && pip install sphinx && make html

# Others
......

docker-compose.yaml:

version: '3'
services:
  node:
    build:
      context: .
      dockerfile: Dockerfile.node
    volumes:
    - .:/srv
  python:
    build:
      context: .
      dockerfile: Dockerfile.python
    volumes:
    - .:/src