Docker离线部署Nginx
总体思路:在有网络的环境上制作Nginx的镜像包,导出并上传至无网络的环境上,启动Nginx即可。
在上一篇 《无网环境Docker Rpm离线安装》 里面,已经在联网的机器上安装好了干净的docker环境,接下来就可以安装自己需要的软件镜像了。
docker镜像保存成 tar 归档文件(导出nginx离线镜像包)
- 1,通过docker search : 从Docker Hub查找需要的镜像。
从 Docker Hub 查找所有镜像名包含 nginx,并且收藏数大于 10 的镜像:sudo docker search -f stars=10 nginx如下:

图中第一行列出的是官方发布的nginx镜像。
列字段说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
- 2,拉取镜像。
通过docker pull : 从镜像仓库中拉取或者更新指定镜像:sudo docker pull nginx 如下:


说明: 如果:后不写版本号,则默认拉取最新的。如图实际拉取的是标签为tag: latest的nginx:latest镜像。
- 3,创建容器并启动nginx
拉取下来镜像后还需要创建容器并启动nginx才能使用。
# 创建nginx容器并指定映射端口
sudo docker run -d --name nginx_docker -p 8080:80 nginx:latest
说明:
-d: 后台运行容器
-p :指定容器暴露的端口,映射宿主机端口号和容器端口号
--name:指定容器名字,后续可以通过名字进行容器管理
如图:

如果想删除docker容器可以执行:sudo docker rm -f nginx_docker 后面的参数可以是镜像ID或名称。
- 4,访问测试nginx
浏览器中输入你的ip地址 + 端口号,如下图所示:(成功状态)

- 5,创建宿主机配置文件(用于后续挂载nginx配置文件)
cd /usr/local/
mkdir nginx
cd nginx/
mkdir -vp data html logs ssl conf/conf.d
ll
如图:

