golang打包成docker鏡像


一 項目根目錄下編寫dockerfile生成鏡像並導出

FROM golang:alpine
MAINTAINER ansirw "******8@163.com"
WORKDIR $GOPATH/src/dianbiao_docker
ADD . ./
ENV GO111MODULE=on
ENV GOPROXY="https://goproxy.io"
RUN go build -o dianbiao_docker .
EXPOSE 5902
EXPOSE 9602
ENTRYPOINT  ["./dianbiao_docker"]

    //執行生成本地鏡像

docker build -t dianbiao_docker .

    //執行導出鏡像

docker save -o dianbiao_img.tar dianbiao_docker:latest

 

二 使用環境變量替代配置文件

  

package structs

type Uwbcfg struct {
	//Wbw     string

	Mysqlusername string
	Mysqlpd string
	Mysqlhost  string
	Mysqlpt   string
	Mysqldb string
}

  

package datavar MysqlDb *sql.DB
var MysqlDbErr error

// 初始化鏈接
func init() {
    cfg := new(Uwbcfg)
    err := env.Fill(cfg)
    m_user := config.MYSQL_USER_NAME
    m_pd := config.MYSQL_PASS_WORD
    m_host := config.MYSQL_HOST
    m_pt := config.MYSQL_PORT
    m_db := config.MYSQL_DATABASE
    if err != nil {
        //panic(err)
        llog.Info("panic: env mysql")
    }else{
        m_user = cfg.Mysqlusername
        m_pd = cfg.Mysqlpd
        m_host = cfg.Mysqlhost
        m_pt = cfg.Mysqlpt
        m_db = cfg.Mysqldb

        if m_user != "" && m_user != "" &&m_user != "" &&m_user != "" &&m_user != "" {
            llog.Info("load env mysql suc")
        }else{
            llog.Info("no env mysql")
            m_user = config.MYSQL_USER_NAME
            m_pd = config.MYSQL_PASS_WORD
            m_host = config.MYSQL_HOST
            m_pt = config.MYSQL_PORT
            m_db = config.MYSQL_DATABASE
        }

    }

    dbDSN := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", m_user, m_pd, m_host, m_pt, m_db, config.MYSQL_CHARSET)

    // 打開連接失敗
    MysqlDb, MysqlDbErr = sql.Open("mysql", dbDSN)
    //defer MysqlDb.Close();
    if MysqlDbErr != nil {
        //panic("數據源配置不正確: " + MysqlDbErr.Error())
        llog.Info("dbDSN: " + dbDSN)
        llog.Info("mysql數據源配置不正確: " +"dbDSN: " + dbDSN+ MysqlDbErr.Error())
    }

    // 最大連接數
    MysqlDb.SetMaxOpenConns(config.MYSQL_MaxOpenConns)
    // 閑置連接數
    MysqlDb.SetMaxIdleConns(config.MYSQL_MaxIdleConns)
    // 最大連接周期
    MysqlDb.SetConnMaxLifetime((config.MYSQL_ConnMaxLifetime)*time.Second)

    if MysqlDbErr = MysqlDb.Ping(); nil != MysqlDbErr {
        //panic("數據庫鏈接失敗: " + MysqlDbErr.Error())
        llog.Info("數據庫鏈接失敗: " + MysqlDbErr.Error())
    }

}

 

三 服務端啟動鏡像導入環境變量

docker run -e DIANBIAOCFG_MYSQLUSERNAME=用戶名 -e DIANBIAOCFG_MYSQLPD=密碼 -e DIANBIAOCFG_MYSQLHOST=地址 -e DIANBIAOCFG_MYSQLPT=端口 -e DIANBIAOCFG_MYSQLDB=數據庫名稱  --name dianbiao_docker -p 5902:5902 -p 9602:9602 -d dianbiao_docker

  

四 補充

  • 查看當前目錄文件大小: du -h –max-depth=1 *
  • 進入運行中的容器:
    sudo docker exec -it epic_aryabhata /bin/bash
    上面不行則用下面的
    sudo docker exec -it epic_aryabhata /bin/sh
  • 查看docker環境變量: docker exec -it dianbiao_docker env
  • docker里手動設置環境變量

    export CONFIG_WBW=wbw

    source /etc/profile

  • 常用命令  docker stop 容器
    docker rm 容器
    docker rmi 鏡像

 

 


免責聲明!

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



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