Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@optimisuke

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

概要

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

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
optimisuke
Feedback Welcome
acall
ACALLは、「Life in Work and Work in Life for Happiness」をVISIONとして、どこでも安心・安全・快適なワークスタイルを実現するスマートオフィスプラットフォーム「WorkstyleOS」を開発・提供しています。オフィスワークとリモートワークのベストミックスを通じて、人々の「くらし」と「はたらく」を自由にデザインできる世界を目指します。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?