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

相关推荐
通信仿真实验室12 分钟前
(10)MATLAB莱斯(Rician)衰落信道仿真1
开发语言·matlab
勿语&15 分钟前
Element-UI Plus 暗黑主题切换及自定义主题色
开发语言·javascript·ui
2401_857622663 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589363 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰4 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer4 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
IT良4 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
哎呦没4 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
Kalika0-05 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch5 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j