概要
debianのgo入ったdockerイメージ使ってMakefile
でクロスコンパイルするときの設定わたしとくと、GPIOとかは無理だけど、そこそこラズパイ用のGO開発環境にできそう。
はじめに
ラズパイでGO言語のプログラムを動かしたいときに、sshして開発しても良いと思うけど、複数人でなにか作りたいときとかはDocker環境で開発して出来たほうが良いかなーと思う。
クロスコンパイルして、そこそこテストして、実行ファイルだけラズパイにコピーして使う感じ。
ということで、ラズパイで動くGO言語プログラムを開発するためのDockerの設定をすこし整理した。
Dockerfileもdocker-compose.ymlもいまいちわかってないけど、動いてるから良しとした。
もっと、いい感じの書き方とかいい感じの設定あれば教えてほしいです。。。
結局、ラズパイとかいいつつ、GPIOもBluetoothも使ってないので、ただのdebian環境っていう・・・。
方針
軽くしらべたら、それっぽいイメージ提供してる人いたけど、詳細わかんないので、使わないことにした。GPIOとかをシミュレート?エミュレート?できるなら使ってみたい気はする。
balenalib/raspberry-pi-golang
golangのオフィシャルなイメージはdebianっぽいので、そのまま使うことにした。
golang
Makefileに、env GOOS=linux GOARCH=arm GOARM=7 go build
を書いておく。自分の持ってるラズパイはuname -a
したら、armv7l
って書いてあったから、GOARM=7
にした。それで動いた。
githubの環境変数を渡してあげる。
詳細
こんな感じ。
version: "3"
services:
raspi:
build: ./raspi
environment:
GITHUB_USER_NAME: ${GITHUB_USER_NAME}
GITHUB_TOKEN: ${GITHUB_TOKEN}
GITHUB_EMAIL: ${GITHUB_EMAIL}
volumes:
- "raspi.repo:/repo"
- "raspi.go:/go"
tty: true
volumes:
raspi.repo:
raspi.go:
githubの環境変数をわたしてる。
上記ymlファイルの下に./raspi
ってフォルダを切ってDockerfileと最初に実行してほしいスクリプトをおいてる。
FROM golang:latest
LABEL Name="raspi"
LABEL Version="1.0.0"
WORKDIR /
ADD ./init.sh init.sh
ENV GITHUB_USER_NAME=github-user-name
ENV GITHUB_TOKEN=github-token
ENV GITHUB_EMAIL=github-email
RUN apt-get update && apt-get install -y \
less\
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
VOLUME /go
VOLUME /repo
WORKDIR /repo
CMD ["bash", "/init.sh"]
less
できないとストレスなので入れてる。
#!/bin/bash
cd /
git config --global user.name ${GITHUB_USER_NAME}
git config --global user.email ${GITHUB_EMAIL}
git config --global url."https://${GITHUB_USER_NAME}:${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
while :; do sleep 10; done
もうちょいgo install
とかしといたほうがよいのかも。
最後のsleepがないと、たちあげるとき、exit 0
って出して死んじゃう。
SHELL=bash
build:
go build
build-raspi:
env GOOS=linux GOARCH=arm GOARM=7 go build
ビルドするときの設定(↑)
あとは、適当にたちあげて使ったらよさげ。
docker-compose -f docker-compose.yml up -d --build
おわりに
それっぽく動いてる。満足。
ただ、環境変数とか、volumeのこと、いまいちわからない。
Dockerfileとdocker-compose.ymlの使い分けがいまいちわからない。
軽く検索しただけじゃ、よくわかんないので、本読むか。。。