ハハエンジニアのブログ

2児の母兼システムエンジニアのブログ

Docker上のCentOSにgoa導入

Goをインストールしてみるよ https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz

cd /usr/local/src wget https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz tar -C /usr/local/ -xzf go1.12.4.linux-amd64.tar.gz

  • PATH設定

vi ~/.bashrc

export GOROOT=/usr/local/go

export GOPATH=/go

export PATH=$PATH:$GOROOT/bin

export PATH=$PATH:$GOPATH/bin

source ~/.bashrc

go version

  • glideをインストールする

curl https://glide.sh/get | sh

$GOPAH/bin の下にインストールされる

  • goaをインストールする

アプリ用のディレクトリを作成する

mkdir -p $GOPATH/src/cellar && cd $GOPATH/src/cellar

  • glide.yamlを編集

package: cellar import: - package: github.com/goadesign/goa version: master vcs: git subpackages: - client - design - design/apidsl - dslengine - goagen - middleware - package: golang.org/x/tools subpackages: - go/ast/astutil - package: gopkg.in/yaml.v2

  • パッケージをインストールする

yaml に記載したとおりにパッケージがインストールされるって!

glide install -v

vendor ディレクトリ以下に、パッケージがインストールされている

glide.lock ファイルが作成されている

  • goagenをビルドする

cd ./vendor/github.com/goadesign/goa/goagen

go build

→cannot find package...のエラー

yamlにパッケージを追加して glide up する。

Docker for windowsのインストール

Hyper-V + Docker for Windows

そもそもHyper-Vとは・・・ Windows Server 2008以降に搭載されたサーバ仮想化技術

  • Docker for Windowsダウンロード Docker Desktop for Mac and Windows | Docker Download for Windows ※IDもってたのでログインしてダウンロード

  • インストール exe起動 Linuxコンテナを使う、にチェックしてインストール開始 デスクトップのショートカットから起動 お。起動時にエラー

Hardware assisted virtualization and data execution protection must be enabled in the BIOS

BIOSの設定変更が必要、と・・。

タスクマネージャで仮想化確認→「有効」になってる。はて。

いったんHyper-Vを無効化して再起動。

Docker起動→当然起動しない

もういっかいHyper-Vを有効化して再起動

Docker起動。なんか起動した。

  • Dockerログイン

  • Windows Power Shell で docker run hello-world →Hello from Docker! と表示された。OKぽい

  • docker ps →なにも表示されない。コンテナ作ってないので当然。

  • CentOSいれよう! docker pull centos:7

  • srcディレクトリ mkdir -p ~/src/centos7-go →{ユーザディレクトリ}/src/centos7-go

  • Dockerコンテナ起動

docker run --privileged -it -d -v ~/src/centos7-go:/go -h go -p 8000:80 --name centos7-go centos:7 /sbin/init

あら。ドライブのシェア設定ができてなかった。 Dockerタスクアイコン右クリック→Setting→SharedDriveでCドライブにチェック、Apply →Firewallでシェア設定できないとのこと。Nortonファイアウォールがじゃましてるかな?

ローカルセキュリティポリシー 「ネットワークリストマネージャーポリシー」の「識別されていないネットワーク」を開く 場所の種類を未構成からプライベートに変更 ノートンの設定>ファイアウォールの一般設定タブからデバイスの信頼の設定を開きます 追加するから適当な名前でIPアドレス「10.0.75.0」「10.0.75.1」の2つのデバイスを追加 →PC再起動 →再起動後、Share設定できた。

もういっかい

docker run --privileged -it -d -v ~/src/centos7-go:/go -h go -p 8000:80 --name centos7-go centos:7 /sbin/init

docker ps →CentOSのコンテナが動いていることを確認。

docker exec -it centos7-go bashCentOSのコンソール起動。

yum -y update yum install -y git wget

Go言語の勉強をはじめる

  • 入門サイト

Go言語を学習してみよう(2):HelloWorldを見ていく - Qiita

はじめてのGo言語 - はじめてのGo言語

このへんみながらさわってみる。

なんか、一見優しいんだけど、暗黙的なことが多くてへたすると品質グダグダになりそう・・・。

パッケージのメンバ(変数、関数)名の先頭が 大文字→public、小文字→private みたいなの。 おばちゃんは明示的に「public!!!」って書きたくなるなあ。

Go言語はオブジェクト指向プログラミング言語ではありませんが、 構造体とそのメソッドを用いることである程度オブジェクト指向「らしく」プログラミングを行うことができます。

ふむふむ。

インタフェースの実装に明示的な宣言が必要なJavaC#と違い、 Go言語ではインタフェースが必要とするメソッドをすべて実装した時点で、自動的にそのインタフェースを実装したとみなされます。 このような、振る舞いから型を決める仕組みはダックタイピングと呼ばれ、(仕様は多少違いますが)Ruby等の言語でも採用されています。

配列とスライス。長さを指定した場合は「配列」、指定しない場合は「スライス」で、 メモリの使い方が違う、と。(スライスは値自体ではなく、要素への参照をもつ。)

カジュアルなだけにPGの技術力に品質が左右されそう。

あとはGCが気になるけど

Go GC - LINE ENGINEERING

これ後で読んでおこう

いま興味があることのメモ

  • Golang APIサーバを立てる機会があればGoでやってみたい。

  • TypeScript やってみたい。次の案件で導入してみよう

  • Python 機械学習とあわせて勉強しておきたい

  • CI(継続的インテグレーション) 小さい案件だとなかなかここまでやらないけど、予算のゆるす範囲でできるだけ整備していきたいと思う。

  • 仕事を作ること いままで(今も)流れてくるままに仕事をこなしているけど、 小さいものでもいいから自分で仕事を作り出せるようになりたい。 まったく未知の分野だけど、なにかきっかけを探したい。