簡體   English   中英

使用docker-compose為AWS CodeBuild創建自定義構建映像

[英]Creating custom build image for AWS CodeBuild with docker-compose

我正在嘗試創建一個自定義Docker映像,以將其用作AWS CodeBuild的構建映像。 如果我只是使用設置環境對Dockerfile進行docker docker build ,則效果很好。 但是現在我需要添加一個postgres實例來運行測試。 所以我認為使用docker-compose可以解決問題。 但是,我沒有弄清楚如何使其工作。 當我嘗試docker docker-compose up ,似乎組成的靜態部分(來自Dockerfile的圖像)立即停止,因為沒有入口點。 此時,我可以通過運行docker-compose run db psql -h db -U testdb -d testdb連接到數據庫實例。 但是,當我將其構建並提供給AWS提供的腳本時,它可以正常運行,直到我的測試嘗試到達數據庫服務器為止。 這是超時失敗的地方,就像沒有數據庫實例一樣。

配置看起來像這樣:

version: '3.7'

services:
  api-build:
    tty: true
    build: ./api_build
    image: api-build
    depends_on:
      - db

  db:
    image: postgres:10-alpine
    restart: always
    environment:
      POSTGRES_USER: testdb
      POSTGRES_PASSWORD: testdb

和./api_build下的./api_build

FROM alpine:3.8

FROM ruby:2.3-alpine as rb

RUN apk update && apk upgrade && \
      echo @edge http://nl.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
      echo @edge http://nl.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories

RUN apk add --no-cache \
      alpine-sdk \
      tzdata \
      libxml2-dev \
      libxslt-dev \
      libpq \
      postgresql-dev \
      elixir \
      erlang

更新:我剛剛意識到,如果需要, docker-compose build只會構建部分組成部分(例如,更新Docker文件),這是否意味着沒有辦法使用docker compose創建映像? 還是我做錯了什么?

由於沒有答案,因此我將嘗試自己回答。 我不確定它是否會有用,但是我發現我對Docker有一些誤解,這使我看不到解決方案或缺乏解決方案。

1)我沒有意識到的是docker-compose用於編排容器組合,它無法構建到包含所需所有服務的單個映像中。

2)多階段構建聽起來令人興奮並且有些神奇,直到我發現每個下一階段都從頭開始創建圖像。 您唯一可以做的就是復制以前階段的某些文件(如果使用AS別名)。 它仍然很酷,但是手動復制包含數百個文件的安裝可能(並且將會)成為噩夢。

3)Docker被設計為僅在容器內部運行一個進程,但這並不意味着它不能運行多個進程。 因此,解決我的問題的方法是使用主管。 特別是S6,據說重量很輕,這正是我使用微型Alpine圖像所需要的。

我最終從just-containers部署了s6-overlay

RUN curl -L -s https://github.com/just-containers/s6-overlay/releases/download/v1.21.4.0/s6-overlay-amd64.tar.gz \
      | tar xvzf - -C /

ENTRYPOINT [ "/init" ]

它提供服務腳本所在的/etc/services.d目錄。 例如對於postgresql,最小的示例是(在/etc/services.d/postgres/run中):

#!/usr/bin/execlineb -P
s6-setuidgid postgres
postgres -D /usr/local/pgsql/data

就是這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM