容器Go

将Go进行容器化

我正在继续使用MySQL和Go语言。
我想将在本地运行的GO代码容器化,并连接到本地的MySQL以获取表信息。
完成的代码已经放置在GitHub上了。

试一试

Docker的版本

$ docker -v
Docker version 18.09.0, build 4d60db4

从DockerHub上拉取golang镜像。

拉取Docker镜像。如果不指定版本,将安装最新版本。Golang的官方仓库。

$ 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の処理から除外
*/tmp*
.git*
!README.md

配置文件

我之前是把设置直接写在代码里面。现在,根据12因素的指导,我打算将设置从代码中分离。

创建一个 JSON 配置文件,并在其中编写与环境相关的设置(例如,MySQL 的连接信息)。

{
    "//": "docker用",
    "host": "host.docker.internal",
    "user": "uguisu",
    "pass": "sqlserver",
    "port": "3306",
    "dbname": "goods"
}

“host.docker.internal”是本地环境的DNS名称,当指定后,可以从Docker环境连接到本地环境。
Docker for Mac中的网络功能。

mysql.go -> 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

从图像中生成进程。

 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 ~ 尝试使用 Docker 在 golang 的 Web 服务器上搭建 ~ Dockerfile 的最佳实践

广告
将在 10 秒后关闭
bannerAds