1. 程式人生 > 其它 >golang打包成docker映象

golang打包成docker映象

編寫完了golang專案,準備打包成docker容器上線,以下是簡要說明

一 專案根目錄下編寫dockerfile生成映象並匯出

FROM golang:alpine
MAINTAINER ansirw "******[email protected]"
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 映象