ターゲット
ローカルでのデバッグが終わったら、コードをリポジトリにCommitすれば、自動的にDockerイメージがビルドされ、本番サーバに自動的にデプロイされます。また、設定ファイルのセキュリティにも注意してください。
フロー
コミットされたコード -> Docker HubのAutomatedサービスがGithub上のコミットを検出し、Dockerfileに基づいてImageをビルド -> 本番サーバのWatchTowerがDocker Hubで更新が発生したことを検出し、ローカルのImageを自動的に更新。
設定ファイル受け渡しのアイデア
GithubリポジトリやDocker Hubイメージは公開されているため、これらの場所に設定ファイルを保存することはできません。docker run timeはパラメータを-e経由でdocker imageに渡し、Dockerfileの定義経由でGoプログラムにコマンドラインとしてパラメータを渡し、Goプログラムはpflag経由でコマンドラインパラメータを受け取ります。
使用方法
本番サーバー
以下のコードでイメージを実行します。
docker rm go_docker -f
docker rmi 117503445/go_docker
docker run -it --name go_docker -d -e var1="dockervar1" -e var2="dockervar1" -p 80:80 --restart=always 117503445/go_docker:latest
自動アップデートを有効にするための WatchTower の再設定
docker run -d
--name watchtower
-v /var/run/docker.sock:/var/run/docker.sock
containrrr/watchtower
ローカルデバッグ
私たちはレイヤービルドを使用しており、go buildでビルドレベルで実行可能アプリをビルドし、prodレベルで実行します。後で設定ファイルの構造を変更する必要がある場合は、Dockerfileも変更する必要があります。
ローカルDockerの実行
docker rm go_docker -f
docker rmi 117503445/go_docker
docker build -t 117503445/go_docker . #
docker build -t 117503445/go_docker -f Dockerfile . #,goイメージを有効にする
docker run -it --name go_docker -d -e var1="dockervar1" -e var2="dockervar1" -p 80:80 --restart=always 117503445/go_docker:latest