【Docker】docker安装nginx及端口映射相关配置

news2024/11/24 16:55:22

前言:

最近,在一台新服务器上准备运行一个前端vue项目,服务器上安装了docker,想要尝试试通过docker安装nginx的并运行项目,以下是操作步骤

操作步骤:

一、安装nginx

1、拉取镜像

从docker仓库里拉取最新的镜像

docker pull nginx

2、创建映射目录

需要先在宿主机创建Nginx外部挂载的配置文件( /usr/local/docker/nginx.conf)
(Nginx本身容器只存在/etc/nginx 目录 , 本身就不创建 nginx.conf 文件,当服务器和容器都不存在 nginx.conf 文件时, 执行启动命令的时候 docker会将nginx.conf 作为目录创建 , 这并不是我们想要的结果 。)

# 创建挂载目录
mkdir -p /usr/local/docker/nginx/conf
mkdir -p /usr/local/docker/nginx/log
mkdir -p /usr/local/docker/nginx/html

然后运行nginx容器,并将容器里的文件复制到宿主机对应的文件夹

# 生成容器
docker run --name nginx -p 80:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /usr/local/docker/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /usr/local/docker/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /usr/local/docker/nginx/

复制完容器里对应的文件后,将容器删除重新生成

# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx

# 或使用此命令,删除正在运行的nginx容器
docker rm -f nginx

3、启动容器

使用如下命令启动容器

docker run \
-p 80:80 \
--name nginx \
--restart=always \
-v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/docker/nginx/log:/var/log/nginx \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-d nginx:latest
命令描述
-p 80:80将容器的 80(后面那个) 端口映射到主机的 80(前面那个) 端口
–name nginx容器的名字
–restart=always在Docker重启时,自动重启容器
-v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf挂载nginx.conf配置文件
-v /usr/local/docker/nginx/conf/conf.d:/etc/nginx/conf.d挂载nginx配置文件
-v /usr/local/docker/nginx/log:/var/log/nginx挂载nginx日志文件
-v /usr/local/docker/nginx/html:/usr/share/nginx/html挂载nginx内容
-d nginx:latest本地运行的版本

启动完之后,在浏览器输入ip进行访问,如下页面则意味着启动成功
在这里插入图片描述

二、nginx容器端口映射配置

在上述操作步骤中,我只将80端口与宿主机进行了映射,也就意味着只能使用80端口访问nginx,如果要使用nginx启动多个前端项目的时候,则需要将容器里的多个端口映射到宿主机。有两种方式可以实现。

方式一:启动容器时挂载多个端口

docker run \
-p 80:80 \
-p 8080:8080 \
-p 8081:8081 \
-p 8082:8082 \
--name nginx \
--restart=always \
-v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/docker/nginx/log:/var/log/nginx \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-d nginx:latest

此方式需要一开始就指定好要映射的端口,后面如有增减需要重新运行容器,重新指定,不够灵活

方式二:修改配置文件

1、查看容器ID

# 获取容器/镜像的元数据
docker inspect nginx

输出

