백엔드 개발 Golang 초보자를 위한 Docker 실습 Golang Dev

초보자를 위한 Docker 실습 Golang Dev

Nov 04, 2024 am 05:36 AM

목차

  1. 개요
  2. 전제조건
  3. 도커파일
  4. 도커 작성
    • 엔진엑스
    • MySQL
    • 이전
    • API
    • 커스텀
  5. 참고자료

개요

이 문서에서는 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)

Hands On Docker For Beginners Golang Dev

Sudo docker image ls 명령으로 이미지 목록을 확인할 수 있습니다

Hands On Docker For Beginners Golang Dev

# 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

Hands On Docker For Beginners Golang Dev

축하합니다

이제 Postman 또는 기타 앱을 사용하여 API 사용을 테스트할 수 있습니다.

Hands On Docker For Beginners Golang Dev


도커 작성

Docker Compose는 여러 컨테이너 서비스를 만들어 Docker 내에서 실행하는 데 사용되었습니다. 이 프로젝트 docker-compose.yml에는 4가지 서비스에 대해 설명하겠습니다.

Nginx 프록시

# 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
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
  • nginx: 서비스 이름입니다
  • image: nginxproxy/nginx-proxy:1.6 이것은 Dockerfile의 FROM과 유사하게 우리가 사용할 이미지입니다.
  • 네트워크: 서비스가 사용할 Docker 내부의 네트워크입니다.
  • ports: 서비스가 를 사용할 포트를 설정합니다. : , 80은 HTTP의 기본 포트입니다
  • 볼륨: 이 서비스에 대한 데이터를 저장하는 영구 볼륨입니다. : :ro(읽기 전용).
  • Environment: 환경변수를 사용하는 것입니다.(8)

MySQL

# Deploy application binary into a lean image
FROM scratch AS build-realease-stage
    WORKDIR /

    COPY --from=build-stage /api /api

    EXPOSE 8080

    ENTRYPOINT [ "/api" ]
로그인 후 복사
로그인 후 복사
로그인 후 복사
  • db: 서비스 이름입니다
  • image: mysql:8.0 Image mysql 버전 8.0을 사용하는 이 서비스
  • 네트워크: 이 서비스는 new라는 이름의 사용자 지정 네트워크를 사용하고 별칭 이름 데이터베이스를 사용하는 새 네트워크를 사용합니다.
  • healthcheck: 테스트를 실행하여 서비스 작동을 확인하는 것입니다. test: mysqladmin ping -h Database -u ${DB_USER} --password=${DB_PASSWORD} 이 테스트는 mysql 데이터베이스에 대한 ping을 수행합니다.
  • 볼륨: 볼륨 내부에 영구 데이터를 저장합니다.
  • 포트: 이는 서비스가 사용할 포트입니다. 이 서비스에서는 포트 3306이 이미 로컬 시스템의 mysql에 사용되었기 때문에 3308을 로컬 시스템 포트로 사용합니다.
  • 환경: 환경 변수를 사용하기 위한 것입니다. 이 mysql 서비스에는 루트 비밀번호와 데이터베이스 이름이 필요합니다.(7)

마이그레이션

sudo docker build .
로그인 후 복사
로그인 후 복사
로그인 후 복사
  • migration-up: 서비스 이름입니다
  • 이미지: 이 서비스를 마이그레이션/마이그레이션하려면 이미지 마이그레이션을 사용하세요
  • 네트워크: DB 서비스와 동일한 새로운 네트워크를 사용하는 서비스입니다
  • 볼륨: 로컬 ./cmd/ migration/migrations의 마이그레이션 데이터가 서비스 디렉터리 /migrations에 복사되었습니다.
  • 명령: 이 서비스에서 ["-path", "/migrations", "-database", "${CONNECT_DB} 명령을 실행합니다.", "-verbose", "up"] 이 명령은 migration -path /migrations -database mysql://root:some-secret-password@tcp(database:3306)/ecom -verbose up과 유사합니다. (9)
  • 링크: 서비스를 다른 서비스에 연결하는 서비스, DB 서비스에 연결되는 마이그레이션 서비스
  • 종속_온: 특정 조건 이후에 이 서비스가 실행되도록 합니다. db: 조건: service_healthy 이는 db 서비스 테스트 결과 service_healthy를 얻었을 때 마이그레이션 서비스가 실행된다는 의미입니다.

API

# 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
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
  • api: 서비스 이름입니다
  • 네트워크: 이것은 이 서비스를 위한 네트워크입니다. 이 서비스는 새로운 네트워크를 사용하여 서비스 DB에 연결할 수 있고 서비스 nginx에서 사용하는 기본 네트워크에도 연결할 수 있습니다.
  • build : Dockerfile을 이용하여 서비스를 빌드하는 것입니다.
  • 재시작: 서비스가 실패할 때마다 이 서비스가 다시 시작됩니다.
  • 볼륨: 볼륨 /go/src/api에 저장된 영구 데이터입니다.
  • ports: 이 서비스를 위한 포트입니다.
  • 환경: 환경 이 서비스에 필요한 가치입니다.
  • 링크: 이 서비스는 mysql 데이터베이스를 소비해야 하기 때문에 db 서비스에 연결됩니다.
  • 의존_온: 이 서비스는 마이그레이션할 때, 이미 service_completed_successful일 때, db 테스트 결과가 service_healthy일 때, nginx service_started일 때 여러 조건에서 실행됩니다.

