この記事では、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
ビルド段階の golang:1.23.0 から、これはアプリのイメージです。Go エンジンをマシンにダウンロードするのと似ていますが、Docker ではコードを実行するために特定のイメージが必要です。(1)(2)
WORKDIR /app これは、コードを /app で実行する作業ディレクトリです。
COPY go.mod go.sum ./ このコードは、go.mod と go.sum ファイルをローカル マシンから Docker 上の ./ ディレクトリにコピーします。
RUN go mod download これにより、Docker で go mod download コマンドが実行されます
コピー . 。このコードは、すべてのファイルとフォルダー プロジェクトをローカル マシンから 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" ]
ビルドリリース段階のスクラッチから、アプリケーションに必要なものだけを含む最小限のイメージを作成するために使用されます。
WORKDIR / 作業ディレクトリとして root / を使用します。
COPY --from=build-stage /api /api これにより、ディレクトリ /api がイメージ build-stage から 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 アプリをローカルホスト マシンに接続します (4)、(5)
--env-file .env : .env ファイル
を通じて環境値にアクセスします
98bc0128576e docker イメージ 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 で作成したイメージを確認できます。
README のドキュメントに基づいて、Postman または他のアプリを使用してプロジェクトの 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)Dockerビルド
(4)Dockerネットワークチュートリアル
(5)Dockerネットワークドライバー
(6)Dockerfileの作成
(7)Docker Hub Mysql
(8)Nginx プロキシ ドキュメント
(9)Golang 移行
以上が初心者のための Docker ハンズオン Golang 開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。