说明:
data:资源数据
html:静态资源,一般前端页面
logs:nginx日志
ssl:SSL证书(https)
conf:nginx配置,一般配置缓存、限流在这个里面
conf.d: nginx配置,代理、转发、负载、集群
- 5.1,编辑html文件夹下的index.html
cd /usr/local/nginx/html/
sudo vi index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>成功访问nginx</title>
</head>
<body>
<h1>这是用docker启动的</h1>
</body>
</html>
- 5.2,编辑conf文件夹下的nginx.conf
cd /usr/local/nginx/conf/
sudo vi nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
include /etc/nginx/conf.d/*.conf;
}
- 5.3,编辑conf.d文件夹下的host.conf
cd /usr/local/nginx/conf/conf.d/
sudo vi host.conf
# http转发到后端http
server {
listen 8081;
server_name 10.90.5.70;
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 "http";
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
location / {
proxy_redirect off;
proxy_pass http://10.90.5.70:8081/;
}
}
- 6,创建新的容器并挂载宿主机配置文件启动nginx(开一个相同的服务,端口号不同)
创建新的nginx容器并启动后验证。
# 创建nginx容器并指定映射端口
sudo docker run -d -p 8081:80 --name nginx_docker_2 --restart=always --privileged=true -v /usr/local/nginx/html:/usr/share/nginx/html nginx:latest
如图:

说明:
-d: 后台运行容器
-p :指定容器暴露的端口,映射宿主机端口号和容器端口号
--name:指定容器名字,后续可以通过名字进行容器管理
--restart=always:使容器自动启动
--privileged=true:开启特权模式(如遇到权限问题错误,可加此参数)
-v:挂载宿主机目录和 docker容器中的目录,前面是宿主机目录,后面是容器内部目录
- 7,测试(挂载宿主机配置文件)
浏览器中输入你的ip地址 + 端口号,如下图所示:(成功状态)

- 7.1,进入nginx容器查看版本
# 进入nginx容器
sudo docker exec -it nginx_docker_2 bash
# 查看版本
nginx -v
如图:

- 8,停止并删除容器(测试完废弃了就可以删除)
# 停止并删除容器(容器ID或名称都行)
sudo docker rm -f 97c4b81efbc8
sudo docker rm -f nginx_docker_2
- 9,docker镜像保存成 tar 归档文件(导出nginx离线镜像包)
# 进入nginx容器
sudo docker save -o nginx-v1.23.2-dockerimage.tar nginx:latest
如图:

将镜像包.tar上传至无网络的环境上创建并启动
- 1,将镜像包nginx.tar上传至无网络的环境上执行导入。
docker load : 导入使用 docker save 命令导出的镜像。执行:
# 在.tar所在位置执行
sudo docker load -i nginx-v1.23.2-dockerimage.tar
# 检查本地镜像仓库
sudo docker images
如图(成功):

- 2,直接创建并启动nginx
命令:
# 建议提前创建本地映射目录及配置文件,前面讲过这里不再赘述。
sudo docker run -dit --name nginx_docker -p 8080:80 -p 8081:8081 -p 8443:443 --add-host web1.test.com:10.90.3.101 --add-host web2.test.com:10.90.3.102 --restart=always --privileged=true -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/conf/conf.d/:/etc/nginx/conf.d -v /usr/local/nginx/log:/var/log/nginx -v /usr/local/nginx/html:/usr/share/nginx/html -v /usr/local/nginx/ssl:/etc/nginx/cert nginx:latest
# 上面那一行命令太长不方便阅读,可以改成多行形式(每行末尾反转义换行符),效果是一样的。
sudo docker run -dit --name nginx_docker \
-p 8080:80 \
-p 8081:8081 \
-p 8443:443 \
--add-host web1.test.com:10.90.3.101 \
--add-host web2.test.com:10.90.3.102 \
--restart=always \
--privileged=true \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf/conf.d/:/etc/nginx/conf.d \
-v /usr/local/nginx/log:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/ssl:/etc/nginx/cert \
nginx:latest
# 检查容器运行状态
sudo docker ps -a
如图:

查看容器日志:

说明:
-d: 后台运行容器
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p :指定容器暴露的端口,映射宿主机端口号和容器端口号。指定端口映射,格式为:主机(宿主)端口:容器端口
--volume , -v: 绑定一个卷(本地路径或文件映射)
--name:指定容器名字,后续可以通过名字进行容器管理
--restart=always:使容器自动启动
--privileged=true:开启特权模式(如遇到权限问题错误,可加此参数)
--add-host:使用docker run的--add-host命令选项,将要访问的其他服务器的host和ip加入到/etc/hosts文件。--add-host命令选项表示,在启动容器时,向/etc/hosts文件添加一个host:ip的映射。
- 3,测试
浏览器中输入你的ip地址 + 端口号,如下图所示:(成功状态)

重启docker容器里的nginx服务
如果修改了nginx配置文件,需要重启服务才能生效。
方法一:通过docker命令重启
sudo docker exec nginx_docker sh -c "nginx -t"
sudo docker exec nginx_docker sh -c "nginx -s reload"
如图:

方法二:进入docker容器内执行nginx命令重启
sudo docker exec -it nginx_docker sh
nginx -t
nginx -s reload
Docker离线部署Nginx的更多相关文章
- 在Docker下部署Nginx
在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...
- Docker Compose部署 nginx代理Tomcat集群
一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...
- 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群
庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介 前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...
- 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql
阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...
- Docker应用部署(Nginx、Tomcat)
Docker hub官方链接: https://hub.docker.com 部署Nginx 官方已经给出了方法: https://hub.docker.com/_/nginx 运行容器 $ dock ...
- Linux运维之docker虚拟化部署nginx
一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...
- docker stack 部署nginx
=============================================== 2018/7/29_第1次修改 ccb_warlock == ...
- Docker(二)-在Docker中部署Nginx实现负载均衡(视频教程)
本教程介绍利用Docker部署Nginx服务实现负载均衡. (双击全屏播放)
- docker - compose 部署 Nginx
主要介绍 docker 中 Nginx 的部署及项目目录挂载券的方法.docker 中部署一个服务,有三种方法,分别是 docker run.Dockerfile.docker-compose . 下 ...
- Docker 06 部署Nginx
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...
随机推荐
- IBM 开源的文档转化利器「GitHub 热点速览」
上周的热门开源项目,Star 数增长犹如坐上了火箭,一飞冲天.短短一周就飙升了 6k Star 的多格式文档解析和导出神器 Docling,支持库和命令行的使用方式.全新的可视化爬虫平台 Maxun, ...
- 2022年3月(202203)小米路由R3G(3G)刷openwrt和padavan的总结
本篇文章是本人这2天刷小米路由R3G的记录,中间可能有很多错误,欢迎留言指出. 1.千万别断电 2.刷机的时候要多等待 小米路由很多型号有着很强的可玩性,128M以上的ROM,256M以上的内存,R3 ...
- Linx操作Nginx命令
在 CentOS 上操作 Nginx 包括安装.启动.停止.重新加载配置等.以下是在 CentOS 上操作 Nginx 的常用命令: 安装 Nginx: sudo yum install nginx ...
- Reviewbot 开源 | 这些写 Go 代码的小技巧,你都知道吗?
Reviewbot 是七牛云开源的一个项目,旨在提供一个自托管的代码审查服务, 方便做 code review/静态检查, 以及自定义工程规范的落地. 自从上了 Reviewbot 之后,我发现有些 ...
- IOS打开对应后缀文件
IOS打开对应后缀文件 通过ShareExtension打开 点击文件共享后出现的上方列表,如下图 在 info.plist 中添加 Document types <key>CFBundl ...
- WinDbg: SOSEX 下载,加载和使用帮助
SOSex 是 SOS 的扩展,由 Steve Johnson 开发,他是微软的一个员工,开发并免费提供了 SOSex for download 的下载,但该软件并不开源. 通常,该扩展不能与其他 D ...
- .NET 服务发现
.NET 服务发现 https://learn.microsoft.com/en-us/dotnet/core/extensions/service-discovery?tabs=dotnet-cli ...
- OpenType 字体文件组织结构
OpenType 字体文件结构 OpenType 字体的组织 https://docs.microsoft.com/en-us/typography/opentype/spec/otff#organi ...
- 中电金信技术实践|Redis哨兵原理及安装部署分享
导语:本文主要围绕redis Sentinel的基本概念.部署Redis Sentinel模式和其相关的API等内容进行介绍,并讲述哨兵与主从关系的区别,以及哨兵机制是怎么实现高可用的,希望可以与 ...
- shell中 ${}, ##, %%, :-,:+, ? 的使用
假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt 可以用${}分别替换得到不同的值:${file#*/} 删掉第一个/及其左边的字符串:dir1/dir2/d ...