Dockerfile部署golang,docker-compose

使用go镜像打包,运行在容器内

redis和mysql用外部的

项目目录结构 w1go项目:

Dockerfile

bash 复制代码
# 这种方式是docker项目加上 本地的mysql和redis环境
# go打包的容器
FROM golang:alpine AS builder

# 为我们镜像设置一些必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64 \
	GOPROXY=https://goproxy.cn,direct

# 移动到工作目录:/build
WORKDIR /build

# 复制当前目录项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 复制代码
COPY . .

# 编译代码 -o w1
RUN go build -o w1 ./w1


#创建一个小镜像
FROM scratch

#静态文件
#COPY ./log /log
#COPY ./config /config

# 从builder镜像中把/dist/ww 拷贝到当前目录
COPY --from=builder /build/w1 /

#Entrypoint指令用于设定容器启动时第一个运行的命令及其参数,后面的值就是参数
ENTRYPOINT ["/w1"]

打包镜像,运行

bash 复制代码
docker build -t goww .
docker run -d -p 18888:8888 --name goww1 goww

关联其他容器

上面示例使用的方式是Docker+本地的mysql环境

创建mysql容器 参考 Dockerfile构建mysql

bash 复制代码
#mysqlww4 容器名,mysqlww4 是go代码里面链接mysql的路径
docker run -d -p 18880:8888 --name goww4 --link=mysqlww4:mysqlww4 goww4
go 复制代码
dsn := "root:root@tcp(mysqlww4:3306)/test?charset=utf8&parseTime=True&loc=Local&timeout=10s"

docker-compose 整合

目录

wait-for-it 官方下载

docker-compose.yml

bash 复制代码
# yaml 配置
version: "3.7"
services:
  mysql56:
    image: mysql:5.6
    restart: "always"
    ports:
      - 33065:3306
    command: "--default-authentication-plugin=mysql_native_password --init-file /data/application/test.sql"
    # 账号密码
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: "test"
      MYSQL_PASSWORD: "root"
    # 文件夹以及文件映射
    volumes:
      - ./test.sql:/data/application/test.sql
      - /dockerval/compose5/mysql:/var/lib/mysql
  redis626:
    # 镜像版本号
    image: redis:6.2.6
    # 端口号
    ports:
      - 18100:6379
    # 失败后总是重启
    restart: "always"
    # 以配置文件的方式启动 redis.conf
    # command:"redis-server /etc/redis/redis.conf --appendonly yes"
    # 文件夹以及文件映射
    volumes:
      - /dockerval/compose5/redis:/data
  w1:
    build: .
    restart: "always"
    # shell脚本方式启动 执行顺序
    command: ["/wait-for-it.sh","mysql56:3306","--","/w1"]
    # 依赖启动项
    depends_on:
      - mysql56
      - redis626
    ports:
      - 18805:8888

Dockerfile

bash 复制代码
FROM golang:alpine AS builder

# 为我们镜像设置一些必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64 \
	GOPROXY=https://goproxy.cn,direct

# 移动到工作目录:/build
WORKDIR /build

# 复制当前目录项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 复制代码
COPY . .

# 编译代码 -o w1
RUN go build -o w1 ./w1


#创建一个小镜像
FROM debian:stretch-slim

#静态文件
COPY ./wait-for-it.sh /
#COPY ./log /log
#COPY ./config /config

# 从builder镜像中把/build/ww 拷贝到当前目录
COPY --from=builder /build/w1 /

RUN chmod 755 wait-for-it.sh

#Entrypoint指令用于设定容器启动时第一个运行的命令及其参数,后面的值就是参数
#ENTRYPOINT ["/w1"]

go连接mysql: root:root@tcp(mysql56:3306)/test?charset=utf8&parseTime=True&loc=Local&timeout=10s

执行命令:docker-compose up (docker-compose up -d是后台运行)

如果是修改需要重新构建执行:docker-compose build

相关推荐
鸡鸭扣20 分钟前
Docker:3、在VSCode上安装并运行python程序或JavaScript程序
运维·vscode·python·docker·容器·js
paterWang1 小时前
基于 Python 和 OpenCV 的酒店客房入侵检测系统设计与实现
开发语言·python·opencv
东方佑1 小时前
使用Python和OpenCV实现图像像素压缩与解压
开发语言·python·opencv
我真不会起名字啊2 小时前
“深入浅出”系列之杂谈篇:(3)Qt5和Qt6该学哪个?
开发语言·qt
神秘_博士2 小时前
自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone
arm开发·python·物联网·flutter·docker·gitee
laimaxgg2 小时前
Qt常用控件之单选按钮QRadioButton
开发语言·c++·qt·ui·qt5
水瓶丫头站住2 小时前
Qt的QStackedWidget样式设置
开发语言·qt
小钊(求职中)3 小时前
Java开发实习面试笔试题(含答案)
java·开发语言·spring boot·spring·面试·tomcat·maven
人工干智能3 小时前
科普:“Docker Desktop”和“Docker”以及“WSL”
运维·docker·容器
落笔画忧愁e4 小时前
FastGPT及大模型API(Docker)私有化部署指南
运维·docker·容器