目前僅使用到mysql,golang, redis
目錄結構:
yin5th@yin5th:~/code/docker/compose-golang$ tree
.
├── docker-compose.yml
└── golang
└── Dockerfile
docker-compose.yml
version: "3"
services:
golang:
build: ./golang
ports:
- "8088:8088"
links:
- "mysql"
- "redis"
volumes:
- $HOME/code/go:/go
tty: true
mysql:
image: mysql:5.7
ports:
- "3306:33066"
volumes:
- /home/code/data/golang-mysql/:/var/lib/mysql/
environment:
MYSQL_ROOT_PASSWORD: 123456
redis:
image: redis
ports:
- "6379:63791"
注意,上述代碼中:
1.golang容器下 tty: true 必須 否則在執行docker-compose up -d時 golang容器將退出
2.golang容器下 volumes 是把本地所有的源碼都映射到容器中。僅在本地開發時使用,上線部署時不可。
golang Dockerfile
FROM golang RUN apt-get update && apt-get install -y vim WORKDIR $GOPATH/src EXPOSE 8088
構建容器
docker-compose up -d
查看所有容器
yin5th@yin5th:~/code/docker/compose-golang$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------
compose-golang_golang_1 bash Up 0.0.0.0:8088->8088/tcp
compose-golang_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp, 0.0.0.0:3306->33066/tcp
compose-golang_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp, 0.0.0.0:6379->63791/tcp
進入golang容器
yin5th@yin5th:~/code/docker/compose-golang$ docker exec -it compose-golang_golang_1 /bin/bash root@7985c5eb48e6:/go/src#
更新dockerfile或者docker-compose.yml文件后 在docker-compose.yml 同路徑下執行 docker-compose down 然后再執行 docker-compose up -d
由於沒有在宿主機安裝golang,所以使用Goland時無法自動提示。而且每次在容器中go get新的包后也無法持久保存。為了解決這個問題,想了一個比較笨的辦法。
1.在golang容器中,把golang的goroot目錄復制一份放到/go路徑下:這樣在宿主機的$HOME/code/go下就有了goroot文件
volumes:
- $HOME/code/go:/go
2.將宿主機中得到的goroot文件另存,然后將另存的文件再一次映射到容器中,於是golang容器中安裝任何庫,都會保存到宿主機中。Goland中指定goroot的地址,就能正常使用ide中的各項功能了。
方法很笨拙,不知道有不有其他更方便的方法,有的話望指教。
