```
version: '3'
services:
app:
image: golang:latest
working_dir: /go/src/example.com/http_demo
volumes:
- /$GOPATH/src/example.com/http_demo:/go/src/example.com/http_demo
- /$GOPATH/src:/go/src
ports:
- "8000:8080"
environment:
WORKING_DIR: /go/src/example.com/http_demo
command: go run /go/src/example.com/http_demo/main.go
```
如果你们项目里不允许就找个目录放这个文件,我自己就是单独有个目录里面放了好几个项目的 `Docker`配置文件,有 `PHP`项目的也有 `Go`项目的。
上面的编排文件里只定义了一个叫 `app`的服务,其他的也很容易理解我就不说了,唯一要注意的一点就是如果 `yml`文件在项目外 `volumes`里的配置就换成绝对路径不要用 `$PWD`了
接下来启动 `docker-compose`:
```
docker-compose up -d
```
如果启动不成功先不要在 `daemon`模式下运行把 `-d`去掉,就能看到具体什么错误,等调试正常了再后台启动。
代码有修改后,需要重新编译项目,针对我们的容器执行下面的命令即可
```
docker-compose restart
```
想要进入运行的容器中执行操作使用命令:
```
docker exec -it <container name> bash
```
给我们创建的 `app`发送 `go test`命令让它在容器内执行:
```
docker-compose exec app go test
```
最近想尝试把老项目换成用 `go mod`管理,项目还是在用 `go1.12`所以我就先用 `Docker`搭环境,容器隔离的环境怎么瞎折腾也没事。今天做的这个开发环境还是很简单的,没有用 `Dockerfile`自己创建镜像, `docker-compose`配置文件里的设置也很简单,后面用着不顺手有更新了我再推送。下面的两篇老文章对 `Docker`镜像和 `docker-compose`讲的都比较深入,例子也多,感兴趣的可以看看。
[教你如何做出想要的PHPDocker镜像](?__biz=MzUzNTY5MzU2MA==&mid=2247483850&idx=1&sn=fa469ad6b5688452f0dc46aee7ec042a&chksm=fa80d05dcdf7594ba178189a7f61b0c134fc1274a2012d0fa40512d998bf2b6d5e375cfc9f36#rd)
[用Docker搭建Laravel开发环境](?__biz=MzUzNTY5MzU2MA==&mid=2247483807&idx=1&sn=061f9a4f6711d7c4550c4f9012d9ad4e&chksm=fa80d008cdf7591edd2373aae91c76b4b13ec8a30a6f55d4f851556a288ca4c25f428910ddd3#rd)
如果自己搭建环境的时候遇到什么问题了,可以在这里留言反馈,也可以在我的公众号里留言反馈。
![](https://user-gold-cdn.xitu.io/2020/1/28/16fea461218705c6?w=450&h=518&f=png&s=35436)