为了创建开发环境,使用了Docker的讨论
这是LACS 2018年复活节日历的第四天。
工作或私人生活中我都很少写代码,所以我开始想要做些开发了。
如果是这样,我们就需要准备开发环境,但是我觉得在本地电脑上准备新环境也挺烦的呢。
所以,在任何地方都可以轻松进行开发,这真是方便啊。
我听说过Docker用于开发环境,但说实话我并不太了解。
我想尝试一下Docker!这就是我的动机。
这次我们将简单介绍Docker,并讨论如何快速搭建开发环境。
虽然可能有些晚了,而且没有什么新意,但还是希望能得到大家的陪伴。
Docker是什么?
Docker是一个可以创建、分发和运行容器化虚拟环境的平台。
使用Docker的好处如下:
-
- ミドルウェアのインストールや各種環境設定をコード化して管理することができる。
-
- コード化したファイルを共有することで、誰にでもOSを気にせず同じ環境を作ることができる。
- スクラップ&ビルドが簡単にできる
通过利用这些特点,可以直接在生产环境中使用作为开发环境的环境,或通过将环境设置编码来共享,从而节省准备开发环境所需的时间。
这次我利用了樱花知识的Docker入门教程进行学习。关于Docker的使用方法部分我会省略,但我会分享一下作为初学者的学习感受。
-
- いいとこ
Dockerイメージが公開されている「Docker Hub」のお影で、簡単に使いたいコンテナを用意できる
自身で作成した各種環境設定をDockerFileとして管理することで、別の場所でも簡単に構築ができる
コンテナを削除してしまえば、手軽に一からやり直しできる
よくなかったとこ
コンテナの停止、Dockerイメージの削除などが面倒・・・
Dockerイメージ・コンテナが簡単に作れてしまうだけにきちんと管理しておかないとどんどん増やしてしまう
尝试创建一个简单的Golang开发环境。
我打算试着搭建原本的开发环境。我计划创造以下类似的东西。
如果想要创建这样的结构,就需要准备多个Docker镜像和容器,并进行启动和停止的管理。
尝试仅使用Docker执行这个任务时,发现这其实相当困难的。。。
这次我们将使用名为”Docker Compose”的工具来简化这个问题,创建一个Golang的开发环境。
选择Golang并没有特别的意义。(如果非要说的话,可以说Docker是用Golang编写的)
准备好
为了使用Docker Compose,需要调整目录结构,按照以下方式进行构建。
<任意のディレクトリ>
|-- Dockerfile
|-- docker-compose.yml
|-- main.go
每个文件的创建方式如下所示。
docker-compose.yml 的中文翻译:
version: '3'
services:
app:
build: .
build指定了Dockerfile所在的目录。
有关其他详细信息,请参阅官方参考资料。
Dockerfile 让您能够定义并创建 Docker 镜像的文件。
#ベースのDockerイメージをgolangで指定
FROM golang:latest
#ワークディレクトリを設定する
WORKDIR /go
#ホストのディレクトリを/go配下にコピー
ADD . /go
#main.goを実行
CMD ["go", "run", "main.go"]
我在评论中简单提到了,但详细的内容请像往常一样参阅官方参考资料。
主要的.go文件
package main
import "fmt"
func main() {
fmt.Println("Hello, Go World")
}
根据你能看到的情况来说,只是输出了“Hello, Go World”罢了。
因为我刚开始学习golang,所以请多多包涵……
进行
只需要一个选项:只需要在docker-compose.yml文件所在的同一层级目录中执行docker-compose build命令,即可创建Docker镜像。
创建完成后,应该可以创建出两个Docker镜像,如下所示。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
app_app latest 07d424d7d085 3 minutes ago 774MB
golang latest df6ac9d1bf64 2 weeks ago 774MB
只需执行docker-compose up来创建容器。
$ docker-compose up
Starting app_app_1 ... done
Attaching to app_app_1
app_1 | Hello, Go World
app_app_1 exited with code 0
我做到了。main.go已经成功运行。
如果需要编辑main.go并再次运行,只需要运行docker-compose build命令即可。这样,已经拉取的Docker镜像会保持不变,根据Dockerfile构建镜像时,编辑过的main.go文件会被更新。
如果有了“Docker、Docker Compose和目录结构”,以后无论在哪里都可以编写和执行Golang了。
将目录上传到Git上,还可以进行管理,更加便捷。
“这真是个好东西!”
初学者的共同困扰?曾花费一个小时烦恼的故事。
好了,关于Golang的开发环境已经顺利搭建好了,但我在一个非常无聊的地方卡住了,所以打算介绍一下。
这次卡住的错误是这个。
Service 'app' failed to build: pull access denied for go, repository does not exist or may require 'docker login'
在我登录docker之后,我能够通过docker pull命令成功拉取golang的Docker镜像。不过,正当我这样想着的时候,
聪明的人会立刻明白的。
Docker和Docker Compose对于我这个初学者来说花了很长时间纠结,最终我才意识到。
需要拉取的不是”go”,而是”golang”。
是的。
很愚蠢地,一开始我把Dockerfile写成了下面这样。
FROM go:latest #goなんてないよ
WORKDIR /go
ADD . /go
CMD ["go", "run", "main.go"]
如果一直这样做,当然会被说“仓库不存在”…
虽然感到非常悲伤,但多亏了我开始稍微理解了“docker-compose.yml”和“Dockerfile”的关系。
“这就是年轻啊。”
总结
最初只是想搭建开发环境的时候接触到了 Docker,但它的环境配置简便程度让我稍感惊讶。
当然,使用Docker可以进行进程间通信,在不同的容器中放置数据库,或者将API服务器放置在不同的容器中等等,这样做使应用程序看上去更加“应用程序”的感觉。
(虽然我还没有决定制作什么…)
如果能够更深入地理解,我也想尝试一下Kubernetes之类的工具。
请期待明天起一直到圣诞节节前兄弟会锦集2018的到来。