Back
Featured image of post Docker部署web+mysql

Docker部署web+mysql

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
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy