部署一个网页Docker+Nginx

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 在docker中运行一个nginx容器,部署一个网页

一、安装docker

1.1 centos 7使用yum安装

# Sep 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CEsudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务sudoservice docker start# 查看vesiondocker version

1.2 配置镜像加速器

阿里云容器镜像服务:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors

关于镜像加速器

使用加速器可以提升获取Docker官方镜像的速速

sudomkdir-p /etc/docker
sudotee /etc/docker/daemon.json <<-'EOF'{
"registry-mirrors": ["加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

1.3 简单操作-运行一个nginx

# 搜索nginx的镜像docker search nginx
# 拉取latest版本的nginx镜像docker pull nginx:latest
# 查看本地存储的镜像docker images
# 运行容器docker run --name nginx -p80:80 -d nginx
# 进入容器内部docker exec -it nginx bash
1.3.1 命令参数说明
  • --name nginx指定容器名称为nginx
  • -p 80:80端口映射,将本地80端口映射到容器内部的80端口
  • -d 设置容器在后台一直运行
  • nginx 指定运行的镜像
1.3.2 其他参数
  • -v 挂载映射目录

二、部署nginx

2.1 复制容器内的nginx的配置文件

docker cp nginx:/etc/nginx /data/nginx

复制过来的结构

image.png

其中目前用到的有nginx.conf配置文件和conf.d文件夹下的default.conf默认配

置文件

说明

文件

挂载路径

容器nginx路径

nginx相关

nginx.conf和conf.d

/data/nginx

/etc/nginx

html路径

html文件夹

/data/nginx/html

/usr/share/nginx/html

日志文件

log文件夹

/data/nginx/logs

/var/log/nginx

2.1.1 拓展

docker cp命令


// 将容器内文件复制到宿主机中

docker cp [容器名称]:/目录 /目录


// 将宿主中的文件复制到容器内部

docker cp /目录 [容器名称]:/目录

2.2 创建其他挂载目录

mkdir-p /data/nginx/{html,logs}

2.3 修改default.conf文件

server {
 
    #端口号    listen       80;
    #定义使用 localhost 访问    server_name  localhost;
 
    #charset koi8-r;    #access_log  /var/log/nginx/host.access.log  main; 
    location / {
        #根目录位置        root   /usr/share/nginx/html;
        #index 文件位置        index  test.html;
    }
 
    #error_page  404              /404.html; 
    # redirect server error pages to the static page /50x.html    #    error_page   500502503504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80    #    #location ~ \.php$ {    #    proxy_pass   http://127.0.0.1;    #} 
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000    #    #location ~ \.php$ {    #    root           html;    #    fastcgi_pass   127.0.0.1:9000;    #    fastcgi_index  index.php;    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;    #    include        fastcgi_params;    #} 
    # deny access to .htaccess files, if Apache's document root    # concurs with nginx's one    #    #location ~ /\.ht {    #    deny  all;    #}}

2.4 在html文件夹下创建test.html网页

<html><head><title>Mynginx</title></head><body><h1>Hello Nginx!!!
</h1></body></html>

2.5 删除之前创建的容器

docker stop nginx
docker rm nginx

2.6 创建新的容器

docker run --name nginx -d-p80:80 \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/logs:/var/log/nginx \
# 上面因为已经将nginx容器中的nginx文件夹整个cp过来的# 这里将挂载映射整个文件夹# 为后面实现ssl做铺垫-v /data/nginx:/etc/nginx \
nginx

2.7 不停止nginx更新配置文件

2.7.1 第一种
# 进入到nginx容器的内部docker exec -it nginx bash# 测试配置文件是否有问题,显示successful证明配置文件没有问题nginx -t# 更新nginx -s reload
2.7.2 第二种

第一种是进入到容器内部,有些繁琐

下面将两者整合

# 后面的nginx -t是nginx的命令docker exec [容器名称(nginx)] nginx -t# 后面的nginx -s reload是nginx的命令docker exec [容器名称(nginx)] nginx -s reload

三、配置ssl

3.1 购买阿里云的免费证书

阿里云每年可以有20张免费的证书,即可以为20个域名提供ssl

https://yundun.console.aliyun.com/?p=cas#/certExtend/free

3.2 创建证书关联域名解析

image.png

image.png

域名解析:https://dns.console.aliyun.com/#/dns/domainList

完成签发之后,状态这一栏会是这个样子

image.png

继续点击“下载”,下载我们需要的服务器证书,这里选择nginx

image.png

3.3 配置证书

3.3.1 创建证书存放目录
mkdir /data/nginx/ssl
3.3.2 上传证书

将下载的证书解压,上传到这个存放目录中

会有xxx.pem和xxx.key这两个文件

image.png

由于我们在运行容器的时候已经挂载了-v /data/nginx:/etc/nginx

这个时候我们进入到容器内部

docker exec -it nginx bash

在/etc/nginx/ssl文件夹中发现这两个文件

cd /etc/nginx/ssl
ls-lh
3.3.3 查看挂载配置
docker inspect nginx

image.png

3.4 修改配置文件

配置方式可以使用下载证书旁边的帮助,在Nginx或Tengine服务器上安装证书

#以下属性中,以ssl开头的属性表示与证书配置有关。server {
    listen 443 ssl;
#配置HTTPS的默认访问端口为443。#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。    server_name yourdomain;
    root html;
    index index.html index.htm;
    ssl_certificate /etc/nginx/ssl/cert-file-name.pem;  
    ssl_certificate_key /etc/nginx/ssl/cert-file-name.key; 
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。    ssl_prefer_server_ciphers on;
    location / {
        root html;  #Web网站程序存放目录。        index index.html index.htm test.html;
    }
}
# 注意 以下代码片段需要放置在nginx.conf文件中server {}代码段后面,即设置HTTP请求自动跳转HTTPS后,nginx.conf文件中会存在两个server {}代码段。server {
    listen 80;
    server_name yourdomain; #需要将yourdomain替换成证书绑定的域名。    rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。    location / {
        index index.html index.htm test.html;
    }
}

3.5 刷新配置文件

docker exec nginx nginx -tdocker exec nginx nginx -s reload

访问配置的域名,就会看到自己创建的界面了

image.png

由于我们没有将/usr/share/nginx/html中的原始默认页面cp过来,所以不会看到熟悉的nginx的默认页面。

目录
相关文章
|
3天前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
144 91
|
4天前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
19天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
12天前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
71 44
|
1月前
|
前端开发 应用服务中间件 nginx
docker安装nginx,前端项目运行
通过上述步骤,你可以轻松地在Docker中部署Nginx并运行前端项目。这种方法不仅简化了部署流程,还确保了环境的一致性,提高了开发和运维的效率。确保按步骤操作,并根据项目的具体需求进行相应的配置调整。
121 25
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
58 23
|
23天前
|
SQL Java Maven
docker部署apollo
docker部署apollo步骤
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
49 22
|
1月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
66 25
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
96 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