docker后端部署流程及遇到的问题

1.写dockerfile文件 在项目中

FROM centos:7.9.2009
FROM centos:7.9.2009
ENV MYPATH /root/project
WORKDIR  $MYPATH
RUN yum -y update \
&& yum -y install vim \
&& yum -y install git \
&& yum install -y gcc-c++ \
&& yum -y install wget \
&& wget -P /root/ https://studygolang.com/dl/golang/go1.17.11.linux-amd64.tar.gz \
&& tar -zxvf /root/go1.17.11.linux-amd64.tar.gz -C /usr/local \
&& echo export PATH=$PATH:/usr/local/go/bin >> /etc/profile \
&& source /etc/profile && go version \
&& echo "source /etc/profile" >> /root/.bashrc \
&& go env -w GOPROXY=https://goproxy.cn,direct \
&& go env -w GO111MODULE=on \

注意点:(我遇到的bug)

1.第一句一定要写对应自己安装的centos版本写清楚版本号。

2.golang版本下载1.17的不然有的依赖会找不到,在docker上跑自己的项目的时候会报错

golang1.14 undefined: os.ErrDeadlineExceede

2.通过dockerfile文件生成镜像

docker build -f Dockerfile -t centos_go:7.9.2009 .

docker build  -t ImageName:TagName dir
-t − 给镜像加一个Tag
ImageName − 给镜像起的名称
TagName − 给镜像的Tag名
Dir − Dockerfile所在目录

3.生成并运行容器

docker run -it -v /root/project/smart_campus/:/root/project/smart_campus --name smart_campus centos_go:7.9.2009 /bin/bash

--name 为容器指定一个名称
-v 将宿主机目录挂载到容器内  ;格式:宿主机目录:容器目录
-e 设置环境变量,该环境变量看覆盖Dockerfile中的ENV环境变量
-p 需要手动指定一个或多个映射端口号,格式为:主机(宿主)端口:容器端口 -p 80:8080
-P Docker会随机映射一个 49000~49900 的端口到内部容器开放的网络端口
-it 其中,-i以交互模式运行容器 ;-t为容器重新分配一个伪输入终端
-d 后台运行容器,并返回容器ID (没有此参数,容器在前台窗口运行,窗口关,随之关)

-it 开启新的终端,以交互方式进入容器内部(尾部要指定/bin/bash方式);和-d一起使用后,将不会进入容器内部。

注:该写法相当于把docker run命令和docker exec -it 命令合并的效果(区别是:前者run的同时,进入了容器内部,如果exit退出容器,容器状态(通过docker ps -a查看)立马会变成Exited状态;后者就不一样了,以此方式进入容器,然后exit退出容器,不会主动影响容器的原有状态)。


4.生成之后将项目和Dockerfile一起放在主机对应位置(Xftp)这样上一步容器里对应挂载的位置也有了

请添加图片描述

4.进入容器编译并执行项目(目的为了检测和服务器数据库的连接有无问题)

请添加图片描述

进入容器
docker exec -it 容器ID /bin/bash 
进入存放项目的目录
cd smart_campus
编译 
go build  main.go
运行
go run mian.go &
成功了就说明连接数据库没问题

请添加图片描述

注意

第四步不行的,很大可能是因为数据库没有连接上,查看镜像然后生成mysql的容器,可以用Navicat连接上你服务器的数据库试试能不能连上,然后在Navicat中创建对应的数据库可以把本地的表移过来。

这个不会可以参考我的博客

https://blog.csdn.net/m0_52973251/article/details/125308804?spm=1001.2014.3001.5502

5.配置nginx代理

1.拉取nginx镜像

docker pull nginx

2.复制配置文件

docker run --name nginx-test -d nginx  # 创建一个容器
mkdir /root/project/nginx  # 在我们的project文件夹中创建一个nginx文件夹用来存放nginx方面的内容
docker cp nginx-test:/etc/nginx/nginx.conf /root/project/nginx/  # 从nginx容器中复制出配置文件 (不需要进入到容器中)
docker cp nginx-test:/etc/nginx/conf.d /root/project/nginx/
docker stop nginx-test  # 停止容器运行
docker rm nginx-test  # 删除测试容器

#创建正式的nginx容器
docker run -it --name nginx --net host -v /root/project/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/project/nginx/conf.d:/etc/nginx/conf.d -v /root/project/nginx/logs:/var/log/nginx -d nginx

3.配置nginx容器

cd /root/project/nginx/conf.d
cp default.conf smart_campus.conf  # 复制一遍默认的配置文件
vim smart_campus.conf

把下面的内容放到smart_campus.conf文件中

下面是关于nginx的配置坑很多有兴趣可以看看

https://blog.csdn.net/qq_46312987/article/details/118895520

upstream myserver {
    server 127.0.0.1:8080;
    # 如果还有的话,可以继续往下写
    # server XXXX;
    # server XXXX;
}

server {
    listen 80;
    listen  [::]:80; 
    client_max_body_size 20m;
    server_name 38.5.15.5;  # 你的服务器地址

    location /blog {
	proxy_pass http://myserver;									# 后端访问端口
    	proxy_set_header   Host    $host;
    	proxy_set_header   X-Forwarded-Proto  $scheme;
    	proxy_set_header   X-Real-IP   $remote_addr;
   	 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
		
	}
#第二种 上面location和这个一样 
#    location /api {  # 如果访问38.5.15.5/api为前缀的话,就会进入到这一块
#        root  html;
#	index index.html index.htm;
#	proxy_pass http://myserver;    # 被转发到127.0.0.1:8080  
#    }
}

修改了配置文件之后,我们需要重启一下nginx容器,重新加载一下配置文件

docker restart nginx

最后

就是有三个容器,然后你在访问你的服务器地址加后缀就访问成功了
请添加图片描述

请添加图片描述

问题

1.go版本问题

golang版本下载1.17的不然有的依赖会找不到,在docker上跑自己的项目的时候会报错

golang1.14 undefined: os.ErrDeadlineExceede

&& wget -P /root/ https://studygolang.com/dl/golang/go1.17.11.linux-amd64.tar.gz \
&& tar -zxvf /root/go1.17.11.linux-amd64.tar.gz -C /usr/local \

在dockerfile中改一下版本

2.go服务没跑起来

可能是数据库连接有问题,解决见上面

3.数据库没连接起来

可能是因为权限不够,本来没这个问题这次遇到了,不过这样设置的话不是很安全

https://blog.csdn.net/shmily_404/article/details/122463609

4.nginx配置文件错误

解决见上面

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值