目前仅使用到mysql,golang, redis
目录结构:
1 2 3 4 5 | yin5th@yin5th:~/code/docker/compose-golang$ tree . ├── docker-compose.yml └── golang └── Dockerfile |
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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:3306" 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
1 2 3 4 5 | FROM golang RUN apt-get update && apt-get install -y vim WORKDIR $GOPATH/src EXPOSE 8088 |
构建容器
查看所有容器
1 2 3 4 5 6 | 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->3306/tcp compose-golang_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp, 0.0.0.0:6379->63791/tcp |
进入golang容器
1 2 | 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文件
1 2 | volumes: - $HOME/code/ go :/ go <br><br>2.将宿主机中得到的goroot文件另存,然后将另存的文件再一次映射到容器中,于是golang容器中安装任何库,都会保存到宿主机中。Goland中指定goroot的地址,就能正常使用ide中的各项功能了。<br>方法很笨拙,不知道有不有其他更方便的方法,有的话望指教。 |
参考文献:
https://www.cnblogs.com/yin5th/p/9604573.html
所有评论(0)