LoginSignup
2
3

More than 5 years have passed since last update.

コンテナGo

Posted at

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の接続情報)を書きます。

config/mysql-config.json
{
    "//": "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

以下のように表示されれば成功です。
スクリーンショット 2018-12-16 17.09.39.png

お掃除

docker stop $(docker ps -q)

で停止できます。

参考

golangでdockerをはじめる ~ goのwebサーバーをdockerでたててみた ~
Dockerfile のベストプラクティス

2
3
0

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
2
3