#Goをコンテナ化する
MySQLでGoの続きです。
ローカルで動かしていたGOをコンテナ化し、ローカルMySQLに接続してテーブル情報を取得したいと思います。
完成したコードはGitHubに配置してあります。
#やってみた
##dockerのバージョン
$ docker -v
Docker version 18.09.0, build 4d60db4
##DockerHubからgolangイメージをpull
dockerイメージをpullします。バージョンを指定しない場合は、latestがインストールされます。
GolangのOFFICIAL REPOSITORY
$ docker pull golang
$ docker pull golang:1.8
##Dockerfile作成
Dockerイメージを作成するためのファイルです。
# 自分のイメージの元として現在の公式レポジトリを使用
FROM golang:1.8
# 作者
MAINTAINER uguisuhohokekyo
# 環境変数の設定
# ENV aaa=bbb
# ワーキングディレクトリ
# WORKDIR
# ローカルからコピー
COPY /src /go/src/
COPY /config /go/config/
# 特定のネットワーク・ポートをコンテナが実行時にリッスンすることを Docker に伝えます
EXPOSE 8080
#パッケージインストール
RUN go get -u github.com/go-sql-driver/mysql
# コンテナ内で実行するコマンド
CMD ["go", "run", "/go/src/mysql.go"]
##.dockerignore作成
特定のファイルとディレクトリをCLIの処理から除外から除外します。
# 特定のファイルとディレクトリはCLIの処理から除外
*/tmp*
.git*
!README.md
##設定ファイル
前回までは設定をコードにベタがきしていました。12factorにそって設定をコードから分離しようと思います。
jsonの設定ファイルを作成し、そっちに環境依存の設定(今回でいうとMYSQLの接続情報)を書きます。
{
"//": "docker用",
"host": "host.docker.internal",
"user": "uguisu",
"pass": "sqlserver",
"port": "3306",
"dbname": "goods"
}
"host.docker.internal"はローカル環境DNS名で、指定するとDocker環境からローカル環境に接続できます。
Networking features in Docker for Mac
##mysql.go
設定ファイルを読み込むように修正します。中身はGitHubみていただければと思います。
#イメージをビルド
それではイメージをビルドします。-tでイメージ名をつけています。
$ ls
Dockerfile README.md config src
$ docker build -t golang-mysql .
$ docker images | grep golang-mysql
golang-mysql latest 5d56e672d35d 10 minutes ago 715MB
#docker run
イメージからプロセスを生成します。
docker run --rm -d -p 8080:8080 -it golang-mysql
オプションの抜粋
-i, --interactive Keep STDIN open even if not attached
-p, --publish list Publish a container's port(s) to the host
-d, --detach Run container in background and print container ID
-t, --tty Allocate a pseudo-TTY
--rm Automatically remove the container when it exits
確認
MySQLが起動していることを確認して、
http://localhost:8080/getfruit
お掃除
docker stop $(docker ps -q)
で停止できます。
#参考
golangでdockerをはじめる ~ goのwebサーバーをdockerでたててみた ~
Dockerfile のベストプラクティス