首页 > 其他分享 >【Docker】临时起意用docker在阿里云ECS上部署项目遇到的坑

【Docker】临时起意用docker在阿里云ECS上部署项目遇到的坑

时间:2024-04-19 11:34:07浏览次数:36  
标签:ago 0.0 tcp nginx ECS 起意用 docker com

我的小项目用到了两个springboot搭建的模块,还有mysql,redis,rabbitmq。因为不了解docker中网络协议栈的隔离而导致一个简单的部署花了我一天时间。

关于容器之间端口的映射,可以运行如下命令来查看:

[root@iZwz9337zr98g77j7a141hZ ~]# docker ps -a
CONTAINER ID   IMAGE                                                                           COMMAND                  CREATED        STATUS                      PORTS                                                                                                                                NAMES
3f5349e334af   registry.cn-hangzhou.aliyuncs.com/cloudm/cms:v2                                 "/start.sh"              44 hours ago   Exited (137) 43 hours ago                                                                                                                                        webapp_pay
1c905e1e91d7   registry.cn-hangzhou.aliyuncs.com/cloudm/cms:v2                                 "/start.sh"              47 hours ago   Up 43 hours                 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 8082-8083/tcp                                                                             webapp_mall
c9ae22860793   registry.cn-shanghai.aliyuncs.com/springcloud-imooc/rabbitmq:3.8.2-management   "docker-entrypoint.s…"   2 days ago     Up 2 days                   4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp   rabbitmq
f66bb324b578   redis:5.0.7                                                                     "docker-entrypoint.s…"   2 days ago     Exited (0) 8 hours ago                                                                                                                                           redis
da4ab80b213b   registry.cn-hangzhou.aliyuncs.com/cloudm/nginx:v1                               "nginx -g 'daemon of…"   6 months ago   Up 2 days                   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp                                                             nginx
60b78af04220   registry.cn-hangzhou.aliyuncs.com/cloudm/mysql:winery01v1                       "docker-entrypoint.s…"   6 months ago   Up 47 hours                 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                                                                 mysql

在运行时可以简单的指定端口号之间的映射,下面是一个简单的例子。

docker run -d XXXXX -p host:container_host

 

参考:

docker通过容器访问宿主机器 - 知乎 (zhihu.com)

Docker部署Tomcat(注意tomcat的容器端口,宿主机端口以及外网访问端口的关系)_容器端口和宿主机端口-CSDN博客

如何优雅的关闭容器,看这一篇就够了 - 知乎 (zhihu.com)

一文读懂Docker原理 - 廖雪峰的官方网站 (liaoxuefeng.com)

 

简单记录下部署的流程。

1、nginx配置

由于nginx在ECS中已经搭建好,所以我选择了直接搜索nginx.conf文件来进行反向代理的配置,并把已经编译好的前端代码放在了nginx的html文件夹下。

在终端中运行:

 find / -name nginx.conf

修改nginx.conf,注意配置主页所在的html目录,和转发给springboot后台程序的代理:

