Go+Mysql项目阿里云部署(docker)
基于docker的Go-web+Mysql部署
安装docker,拉取mysql镜像
Go-web项目配置文件:
httpEngine:
# addr: "127.0.0.1" # 本地测试
addr: "0.0.0.0" # 对外开放(重要)
port: "8080" # 监听端口
templates: "templates/*"
db: # 数据库配置
# Addr: "127.0.0.1" # 本地数据库
Addr: "mysql" # mysql容器作为数据库(后续用 --link docker网络进行连接)
Port: "3306" # mysql开放端口
User: "root"
Pass: "xxxxxxx"
DB: "yuheng" # 数据库名
DB_MAX_OPEN_CONNS: 20
DB_MAX_IDLE_CONNS: 10
DB_MAX_LIFETIME_CONNS: 7200
basic:
jwt:
secret: "xxxxx"
编写Dockerfile
# syntax=docker/dockerfile:1
FROM golang:1.17-alpine
MAINTAINER cocoshe
WORKDIR /yuheng
COPY . .
RUN export GOPROXY=https://goproxy.io && go mod tidy && go build
EXPOSE 8080
CMD ["./backend"]
区别:
RUN
是docker build的时候(制作image)就早早运行了
CMD
是docker run真正运行的时候执行(多个CMD
则只执行最后一个)
Dockerfile中RUN,CMD和ENTRYPOINT都能够用于执行命令,下面是三者的主要用途:
- RUN命令执行命令并创建新的镜像层,通常用于安装软件包
- CMD命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被
docker run
命令后面的命令行参数替换 - ENTRYPOINT配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行
docker run
时指定了其他命令)
利用Dockerfile制作镜像并上传
docker build -t cocoshe/yuheng:0.2 .
# -t [image name]:[tagname]
# [-f] 若dockerfile名字不是~,那就要用-f来指定
# 最后一个点(.)表示dockerfile在当前目录下
docker push cocoshe/yuheng:0.2
# push到dockerhub仓库
服务器部署
拉取mysql和仓库中自己制作的image
# 后台启动mysql
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxxxx --name mysql01 mysql
# 后台启动go-web 注意--link [mysql容器名]:[在web容器中映射名]
# 阿里云开放的是80端口,web服务监听的是8080,在这里做了一个端口映射(-p)
docker run --name yuheng01 -p 80:8080 --link mysql01:mysql -it -d cocoshe/yuheng:0.2