관습

# Deploy application binary into a lean image
FROM scratch AS build-realease-stage
    WORKDIR /

    COPY --from=build-stage /api /api

    EXPOSE 8080

    ENTRYPOINT [ "/api" ]
로그인 후 복사
로그인 후 복사
로그인 후 복사
  • 볼륨: db_data라는 사용자 지정 볼륨이 생성되었습니다.
  • 네트워크: new라는 이름의 사용자 정의 네트워크가 생성되었습니다.

Docker Compose를 사용해 보세요

sudo docker build .
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 명령은 각 서비스에 대한 이미지를 생성하고 각 컨테이너를 실행합니다.

Hands On Docker For Beginners Golang Dev


sudo docker run --rm --network host --env-file .env 98bc0128576e
로그인 후 복사

우리가 생성한 docker-compose.yml 컨테이너를 확인할 수 있습니다.

Hands On Docker For Beginners Golang Dev


  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이 생성한 볼륨을 확인할 수 있습니다.

Hands On Docker For Beginners Golang Dev


  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이 생성한 이미지를 확인하실 수 있습니다.

Hands On Docker For Beginners Golang Dev


축하합니다

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
로그인 후 복사

Hands On Docker For Beginners Golang Dev

또는 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
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

Hands On Docker For Beginners Golang Dev


참고자료

(1)Dockerfile 참조
(2)Docker 기본 이미지
(3)도커 빌드
(4)Docker 네트워크 튜토리얼
(5)Docker 네트워크 드라이버
(6)Dockerfile 작성
(7)도커 허브 MySQL
(8)Nginx-프록시 문서
(9)고랭 마이그레이션

위 내용은 초보자를 위한 Docker 실습 Golang Dev의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Golang vs. Python : 성능 및 확장 성 Golang vs. Python : 성능 및 확장 성 Apr 19, 2025 am 12:18 AM

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

Golang 및 C : 동시성 대 원시 속도 Golang 및 C : 동시성 대 원시 속도 Apr 21, 2025 am 12:16 AM

Golang은 동시성에서 C보다 낫고 C는 원시 속도에서 Golang보다 낫습니다. 1) Golang은 Goroutine 및 Channel을 통해 효율적인 동시성을 달성하며, 이는 많은 동시 작업을 처리하는 데 적합합니다. 2) C 컴파일러 최적화 및 표준 라이브러리를 통해 하드웨어에 가까운 고성능을 제공하며 극도의 최적화가 필요한 애플리케이션에 적합합니다.

GOT GO로 시작 : 초보자 가이드 GOT GO로 시작 : 초보자 가이드 Apr 26, 2025 am 12:21 AM

goisidealforbeginnersandsuitableforcloudandnetworkservicesduetoitssimplicity, 효율성, 및 콘크리 론 피처

Golang vs. C : 성능 및 속도 비교 Golang vs. C : 성능 및 속도 비교 Apr 21, 2025 am 12:13 AM

Golang은 빠른 개발 및 동시 시나리오에 적합하며 C는 극도의 성능 및 저수준 제어가 필요한 시나리오에 적합합니다. 1) Golang은 쓰레기 수집 및 동시성 메커니즘을 통해 성능을 향상시키고, 고전성 웹 서비스 개발에 적합합니다. 2) C는 수동 메모리 관리 및 컴파일러 최적화를 통해 궁극적 인 성능을 달성하며 임베디드 시스템 개발에 적합합니다.

Golang vs. Python : 주요 차이점과 유사성 Golang vs. Python : 주요 차이점과 유사성 Apr 17, 2025 am 12:15 AM

Golang과 Python은 각각 고유 한 장점이 있습니다. Golang은 고성능 및 동시 프로그래밍에 적합하지만 Python은 데이터 과학 및 웹 개발에 적합합니다. Golang은 동시성 모델과 효율적인 성능으로 유명하며 Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명합니다.

Golang 및 C : 성능 상충 Golang 및 C : 성능 상충 Apr 17, 2025 am 12:18 AM

Golang과 C의 성능 차이는 주로 메모리 관리, 컴파일 최적화 및 런타임 효율에 반영됩니다. 1) Golang의 쓰레기 수집 메커니즘은 편리하지만 성능에 영향을 줄 수 있습니다. 2) C의 수동 메모리 관리 및 컴파일러 최적화는 재귀 컴퓨팅에서 더 효율적입니다.

공연 경주 : 골랑 대 c 공연 경주 : 골랑 대 c Apr 16, 2025 am 12:07 AM

Golang과 C는 각각 공연 경쟁에서 고유 한 장점을 가지고 있습니다. 1) Golang은 높은 동시성과 빠른 발전에 적합하며 2) C는 더 높은 성능과 세밀한 제어를 제공합니다. 선택은 프로젝트 요구 사항 및 팀 기술 스택을 기반으로해야합니다.

Golang vs. Python : 장단점 Golang vs. Python : 장단점 Apr 21, 2025 am 12:17 AM

golangisidealforbuildingscalablesystemsdueToitsefficiencyandconcurrency

See all articles