总体思路:在有网络的环境上制作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的更多相关文章

  1. 在Docker下部署Nginx

    在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...

  2. Docker Compose部署 nginx代理Tomcat集群

    一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...

  3. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  4. 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql

    阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...

  5. Docker应用部署(Nginx、Tomcat)

    Docker hub官方链接: https://hub.docker.com 部署Nginx 官方已经给出了方法: https://hub.docker.com/_/nginx 运行容器 $ dock ...

  6. Linux运维之docker虚拟化部署nginx

    一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  7. docker stack 部署nginx

    =============================================== 2018/7/29_第1次修改                       ccb_warlock == ...

  8. Docker(二)-在Docker中部署Nginx实现负载均衡(视频教程)

    本教程介绍利用Docker部署Nginx服务实现负载均衡. (双击全屏播放)

  9. docker - compose 部署 Nginx

    主要介绍 docker 中 Nginx 的部署及项目目录挂载券的方法.docker 中部署一个服务,有三种方法,分别是 docker run.Dockerfile.docker-compose . 下 ...

  10. Docker 06 部署Nginx

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

随机推荐

  1. IBM 开源的文档转化利器「GitHub 热点速览」

    上周的热门开源项目,Star 数增长犹如坐上了火箭,一飞冲天.短短一周就飙升了 6k Star 的多格式文档解析和导出神器 Docling,支持库和命令行的使用方式.全新的可视化爬虫平台 Maxun, ...

  2. 2022年3月(202203)小米路由R3G(3G)刷openwrt和padavan的总结

    本篇文章是本人这2天刷小米路由R3G的记录,中间可能有很多错误,欢迎留言指出. 1.千万别断电 2.刷机的时候要多等待 小米路由很多型号有着很强的可玩性,128M以上的ROM,256M以上的内存,R3 ...

  3. Linx操作Nginx命令

    在 CentOS 上操作 Nginx 包括安装.启动.停止.重新加载配置等.以下是在 CentOS 上操作 Nginx 的常用命令: 安装 Nginx: sudo yum install nginx ...

  4. Reviewbot 开源 | 这些写 Go 代码的小技巧,你都知道吗?

    Reviewbot 是七牛云开源的一个项目,旨在提供一个自托管的代码审查服务, 方便做 code review/静态检查, 以及自定义工程规范的落地. 自从上了 Reviewbot 之后,我发现有些 ...

  5. IOS打开对应后缀文件

    IOS打开对应后缀文件 通过ShareExtension打开 点击文件共享后出现的上方列表,如下图 在 info.plist 中添加 Document types <key>CFBundl ...

  6. WinDbg: SOSEX 下载,加载和使用帮助

    SOSex 是 SOS 的扩展,由 Steve Johnson 开发,他是微软的一个员工,开发并免费提供了 SOSex for download 的下载,但该软件并不开源. 通常,该扩展不能与其他 D ...

  7. .NET 服务发现

    .NET 服务发现 https://learn.microsoft.com/en-us/dotnet/core/extensions/service-discovery?tabs=dotnet-cli ...

  8. OpenType 字体文件组织结构

    OpenType 字体文件结构 OpenType 字体的组织 https://docs.microsoft.com/en-us/typography/opentype/spec/otff#organi ...

  9. 中电金信技术实践|Redis哨兵原理及安装部署分享

    ​ 导语:本文主要围绕redis Sentinel的基本概念.部署Redis Sentinel模式和其相关的API等内容进行介绍,并讲述哨兵与主从关系的区别,以及哨兵机制是怎么实现高可用的,希望可以与 ...

  10. shell中 ${}, ##, %%, :-,:+, ? 的使用

    假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt 可以用${}分别替换得到不同的值:${file#*/} 删掉第一个/及其左边的字符串:dir1/dir2/d ...