Vscodeでgo言語でアプリケーションを実行する方法を下記で紹介しました。
今回はその続きとして、ソースファイルで実行ではなくビルドして実行する方法を紹介します。
Armadillo Base OS:go言語でアプリケーションを作成する(VScode版)
ビルドするメリット
・アプリの実行速度が速くなる
・コンテナを大幅に軽量化できる
デメリットとしては実行ファイルの変更に手間が掛かる様になりますが、ソースファイルが完成している
前提であれば影響は小さいと思います。
実施手順
上記リンクのソースファイルでの実行まで開発が完了したとして進めます。
1.ビルド実行環境コンテナを作成する
2.ソースファイルをビルドする
3.ビルドして作成された実行ファイルをresoucesに移動
4.app.confの実行コマンドを変更する(任意)
5.golangを削除する
6.再度コンテナをビルド実行してArmadilloにインストール
1.ビルド実行環境コンテナを作成する
作成済みのコンテナイメージ(ここではtest_go:latest)を利用してビルド環境を作ります。
プロジェクトディレクトリを /home/atmark/vscode/test_go/ として記載しています。
コンテナイメージからコンテナを作成し、コンテナの中に入る(bashを実行)
[ATDE]$ podman run -it --rm --name=go_build \
--volume=/home/atmark/vscode/test_go/app:/go_build \
test_go:latest /bin/bash
[container]# //実際には root@c6d9e65a4721 みたいなプロンプトです
《コマンドの解説》
--rmオプション
コンテナ終了後にコンテナを自動で削除するオプション
コンテナを何度も使いたい場合は本オプションを消す事で再利用可能
コンテナを手動で消す場合は podman rm コンテナ名 で消去可能
--volume=/home/atmark/vscode/test_go/app:/go_build
ATDEのプロジェクトディレクトリ下の app にコンテナの /go_build でマウントする
=コンテナからのアクセス権限を追加
2.ソースファイルをビルドする
次にコンテナの中からappにアクセスできる事を確認し、ビルドを実行
ファイルアクセスの確認
[container]# ls /go_build/src/
hello.go
ソースファイルをビルド(srcの下に保存しておく)
[container]# go build -o /go_build/src/hello /go_build/src/hello.go
実行ファイルの確認
[container]# ls /go_build/src/
hello hello.go
コンテナから出る(--rm有りの場合はコンテナ自動消去)
[container]# exit
3.ビルドして作成された実行ファイルをresoucesに移動
今回はコンテナの中の/binの下に実行ファイル(hello)を移動します。
次にVScode上でファイルをドラッグして移動します。(コマンドで移動でも可)
4.app.confの実行コマンドを変更する(任意)
コンテナ起動時にビルドした実行ファイルを実行する場合、app.confのset_commandを変更します。
5.golangを削除する
実行ファイルが完成したら golang パッケージは不要となりますので、ビルド時にインストールしない様に
packages.txt から削除またはコメントアウトします。
6.再度コンテナをビルド実行してArmadilloにインストール
VScodeで Generate development(release) swu を実行し、Armadilloにインストールします。
コンテナが正しく実行されている事を確認します。
[Armadillo]# podman logs test_go
Hello World
参考までにDebianで実行した場合にgolangの有無でコンテナイメージのサイズは約650MB変わります。
golang有りのコンテナイメージ
[ATDE]$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/arm64v8/test_go latest 490c9a901d78 4 minutes ago 746 MB
golang無しのコンテナイメージ
[ATDE]$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/arm64v8/test_go latest a0314edb14c2 8 minutes ago 98.8 MB
以上、go言語アプリをビルドして実行する方法となります。