blog

GoをDocker化する

ローカルでデバッグした後、コードをリポジトリにコミットすれば、Dockerイメージが自動的にビルドされ、本番サーバにデプロイされます。また、設定ファイルのセキュリティにも注意してください。 コードをコ...

May 19, 2020 · 2 min. read
シェア

ターゲット

ローカルでのデバッグが終わったら、コードをリポジトリに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
Read next

ShardingSphere 4.x 分散トランザクション・サポート機能

クロス・ライブラリでないトランザクションの完全サポート (例: テーブルの分割のみ、ライブラリは分割するが結果は単一ライブラリでルーティング) 論理的例外によるクロスデータベース・トランザクションを完全にサポート。例えば、同じトランザクションで2つのリポジトリにまたがって更新します。更新が完了すると NULL ポインタがスローされ、両方のライブラリの内容をロールバックできます。 ネットワーク例外やハードウェア例外によるクロス・ライブラリ・トランザクションはサポートされていません。例えば、同じトランザクションで2つのライブラリにまたがって更新を行うと、更新が完了した後、コミットではなく、最初の...

May 19, 2020 · 2 min read