容器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
整理房间
docker stop $(docker ps -q)
可以停止。
“仅提供一种选项,以下为中文的本地化释义:”
开始使用 golang 来运行 Docker ~ 尝试使用 Docker 在 golang 的 Web 服务器上搭建 ~ Dockerfile 的最佳实践