1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
為此,您需要四個(gè)單獨(dú)的 Dockerfile,才能啟動(dòng)四個(gè)具有四個(gè)不同程序的獨(dú)立容器。Go 組件多克文件可以相當(dāng)簡(jiǎn)單:
# Dockerfile.accounts
FROM golang:1.16 AS build
WORKDIR /app
COPY . .
ARG ENV_APP=dev
RUN go build -tags "$ENV_APP" -o /accounts ./cmd/server/accounts
FROM ubuntu:20.04
COPY --from=build /accounts /usr/local/bin
CMD accounts
(如果除了正在構(gòu)建的特定命令目錄之外,這三個(gè)映像實(shí)際上是相同的,您也可以將其作為傳遞。我假設(shè)這些包需要源目錄中其他位置的包,如 a 或其他任何內(nèi)容,這將要求 Dockerfile 位于頂層。ARG./cmd/server/*./pkg/support
由于您的腳本只運(yùn)行這四個(gè)程序,我通常建議使用 Docker Compose 作為同時(shí)啟動(dòng)四個(gè)容器的一種方式?!笆褂靡阎x項(xiàng)啟動(dòng)一些容器”是 Compose 所做的唯一事情,但它可以完成腳本所做的一切。
# docker-compose.yml
version: '3.8'
services:
accounts:
build:
context: .
dockerfile: Dockerfile.accounts
events:
build:
context: .
dockerfile: Dockerfile.events
places:
build:
context: .
dockerfile: Dockerfile.places
gateway:
build:
context: .
dockerfile: Dockerfile.gateway
# (Since a Node app can't reuse Go code, this could also
# reasonably be `build: cmd/gateway` using a
# `cmd/gateway/Dockerfile`)
ports:
- 3000:3000
只需運(yùn)行即可在前臺(tái)啟動(dòng)所有四個(gè)容器;一旦它啟動(dòng),按+將停止它們。您可以將網(wǎng)關(guān)配置為使用其他容器名稱 , 作為主機(jī)名; 例如。docker-compose upCtrlCaccountseventsplaceshttp://accounts/graphql
您還可以按原樣調(diào)整啟動(dòng)器腳本。運(yùn)行而不是構(gòu)建映像,啟動(dòng)容器(可能具有固定的 s)來(lái)停止它們。您應(yīng)該使用網(wǎng)絡(luò)和它們上的所有容器,以便它們可以以與撰寫設(shè)置相同的方式進(jìn)行通信。docker buildgo builddocker run--namedocker stop && docker rmdocker network createdocker run --net
- 1 回答
- 0 關(guān)注
- 66 瀏覽
添加回答
舉報(bào)