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

      

  • 相关阅读:
    angularJs项目实战!02:前端的页面分解与组装
    angularJs项目实战!01:模块划分和目录组织
    django admin 导出数据简单示例
    django 学习之model操作(想细化)
    6.11大杂烩。。
    InlineModelAdmin对象的学习
    django-salmonella的使用
    python 保留两位小数
    Django 时间与时区设置问题
    Django学习
  • 原文地址:https://www.cnblogs.com/yin5th/p/9604573.html
Copyright © 2020-2023  润新知