docker-compose搭建golang本地開發環境


目前僅使用到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中的各項功能了。
方法很笨拙,不知道有不有其他更方便的方法,有的話望指教。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM