docker-compose搭建golang本地开发环境

目前仅使用到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

docker-compose up -d

  

查看所有容器

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

2.将宿主机中得到的goroot文件另存,然后将另存的文件再一次映射到容器中,于是golang容器中安装任何库,都会保存到宿主机中。Goland中指定goroot的地址,就能正常使用ide中的各项功能了。
方法很笨拙,不知道有不有其他更方便的方法,有的话望指教。

  

参考文献:

https://www.cnblogs.com/yin5th/p/9604573.html

你可能感兴趣的:(go,docker,docker-compose)