[
    {
        "Id": "135254e3429d1e75aa68569137c753b789416256f2ced52b4c5a85ec3849db87", # hash_of_the_container
        "Created": "2020-08-21T09:41:36.597993005Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
...

2、修改之前一定要先停掉容器,否则自动还原

docker stop nginx

3、进入到容器目录(用前面获取的容器id),修改配置文件hostconfig.json

cd /var/lib/docker/containers/135254e3429d1e75aa68569137c753b789416256f2ced52b4c5a85ec3849db87 # container id
vim hostconfig.json

找到端口绑定,添加端口

... # 略
"PortBindings": {
    "80/tcp": [
        {
            "HostIp": "",
            "HostPort": "80"
        }
    ],
    "8080/tcp": [
        {
            "HostIp": "",
            "HostPort": "8080"
        }
    ],
    "8189/tcp": [
        {
            "HostIp": "",
            "HostPort": "8189"
        }
    ]
},
... # 略

修改config.v2.json
同路径下打开config.v2.json,修改:ExposedPorts

"ExposedPorts": {
    "80/tcp": {},
    "8080/tcp": {},
    "8189/tcp": {}
},
... # 略

很多文章中提到还要修改Ports,实际上是不需要的,只有在你没有stop容器时,Ports才会有值,如果关闭了容器,就是null。当然如果你修改了也无所谓,因为重启容器后,就会被刷新。

4、保存、退出、重启容器

# 重启docker服务
sudo systemctl restart docker.service 
# 启动容器
docker start nginx 

至此,端口添加成功,可以配置端口进行访问啦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

unaipp打包app启动界面配置

1、配置代码 2、IOS端启动界面demo参考 iOS平台自定义storyboard启动界面 - DCloud问答

面试官当面夸奖了我,反手却把我挂了,这是什么套路?

最近几个朋友找我聊天,给我讲述了面试过程中遇到的一些不太理解的事情。我有个朋友作为一个技术面试官,今天来分享 10 个面试相关的套路。 1.自我介绍 自我介绍是一个重要的开始,好的开始是成功的一半。不需要太多花里胡哨的东西&#xff0…

SpringBoot05:自动配置原理

一、自动配置原理 SpringBoot官网 1、分析自动配置原理 以HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理 //表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件 Configuration(prox…

解决阿里qiankun微应用资源无法加载

公司老项目多了,却想用新版本的框架,最好的解决办法就是用微前端。 本文说下我们在用阿里微前端框架qiankun,遇到的一些问题,以及一些巧妙的解决办法。 背景 因为接入微前端很长时间了,导致现在的微应用变成了实际意…

Python接口自动化测试之UnitTest详解

基本概念 UnitTest单元测试框架是受到JUnit的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。 它分为四个部分test fixture、TestC…

【LeetCode】149. 直线上最多的点数

149. 直线上最多的点数(困难) 枚举直线 哈希表统计 思路 遍历每两个点之间的连线,然后计算这条连线上有多少个点。 具体步骤如下: 初始化最大点数为 0。遍历每个点,用它和其他点计算斜率。如果两个点的x坐标相同&…

7月大概率加息25bp!美股螺旋式下跌,加密市场“迎难而上”!

今年6月,美股标普500指数走出了自1948年以来最长的熊市,进入新的牛市,美联储暂停加息给全球资本市场一个喘息的机会。尽管如此,美国目前经济基本面的情况仍不及预期,股市其上涨态势恐怕将会迎来一轮调整。 以Solita Ma…

资深开发竟然不清楚int(1)和int(10)的区别

一、困惑 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx ADD user_id int(1)。领导看到我的sql工单,于是说:这int(1)怕是不够用吧,接下来是一通解释。…

做一个小程序需要多少钱

做一个小程序要多少钱,这种分2种类型 定制版 定制版就是按着客户的需求来做了。首先是聊需求,然后画思维导图,做原型图,做完原型图,就是做UI设计,然后做前端,后端。这个费用下来大概几千元到几…

Rust 第五天—代码组织管理

通过之前的内容介绍,对Rust或多或少有了一些了解.也许现在还不能写出“像样子”的项目,但是把大量代码堆积写在一个文件中依旧是不可取的.今天的内容相对轻松一些,聊聊Rust的包和模块 Rust的模块系统可以划分为Package,Crate,Module,具体可以总结如下: Package:整个项目Crate…

【hadoop】Linux安装和配置

安装 RedHat Linux 7.4 创建新的虚拟机 选择“自定义(高级)” 选择“下一步” 选择“稍后安装操作系统” 选择操作系统的类型 设置虚拟机名称和保存路径 下一步 下一步 设置网络类型,选择“使用仅主机模式网络” 下一步 下一步 下一步 设置硬…

pytorch笔记:归一化

来自B站视频,API查阅,TORCH.NN layer normalization 是针对单个样本,训练和测试的时候行为一致LN 相对于 BN 更适合 RNN,可以降低训练时间LN 中不同样本有不同的归一化参数,以层计算 a 是输入,f 是每层具…

【LeetCode周赛】2022上半年题目精选集——思维题

文章目录 2211. 统计道路上的碰撞次数(栈 || 脑筋急转弯)解法1:自己想的——使用栈解法2——思维:去掉左右两边往左右开的车代码写法1——找左右端点代码写法2——正则表达式去除流处理api补充:replaceAll() 和 正则表…

VS2022 And QtCreator10 调试 Qt 源码教程

文章目录 背景IDE 调试 Qt 源码Visual Studio 2022Qt Creator 10.0.1 排查思路姊妹篇系列 简 述: 记录使用 Visual Studo 2022 和 QtCreator10 调试 Qt 5.15 源码和 加载 .pdb 的方法。 本文初发于 “偕臧的小站”,同步转载于此。 背景 源码:…

8、动手学深度学习——现代卷积神经网络:AlexNet

1、学习表征 在2012年前,图像特征都是机械地计算出来的。事实上,设计一套新的特征函数、改进结果,并撰写论文是盛极一时的潮流 另一组研究人员,包括Yann LeCun、Geoff Hinton、Yoshua Bengio、Andrew Ng、Shun ichi Amari和Juer…

Java阶段四Day11

Java阶段四Day11 文章目录 Java阶段四Day11Spring AOPElasticsearch1. 关于各种数据库的使用2. 关系型数据库中的索引3. 安装与启动elasticsearch4. 访问elasticsearch5. 使用elasticsearch分词6. elasticsearch文档的相关概念7. 使用elasticsearch添加数据7.1. 添加文档7.2. 查…

Spring Boot 中的分布式追踪及使用

Spring Boot 中的分布式追踪及使用 随着互联网应用程序的复杂性不断增加,分布式系统已经成为了许多企业级应用程序的标配。在分布式系统中,由于服务之间的调用关系错综复杂,很难追踪到一个请求在整个系统中的执行路径和时间,这就…

Python如何提高工作效率,轻松实现读取分数,计算出最高/低分

前言 Python如何读取分数,计算最高/低分 与平均分? 今天这篇文章就来带你学习学习如何实现这个功能~ 环境使用: Python 3.8 解释器 Pycharm 编辑器 涉及知识点 文件读写基础语法字符串处理循环遍历 代码展示 模块 import platform定义获取最高分、最…

AI 语音 - 人声歌曲合成

前情提要 2023-07-02 周日 杭州 阴晴不定 小记: 天生五音不全,唱歌永远找不到调,使用下 AI 通过音色合成下吧,目前才训练 15000 步左右,我准备的数据集其实满打满算也只有 40min 左右的数据集,为了数据预处理有删减了…