이 문서에서는 Docker가 내부적으로 어떻게 작동하는지 설명하지 않고, 대신 다른 프로젝트에 대한 Docker 구성을 작성할 수 있도록 Dockerfile 및 docker-compose.yml 파일에 작성된 각 코드의 목적을 설명합니다.
예를 들어 Dockerfile과 docker-compose가 포함된 프로젝트가 필요합니다. 여기서는 Ecom이라는 Golang 프로젝트를 예로 사용하겠습니다. Dockerfile을 사용하려면 README에 언급된 대로 로컬 데이터베이스를 설정해야 합니다.
컨테이너 이미지를 생성하는 데 사용되는 Dockerfile.(6)
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
FROM golang:1.23.0 빌드 단계에서 이것은 앱용 이미지입니다. 이는 Go 엔진을 머신에 다운로드하는 것과 비슷하며, Docker에는 코드를 실행하기 위해 특정 이미지가 필요합니다.(1)(2)
WORKDIR /app 이는 코드가 /app에서 실행되기를 원하는 작업 디렉터리입니다.
go.mod go.sum ./ 복사 이 코드는 go.mod 및 go.sum 파일을 로컬 컴퓨터에서 Docker의 ./ 디렉터리로 복사합니다.
RUN go mod download 이것은 Docker에서 go mod 다운로드 명령을 실행합니다
복사 . . 이 코드는 로컬 시스템의 모든 파일 및 폴더 프로젝트를 Docker로 복사합니다.
RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go 이 코드는 Linux OS의 Golang 앱을 Docker의 /api 폴더에 빌드하는 명령을 실행합니다.
# Deploy application binary into a lean image FROM scratch AS build-realease-stage WORKDIR / COPY --from=build-stage /api /api EXPOSE 8080 ENTRYPOINT [ "/api" ]
FROM 스크래치 AS 빌드-릴리스-단계 스크래치는 애플리케이션에 필요한 것만 포함하는 최소한의 이미지를 만드는 데 사용됩니다.
WORKDIR / 루트 /를 작업 디렉토리로 사용하겠습니다.
COPY --from=build-stage /api /api 이렇게 하면 이미지 빌드 단계의 /api 디렉토리가 build-realease-stage 이미지의 /api로 복사됩니다.
EXPOSE 8080 이렇게 하면 포트 8080이 노출되므로 Docker 외부에서 포트 8080으로 API에 액세스할 수 있습니다.
ENTRYPOINT [ "/api" ] 이는 /api에 기본 실행 파일을 설정합니다
Dockerfile을 사용해 보세요.
sudo docker build .
docker build를 통해 프로젝트를 이미지로 빌드할 수 있습니다. -t project-ecom 태그를 추가하면 빌드한 이미지를 더 쉽게 식별할 수 있습니다.(3)
Sudo docker image ls 명령으로 이미지 목록을 확인할 수 있습니다
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
그런 다음 Docker 이미지를 실행하세요
--rm 중지 시 컨테이너 제거
--docker 앱을 localhost 시스템에 연결하는 네트워크 호스트 (4),(5)
--env-file .env .env 파일을 통해 환경 값에 액세스
98bc0128576e 도커 이미지 ID
이제 Postman 또는 기타 앱을 사용하여 API 사용을 테스트할 수 있습니다.
Docker Compose는 여러 컨테이너 서비스를 만들어 Docker 내에서 실행하는 데 사용되었습니다. 이 프로젝트 docker-compose.yml에는 4가지 서비스에 대해 설명하겠습니다.
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
# Deploy application binary into a lean image FROM scratch AS build-realease-stage WORKDIR / COPY --from=build-stage /api /api EXPOSE 8080 ENTRYPOINT [ "/api" ]
sudo docker build .
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
# Deploy application binary into a lean image FROM scratch AS build-realease-stage WORKDIR / COPY --from=build-stage /api /api EXPOSE 8080 ENTRYPOINT [ "/api" ]
Docker Compose를 사용해 보세요
sudo docker build .
이 명령은 각 서비스에 대한 이미지를 생성하고 각 컨테이너를 실행합니다.
sudo docker run --rm --network host --env-file .env 98bc0128576e
우리가 생성한 docker-compose.yml 컨테이너를 확인할 수 있습니다.
nginx: image: nginxproxy/nginx-proxy:1.6 networks: - default ports: - "80:80" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro environment: HTTPS_METHOD: nohttps
docker-compose.yml이 생성한 볼륨을 확인할 수 있습니다.
db: image: mysql:8.0 networks: new: aliases: - database healthcheck: test: mysqladmin ping -h database -u ${DB_USER} --password=${DB_PASSWORD} volumes: - db_data:/var/lib/mysql - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3308:3306" environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_DATABASE: ${DB_NAME}
docker-compose.yml이 생성한 이미지를 확인하실 수 있습니다.
Postman 또는 기타 앱을 사용하여 README 문서를 기반으로 프로젝트에서 Consume API를 테스트할 수 있습니다.
완료한 경우 다음을 사용하여 컨테이너를 중지할 수 있습니다.
migrate-up: image: migrate/migrate networks: - new volumes: - ./cmd/migrate/migrations:/migrations - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro command: ["-path", "/migrations", "-database", "${CONNECT_DB}", "-verbose", "up"] links: - db depends_on: db: condition: service_healthy
또는 docker compose 내의 모든 컨테이너 서비스를 삭제하려면 다음을 실행하세요.
# Build application from source FROM golang:1.23.0 AS build-stage WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
(1)Dockerfile 참조
(2)Docker 기본 이미지
(3)도커 빌드
(4)Docker 네트워크 튜토리얼
(5)Docker 네트워크 드라이버
(6)Dockerfile 작성
(7)도커 허브 MySQL
(8)Nginx-프록시 문서
(9)고랭 마이그레이션
위 내용은 초보자를 위한 Docker 실습 Golang Dev의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!