LoginSignup
0
0

More than 1 year has passed since last update.

Dockerfileとdocker-compose.yamlの書き方を完全に理解した(わかっていない)

Last updated at Posted at 2021-06-07

はじめに

Dockerfileとdocker-compose.yamlの基本的な書き方を調べたので、自分なりの理解でまとめる

本記事のサンプルコードをそのままコピペしても一部動かない可能性あるので悪しからず

ゴール

  • GolangのAPIサーバ用コンテナ立てる

ディレクトリ構成

ざっくりこんな感じ

hogehoge.api
├── docker
│   ├── Dockerfile
│   └── docker-compose.yml
└── src
    └── app
        └── main.go

Dockerfile記述

Dockerfile

# ベースイメージを指定
# alpine linuxが軽くてオススメらしいので採用
FROM golang:1.13.15-alpine3.12

# 環境変数の設定
# golangのバージョン1.11以降でGoモジュールの管理にこれが使われるようになったらしいのでonにしておく
ENV GO111MODULE on
# Goのパス通す
ENV GOPATH /go
ENV PATH /go/bin:$PATH

# RUNコマンドは繋げられるならば繋げたほうが良い(軽量化に繋がる)らしいので&&で連ねる
# apk(Alpin Linux Package Management)をアップデートする
# go moduleインストール用にgit入れる
# ホットリロード用にair(https://github.com/cosmtrek/air)を採用
RUN apk update \
  && apk add --no-cache git \
  && go get -u github.com/cosmtrek/air

# コンテナ実行時のデフォルト処理
# docker-composeでも指定するから不要かも(?)
CMD sh

docker-compose.yaml記述

DBに関する記述は雑
→ネットワークの説明やbuildにDockerfile以外も使えることを示すためだけなので

docker-compose.yaml

# Docker Composeファイルフォーマットのバージョンを指定
version: "3"

# コンテナ間のネットワーク
networks:
  backend:

# `docker-compose build`や`up`と打った際に作成するコンテナ
services:
  # `docker-compose ps`と打った際に表示されるサービス名
  # ここからDBのコンテナ作っていく
  my-db-for-hogehoge:
    # `docker ps`と打った際に表示されるコンテナ名
    container_name: my-hogehoge-db
    # コンテナのベースイメージ指定
    image: mysql:5.7
    # ネットワークで`backend`を指定しているコンテナと疎通
    networks:
      - backend
  # ここからAPIのコンテナ作っていく
  api-for-hogehoge:
    container_name: my-hogehoge-api
    # ビルド時に使うDockerfileを指定
    # dbのほうではimagesだった箇所にあたる
    build:
      context: .
      dockerfile: ./Dockerfile
    # hogehoge.apiのファイル群を/goにマウント
    volumes:
      - ..:/go
    # コンテナ側の80番ポートを開放
    expose:
      - "80"
    # ホストマシンの10080番ポートとコンテナ側の80番ポート繋ぐ
    ports:
      - "10080:80"
    # 環境変数置くファイル(開発環境でのみ使うパターンが多い?)
    env_file:
      - .env
    # 環境変数設定
    environment:
      HOGE: "hoge"
    # ワークスペース、コンテナ入った時の初期ディレクトリ 
    working_dir: /go/src
    # ネットワークで`backend`を指定することで、先ほどのDBと疎通
    networks:
      - backend
    # `docker-compose up`と打った際に実行されるコマンド
    command: >
      air -c .air.toml
    # コンテナ永続化するか否か(ここではする)
    tty: true

APIコンテナ起動してみる

ここは本筋ではないので軽く
下記コマンドでエラー吐かれたら随時対処

$ docker-compose build
$ docker-compose up -d
$ docker-compose logs -f api-for-hogehoge

ハマった点

  • GolangというかホットリロードAirの問題かもしれないが、docker-compose buildしてもAirがインストールされなかった
    • コンテナに入って手動インストールして解消
  • docker-compose.yamlの書き方が統一されていない
    • オプションの後は改行入れた方が良い?
    • オプションの中身が複数ある場合はハイフン-でリスト表記したほうが良い?特にハイフン不要?
    • 調べて修正必須

さいごに

まだ「完全に理解した」だけなので、曖昧な理解や誤解を生む表現が混ざっている可能性もある
発見次第、随時修正していく予定

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0