加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在使用Docker Compose时有效地重建项目?

发布时间:2020-12-16 03:53:05 所属栏目:安全 来源:网络整理
导读:这可能是一个愚蠢的问题,但我是使用Docker-compose的新手.到目前为止,我喜欢它但我有一些很长的构建时间.我有一个包含多个依赖项的项目,每次进行更改时我都需要显然重建源代码.现在,我正在调用docker-compose构建来重建容器,然后是docker-compose.问题是:

这可能是一个愚蠢的问题,但我是使用Docker-compose的新手.到目前为止,我喜欢它…但我有一些很长的构建时间.我有一个包含多个依赖项的项目,每次进行更改时我都需要显然重建源代码.现在,我正在调用docker-compose构建来重建容器,然后是docker-compose.问题是:

>它正在为源代码的每次更改重建整个容器(这需要很长时间 – 获取依赖项/等).这显着减慢了我的速度.
>我真的觉得我应该能够在容器上运行命令来重建然后重新运行可执行文件,就像这样:

docker-compose run web go build .
docker-compose run web ./app

?要么

docker-compose run web go build .
docker-compose restart

??这应该工作,因为我使用卷在主机和容器之间共享代码.不应该需要重新获取所有依赖项.它不应该使用新建的可执行文件吗?但是,这并不反映构建的更改和端口转发似乎中断.

作为参考,这是我的Dockerfile:

FROM golang:1.8

COPY . /go/src/github.com/codeblooded/test1
WORKDIR /go/src/github.com/codeblooded/test1

RUN echo $PATH
RUN go get -d -v ./...
RUN go install -v ./...

RUN go build -o test1 .
CMD ["test1"]
EXPOSE 3470

还有我的docker-compose.yml文件:

version: '3'
services:
  postgres:
    image: postgres
    volumes:
      - ./db/data/psql:/var/lib/postgresql/data
      - ./db/schema:/db/schema
  redis:
    image: redis
    volumes:
      - ./db/data/redis:/data
  server:
    build: .
    command: test1
    volumes:
      - .:/go/src/github.com/codeblooded/test1
    ports:
      - "3470:3470"
    depends_on:
      - postgres
      - redis

有什么我想念的吗?

最佳答案
你提出了一个很好的问题.

Dockerfile中命令的顺序非常重要.首先放置那些不会频繁更改的内容,以及后来最有可能在每个内部版本中更改的内容:

FROM golang:1.8

RUN go get -d -v ./...
RUN go install -v ./...

COPY . /go/src/github.com/codeblooded/test1
WORKDIR /go/src/github.com/codeblooded/test1

RUN echo $PATH

RUN go build -o test1 .
CMD ["test1"]
EXPOSE 3470

当关于先前构建的图层更改时,docker会丢弃以下缓存图层,然后再次运行它们,有时会浪费您的时间.

注意在前一个版本中重用的每个图层中的docker输出的“Using cache”句子.

对于您的开发工作,另一个建议是每次更改代码时使用fresh自动重新构建您的应用程序.只需将它安装在容器中,然后在docker-compose.yml中使用命令:fresh

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读