erver {
        listen       80;
        server_name  localhost;
     
# 配置前端文件的路径 location / { root html; index index.html index.htm; }       
    
     # 前端发给后台的请求,/api/是请求的格式,172.17.0.1是宿主机localhost在docker容器中的映射 location /api/ { proxy_pass hTTP://172.17.0.1:8080/; } }

浏览器中输入公网IP,确认能够看到前端主页。

2、配置msyql、rabbitmq和redis

为了使得浏览器可以访问到服务器的15672端口,需要在阿里云控制台修改安全组策略,这里是有风险的操作,因为可能会使得自己的服务器被攻击,我这里只是测试。

 修改完之后运行mq容器,登录后台页面,创建需要的channel(过程略)。

另外,运行mysql时不知道要从哪里看默认的root密码,所以只能修改my.cnf文件来免去密码输入(汗)。

建库、执行导入数据库脚本的过程略去。

3、打包jar文件,新开java容器运行

在项目对应的.yml文件中配置好生产环境要用的IP和端口号,注意这里的逻辑是转发给宿主机中其他容器暴露给外界的端口:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    url: jdbc:mysql://172.17.0.1:3306/mall?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
  redis:
    host: 172.17.0.1
    port: 6379
  rabbitmq:
    addresses: 172.17.0.1
    port: 5672
    username: guest
    password: guest

执行打包命令:

mvn clean package

将target目录下的jar包copy到云服务器上,不想装其他软件,让WSL中的scp代劳:

scp XXX-0.0.1-SNAPSHOT.jar root@XXX:XXX:XXX:XXX:

再用docker cp命令将文件复制给创建好的容器,最后用java -jar命令启动项目就好了。

逆天的来了,由于我的服务器只有2G,所以两个SpringBoot项目无法同时运行...不过每个模块单独上线时都测试过了基本功能,就当是成功部署了吧 :(

标签:ago,0.0,tcp,nginx,ECS,起意用,docker,com
From: https://www.cnblogs.com/fadingecho/p/18145452

相关文章

  • docker容器内部CLOSE_WAIT调优
    这2天遇见一个神奇的事情使用netstat-pan|grepCLOSE_WAIT|wc-l命令对docker宿主机上CLOSE_WAIT状态统计出来为0,进入到容器内部发现CLOSE_WAIT状态已经600多了。来吧,操作起来,先研究研究官方文档https://docs.docker.com/compose/compose-file/05-services/如何配置首先我们需......
  • docker - [03] docker原理
    题记 一、Docker是怎么工作的Docker是一个CS(Client-Server)结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问、DockerServer接收到DockerClient的指令就会执行、 二、Docker为什么比虚拟机快1、docker有着比虚拟机更少的抽象层2、docker利用的是宿主......
  • [转]AspNetCore容器化(Docker)部署(二) —— 多容器通信
    一.前言着上一篇 AspNetCore容器化(Docker)部署(一)——入门,在单个容器helloworld的基础上引入nginx反向代理服务器组成多容器应用。 二.配置反向代理转接配置转接头。详见:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2......
  • [转]AspNetCore容器化(Docker)部署(一) —— 入门
    一.docker注册安装WindowsDockerDesktop https://www.docker.com/products/docker-desktopLinuxDockerCE https://docs.docker.com/install/linux/docker-ce/ubuntu/本文使用Windows环境Linuxcontainer做演示,安装完后切换到Linuxcontainer,“SwitchtoLinuxcontainers......
  • [转]AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
    一.前言                          (Jenkins、Docker、Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色角色环境功能开发机Win10、Docker(LinuxOS)编码、调试发布机(与开发机共享)Win10......
  • [转]AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排
    一.前言上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来。如果该应用继续引入mysql、redis、job等若干服务,到时候发布一次得工作量之大就可想而知了,这时候就需要用到DockerCompose。DockerCompose是一个用于定义和运行多容器Docker应用程......
  • 在Linux中,如何使用Docker和Kubernetes管理容器?
    在Linux中,使用Docker和Kubernetes管理容器涉及多个步骤,这些步骤涵盖了从安装到配置、部署和维护的整个过程。下面将详细解释这些步骤:一、Docker的使用安装Docker:首先,需要从Docker的官方网站或Linux发行版的软件仓库中下载并安装Docker。安装完成后,可以使用docker命令行工具进......
  • docker也能跑windows了
    地址https://github.com/dockur/windowscomposerversion:"3"services:windows:image:dockurr/windowscontainer_name:windowsenvironment:VERSION:"win11"devices:-/dev/kvmcap_add:-NET_ADMIN......
  • hyperf windows使用docker搭建开发环境
    2024年4月13日23:44:16首先安装好docker注意:powershell是不支持命令换行符的dockerrun--namehyperf-vD:/code:/data-w/data-p9501:9501-it--privileged-uroothyperf/hyperf:8.1-alpine-v3.18-swoole或者使用最新版本dockerrun--namehyperf-vD:/code:/dat......
  • Docker学习记录
    docker官方文档https://docs.docker.com/engine/install/ubuntu/docker全球镜像仓库https://hub.docker.com/1、docker的安装1.1、卸载旧版首先如果系统中已经存在旧的Docker,先卸载:但是不同的系统,卸载方式不一样!!!Ubuntu系统:apt-getautoremovedockerdocker-cedocker-......