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 镜像