LoginSignup
1
0

More than 3 years have passed since last update.

ラズパイで実行するGO言語プログラムのDocker開発環境(GPIOとかはわからん)

Posted at

概要

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の環境変数を渡してあげる。

詳細

こんな感じ。

docker-compose.yml
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できないとストレスなので入れてる。

init.sh
#!/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って出して死んじゃう。

Makefile
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の使い分けがいまいちわからない。
軽く検索しただけじゃ、よくわかんないので、本読むか。。。

1
0
2

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
1
0