你的Docker又又又玩错啦

86 阅读4分钟

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

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

  1. docker ps #查看正在运行的docker容器
  2. docker images #查看docker已经安装的镜像
  3. docker stop 容器id #停止正在运行的docker容器
  4. docker rm 容器id #删除docker容器(前提是先停止运行)
  5. docker rmi 容器id #删除已经pull的镜像
  6. sudo docker exec -it 容器id /bin/bash #进入到容器中(方便操作容器数据)
  7. 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

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