你的Docker又又又玩错啦

2023年 10月 12日 60.3k 0

本篇文章将带你从Docker的角度安装部署Mysql、Redis、RabbitMq、Nginx并且配置SSL证书入手。

首先Docker一些部署常用的基本命令告诉大家

  • docker ps #查看正在运行的docker容器
  • docker images #查看docker已经安装的镜像
  • docker stop 容器id #停止正在运行的docker容器
  • docker rm 容器id #删除docker容器(前提是先停止运行)
  • docker rmi 容器id #删除已经pull的镜像
  • sudo docker exec -it 容器id /bin/bash #进入到容器中(方便操作容器数据)
  • docker cp 容器目录 宿主机目录(就是你的服务器文件目录) #将容器内的文件拷贝到你的宿主机中
  • 基本部署用到这几个命令就足够了

    v2-e81734db05e656837e2c35351e1455ab_1440w.webp

    ps:可别问容器id是啥(那我可要揍人了)

    接下来就是正式的部署了

    第一步:

    yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo 
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    #配置阿里云镜像源
    yum install -y docker-ce 
    systemctl start docker
    #安装运行docker
    docker pull mysql 
    docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 -d mysql
    #拉取Mysql镜像,然后启动Mysql容器,启动后可以通过docker ps查看下是否启动
    docker pull redis
    docker run --name redis --restart=always -p 6379:6379 -d redis --requirepass "密码"
    #拉取redis镜像,然后启动redis
    docker pull rabbitmq:management
    docker run --name rabbit --restart=always -p 15672:15672 -p 5672:5672 -d rabbitmq:management
    #拉取rabbitmq镜像,并且启动
    

    第二步:

    服务器的安全组开放上面运行的端口,网上很多什么关闭防火墙之类的没那么麻烦,服务器端口放开,运行你的服务器ip加上rebbitmq的端口15672;如果出现以下界面就代表你的安装已经ok啦。
    

    image.png
    如果你没有需要用到rabbit,例如mysql,你本地用数据库连接工具连接一下测试也可以。

    第三步:

    我这里将nginx单独拆解出来。

    docker pull nginx
    #拉取nginx镜像
    mkdir /banyan/nginx/html -p
    mkdir /banyan/nginx/log -p
    mkdir /banyan/nginx/cert -p
    #在宿主机(指你的服务器,后文提到的宿主机一概这个意思)新建文件夹
    docker run -p 80:80 --name banyan-nginx 
    -v /banyan/nginx/html:/usr/share/nginx/html 
    -v /banyan/nginx/logs:/var/log/nginx  
    -d nginx
    #先运行一次nginx,为了将你容器内的文件拷贝宿主机中
    docker container cp banyan-nginx:/etc/nginx /banyan/nginx/
    #然后将容器内的文件拷贝到宿主机
    mv nginx conf
    #进入到宿主机的/banyan/nginx目录,将nginx文件夹改成conf
    docker stop banyan-nginx
    #停止容器
    docker rm banyan-nginx
    # 删除容器
    docker run -p 80:80 -p 443:443 --name banyan-nginx 
    -v /banyan/nginx/html:/usr/share/nginx/html 
    -v /banyan/nginx/logs:/var/log/nginx  
    -v /banyan/nginx/conf:/etc/nginx 
    -v /banyan/nginx/cert:/etc/nginx/cert 
    -v /usr/local/vue:/usr/local/vue 
    -v /usr/local/upload:/usr/local/upload 
    -d nginx
    #重新挂载运行容器(这里的挂载目录可以根据你自己需要多少挂载,因为我是前后端分离部署,所以我还挂载了vue目录和upload文件上传目录)
    

    第四步:

    我这里用的阿里云免费的SSL证书,其他腾讯云的类似操作,登录阿里云,找到搜索SSL证书到这个页面,然后点击申请证书,绑定你自己申请好的域名。
    image.png
    然后下载证书
    image.png
    这里我们使用nginx配置证书,所以我们选择nginx下载

    下载完解压之后皆可以上传证书到宿主机的/banyan/nginx/conf/cert目录下

    第五步:

    最关键的一步来了,编辑nginx配置文件
    在宿主机的/banyan/nginx/conf/conf.d目录下新建立api.conf和admin.conf文件(我这里前后端分离,所以建立了两个,你们可以根据自身情况调整),这里解释下为什么新建conf文件,因为宿主机的/banyan/nginx/conf下的nginx.conf文件里面有include了配置文件贴个图大家就懂了

    image.png

    api.conf文件参考配置如下

    server {
        listen 80;
        listen 443 ssl;   
        server_name  xxxx.top; #你的域名
        ssl_certificate /etc/nginx/cert/xxxx.xxxx.top.pem;  #你的证书的pem文件地址
        ssl_certificate_key /etc/nginx/cert/xxxx.xxxx.top.key;     #你的证书的key文件地址
        ssl_session_timeout 5m;                                        
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        
         location / {
                root   /usr/local/vue/blog; #你的前端页面存放地址
                index  index.html index.htm;
                try_files $uri $uri/ /index.html;
            }
    		
            location ^~ /api/ {
                proxy_pass http://xxxxx:8080/; #你的后端接口地址
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
    }
    

    ps:如果你有多个域名需要转发配置,复制多个修改即可。这里可能有同学有的只需要转发端口不用映射页面地址,我在给出参考示例

    server {
        listen 80;
        listen 443 ssl;   
        server_name  xxx.xxx.xxx.top;  #域名
        ssl_certificate /etc/nginx/cert/xxx.xxx.xxx.top.pem;  #证书地址
        ssl_certificate_key /etc/nginx/cert/xxx.xxx.xxx.top.key;   #证书地址    
        ssl_session_timeout 5m;                                        
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        
          location / {
              proxy_pass http://xxx.xxx.xxx.xxx:3000/websocket; #需要转发的端口地址
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "Upgrade";
              proxy_set_header Host $host:$server_port;
              proxy_set_header X-Real-IP $remote_addr; 
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
              proxy_set_header X-Forwarded-Proto $scheme; 
           }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
    }
    

    结尾:

    以上配置完后记得重启nginx容器哦

    v2-bcbf217da7530457a7cbdfea30cd1ae9_1440w.webp
    这里留个小彩蛋:如果重启发现nginx启动不了,可以根据这个命令查看日志

    docker inspect --format '{{.LogPath}}' 容器id

    希望大家用不到彩蛋的命令哈哈(手动狗头)

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论