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

posted @ 2022-11-18 15:13  熊仔其人  阅读(2460)  评论(0编辑  收藏  举报