基于 Docker 安装 Nginx 搭建静态服务器[改进]

最近一直在准备家里的服务器部署一个自己用的网站玩玩,一来是用来学习部署的基础知识,二来,后面有空学点前端,可以部署到自己网站玩玩。

 

参考链接:https://juejin.cn/post/7057403454473371661

 

docker的安装先跳过了,前面已经写过博客.

 

1. 先运行一次 nginx,为了拷贝容器内配置文件到本地

docker run -d -p 80:80 --name nginx \
 -v /home/nginx/html:/usr/share/nginx/html \
 -v /home/nginx/logs:/var/log/nginx \
 nginx:latest

 

2. 拷贝容器内配置文件到本地, [将容器内部的配置目录nginx赋值到用户本地目录下并改名目录名字为conf]

docker container cp nginx:/etc/nginx ~/nginx/conf

3. 删除之前的容器

docker stop nginx && docker rm nginx

4. 根据本地配置文件运行新容器

docker run -d -p 80:80 -p 443:443 --name nginx \
 -v ~/nginx/conf:/etc/nginx \
 -v ~/nginx/logs:/var/log/nginx \
 -v ~/nginx/html:/usr/share/nginx/html \
 nginx:latest

如果不需要配置ssl证书开启https访问,此时就可以把这个nginx当作普通静态服务器使用了。

其中~/nginx中的几个文件夹:

conf目录: nginx的配置文件,具体配置可以看官网

html目录: 放静态资源,如html、css、js

logs目录: 日志文件夹,访问的日志可以在其中查看

改了配置文件,记得通过docker restart nginx重启下nginx

 

三、配置 SSL 证书开启 HTTPS 访问[未操作, 后续操作跟新]

2. 把证书解压后上传到证书文件夹

cd ~/nginx/conf/conf.d
mkdir cert

把刚才下载的证书上传到这个文件夹

3. 修改 nginx 配置开启 HTTPS 访问

vi ~/nginx/conf/conf.d/default.conf

写入以下内容

server {
    #SSL 访问端口号为 443
    listen 443 ssl;
    #填写绑定证书的域名
    server_name 0101.ml;
    #证书文件名称
    ssl_certificate /etc/nginx/conf.d/cert/0101.ml_bundle.pem;
    #私钥文件名称
    ssl_certificate_key /etc/nginx/conf.d/cert/0101.ml.key;
    ssl_session_timeout 5m;
    #请按照以下协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    location / {
    #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
        root /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

server {
        listen 80;
        #填写绑定证书的域名
        server_name falser.top;
        #把http的域名请求转成https
        return 301 https://$host$request_uri;
}

需要改的地方:

server_name: 改为自己的域名(两处)

ssl_certificate.crt后缀的证书文件

ssl_certificate_key.key后缀的证书私钥文件

 

刚刚前面写了https的证书申请,现在需要部署nginx,我本人不喜欢服务器上面直接装东西,强迫症,怕到时候装好了,卸载不干净,所以一般能用docker安装就用docker安装

这里我主要写一个关于docker的容器的网关模式,

Docker 容器的网络模式主要有以下几种:

  1. Bridge模式(桥接模式)

    • 默认模式:当你启动一个Docker容器时,默认情况下它会使用bridge网络模式。这种模式会为每个容器分配一个虚拟网卡,并连接到一个桥接网络(类似于虚拟交换机)。
    • 特点
      • 容器之间可以通过内部IP地址通信。
      • 容器可以通过NAT(网络地址转换)与外部网络通信。
      • 可以通过docker network create命令自定义桥接网络。
  2. Host模式

    • 特点
      • 容器不会获得独立的网络命名空间,而是共享宿主机的网络命名空间。
      • 容器直接使用宿主机的IP地址和端口,性能较高。
      • 适用于需要高性能网络通信的应用,但可能会带来端口冲突的问题。
    • 使用方式
      • 启动容器时使用--network host参数,例如:docker run --network host my-container
  3. None模式

    • 特点
      • 容器没有网络功能,相当于隔离网络。
      • 可以通过用户自定义的网络插件或工具来配置容器的网络。
    • 使用方式
      • 启动容器时使用--network none参数,例如:docker run --network none my-container
  4. Container模式

    • 特点
      • 让一个容器共享另一个容器的网络命名空间。
      • 两个容器会共享同一个IP地址和网络接口。
      • 适用于需要紧密耦合的应用,如需要直接内存通信的多容器应用。
    • 使用方式
      • 启动容器时使用--network container:<target-container>参数,例如:docker run --network container:my-container-1 my-container-2
  5. Overlay模式

    • 特点
      • 用于多主机的Docker网络,适用于Swarm和Kubernetes等集群环境。
      • 通过VXLAN技术在多主机之间创建虚拟网络,使不同主机上的容器可以互相通信。
      • 需要一个key-value存储(如Etcd或Consul)来管理网络信息。
    • 使用方式
      • 需要先创建一个overlay网络,例如:docker network create -d overlay my-overlay-network
      • 然后在启动容器时指定该网络,例如:docker service create --network my-overlay-network my-service

每种网络模式都有其适用的场景和优缺点,根据具体的应用需求选择合适的网络模式可以提高容器的性能和灵活性。

 

上面是GPT给的说明,一般我们默认启动的docker使用的都是第一种模式,这种模式下,就好比这个容器跑的时候, 在一个家用路由器下面,容器数据出去会有一个虚拟的网关,容器到网关需要nat转换,虚拟网关通过物理机发送到外网,所以这种情况下,如果不做端口映射,任何docker启动容器之外的进程无法通过网络访问docker容器

所以当运行nginx的容器的时候,我第一时间想到的就是端口映射,但端口映射后续给我带来了一些烦恼.

由于我需要nginx转发一些数据到本地部署的服务,这下需要docker内部的nginx访问外部的绑定127.0.0.1的服务,会导致无法通信

所以我用了比较粗暴的方式,直接使用--network host的形式启动nginx容器,这样的好处就是该容器的启动,就像本地安装的nginx一样的形式
可以直接与服务器运行的进程网络通信,没有任何的网络隔绝

现在回想应该还有第二种形式,就是通过容器间的通讯,nginx还是通过网桥的形式,端口转发的形式启动,然后将nginx转发的服务,也通过docker启动该任务,使两个任务可以在docker内部的网络进行通讯,话说我感觉这也是非常不错的一种方式,感觉比第一种好
 

posted @ 2022-08-08 11:20  就是想学习  阅读(467)  评论(0编辑  收藏  举报