zoukankan      html  css  js  c++  java
  • 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中的各项功能了。
    方法很笨拙,不知道有不有其他更方便的方法,有的话望指教。

      

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/yin5th/p/9604573.html
Copyright © 2011-2022 走看看