使用go镜像打包,运行在容器内
redis和mysql用外部的
项目目录结构 w1go项目:
Dockerfile
# 这种方式是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"]
打包镜像,运行
docker build -t goww .
docker run -d -p 18888:8888 --name goww1 goww
关联其他容器
上面示例使用的方式是Docker+本地的mysql环境
创建mysql容器 参考 Dockerfile构建mysql
#mysqlww4 容器名,mysqlww4 是go代码里面链接mysql的路径
docker run -d -p 18880:8888 --name goww4 --link=mysqlww4:mysqlww4 goww4
dsn := "root:root@tcp(mysqlww4:3306)/test?charset=utf8&parseTime=True&loc=Local&timeout=10s"
docker-compose 整合
目录
wait-for-it 官方下载
docker-compose.yml
# 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
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