Docker封装镜像、分发、部署实践:nginx

在实际生产工作中,通常是没法直接访问公网的,但是有经常需要使用Docker部署应用,本文将介绍使用Docker从拉取nginx、打包、分发到加载部署nginx的全流程!

1 准备工作

1.1 安装docker

请参考:Docker入门指南:1分钟搞定安装 + 常用命令,轻松入门容器化!-CSDN博客

1.2 配置镜像地址

vim /etc/docker/daemon.json 
# 编辑/etc/docker/daemon.json文件,添加如下内容
{"registry-mirrors": ["https://proxy.1panel.live","https://docker.1panel.top","https://docker.1ms.run","https://docker.ketches.cn","https://docker.hpcloud.cloud","https://docker.1panel.live","http://mirrors.ustc.edu.cn","http://mirror.azure.cn","https://nrbewqda.mirror.aliyuncs.com","https://dmmxhzvq.mirror.aliyuncs.com"]
}
# 重新加载配置并重启docker
systemctl daemon-reload
systemctl restart docker.service
# 验证镜像地址是否生效可用,能够看到Registry Mirrors:说明正常
[root@node3 ~]# docker info
Client:Version:    27.3.1Context:    defaultDebug Mode: falseServer:Containers: 0Running: 0Paused: 0Stopped: 0Images: 1Server Version: 27.3.1Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueUsing metacopy: falseNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311crunc version: v1.1.14-0-g2c9f560init version: de40ad0Security Options:seccompProfile: builtinKernel Version: 3.10.0-1160.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 7.777GiBName: node3ID: 11b2908d-4f1c-4d9f-9ea1-275e70e998f9Docker Root Dir: /var/lib/dockerDebug Mode: falseExperimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:https://proxy.1panel.live/https://docker.1panel.top/https://docker.1ms.run/https://docker.ketches.cn/https://docker.hpcloud.cloud/https://docker.1panel.live/http://mirrors.ustc.edu.cn/http://mirror.azure.cn/https://nrbewqda.mirror.aliyuncs.com/https://dmmxhzvq.mirror.aliyuncs.com/Live Restore Enabled: falseProduct License: Community EngineWARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
[root@node3 ~]# 

2 拉取镜像并运行容器

2.1 拉取镜像

# 执行如下命令,拉取最新版镜像
docker pull nginx:latest[root@node3 ~]# docker pull nginx:latest
latest: Pulling from library/nginx
7cf63256a31a: Downloading [===============================>                   ]  18.05MB/28.22MB
7cf63256a31a: Pull complete 
bf9acace214a: Pull complete 
513c3649bb14: Pull complete 
d014f92d532d: Pull complete 
9dd21ad5a4a6: Pull complete 
943ea0f0c2e4: Pull complete 
103f50cb3e9f: Pull complete 
Digest: sha256:9d6b58feebd2dbd3c56ab5853333d627cc6e281011cfd6050fa4bcf2072c9496
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@node3 ~]# 
# 查看拉取的镜像
[root@node3 ~]# docker images|grep nginx
nginx                          latest    b52e0b094bc0   5 weeks ago   192MB
[root@node3 ~]# 

2.2 试运行容器

[root@node3 ~]# docker run --name mynginx -p 8080:80 -d nginx 5545a43d8e06cf1290dd35b08de0d8ae8a850880ada02a96c893f570269d4bae 
[root@node3 ~]#

参数解释:

-d:后台模式运行容器

-p 8080:80:将主机的8080端口映射到容器的80端口

--name mynginx:指定容器名称为 mynginx

nginx:使用的镜像名称

2.3 验证运行结果

[root@node3 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                     NAMES
5545a43d8e06   nginx     "/docker-entrypoint.…"   16 minutes ago   Up 16 minutes   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   mynginx
[root@node3 ~]# 

3 封装并打包镜像

3.1 保存镜像为tar文件

docker save -o mynginx.tar nginx参数解释:
-o my-nginx.tar:指定输出文件名为mynginx.tar
nginx:要保存的镜像名称[root@node3 ~]# docker save -o mynginx.tar nginx
[root@node3 ~]# ls -lrht|grep mynginx.tar 
-rw-------  1 root    root    188M Mar 13 22:52 mynginx.tar
[root@node3 ~]# 

 3.2 压缩tar文件(可选)

# 如果文件太大,可以压缩tar文件,命令如下:
[root@node3 ~]# gzip mynginx.tar[root@node3 ~]# ls -lrht|grep mynginx.tar
-rw-------  1 root    root     68M Mar 13 22:52 mynginx.tar.gz
[root@node3 ~]# 

3.3 分发镜像

# 将保存的进项分发到需要部署的主机上
[root@node3 ~]# scp mynginx.tar.gz root@192.168.10.30:/root/root@192.168.10.30's password: 
mynginx.tar.gz                                                                                                                                 100%   68MB  13.3MB/s   00:05    
[root@node3 ~]# 

4 加载镜像

4.1 解压压缩包

[root@node1 ~]# gzip -d mynginx.tar.gz
[root@node1 ~]#ls |grep mynginx.tar
mynginx.tar
[root@node1 ~]# 

4.2 加载镜像

[root@node1 ~]# docker load -i mynginx.tar
5f1ee22ffb5e: Loading layer [==================================================>]  77.84MB/77.84MB
c68632c455ae: Loading layer [==================================================>]  118.3MB/118.3MB
cabea05c000e: Loading layer [==================================================>]  3.584kB/3.584kB
791f0a07985c: Loading layer [==================================================>]  4.608kB/4.608kB
f6d5815f290e: Loading layer [==================================================>]   2.56kB/2.56kB
7d22e2347c12: Loading layer [==================================================>]   5.12kB/5.12kB
55e9644f21c3: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest
[root@node1 ~]# 

4.3 验证加载情况

[root@node1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    b52e0b094bc0   5 weeks ago   192MB
[root@node1 ~]# 

4.4 运行容器

[root@node1 ~]# docker run --name mynginx -p 8080:80 -d nginx
702bffa6db25fb688a2c3d2ac5c9d657abc492e8978342fc71aab97c7174c513
[root@node1 ~]# 

4.5 验证运行结果

[root@node1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                     NAMES
702bffa6db25   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   mynginx
[root@node1 ~]# 

5 总结

通过以上步骤,你就完成了镜像的拉取、封装、分发、以及在目标机器上加载镜像并部署容器。

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

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

相关文章

LuaJIT 学习(5)—— string.buffer 库

文章目录 Using the String Buffer LibraryBuffer ObjectsBuffer Method Overview Buffer Creation and Managementlocal buf buffer.new([size [,options]]) local buf buffer.new([options])buf buf:reset()buf buf:free() Buffer Writersbuf buf:put([str|num|obj] [,……

vue3:request.js中请求方法,api封装请求,方法请求

方法一 request.js // 封装GET请求 export const get (url, params {}) > {return request.get(url, { params }); }; // 封装POST请求 export const post (url, data {}) > {return request.post(url, data); }; api封装 import { post } from /utils/request; …

Ollama+OpenWebUI本地部署大模型

OllamaOpenWebUI本地部署大模型 前言Ollama使用Ollama安装Ollama修改配置Ollama 拉取远程大模型Ollama 构建本地大模型Ollama 运行本地模型:命令行交互Api调用Web 端调用 总结 前言 Ollama是一个开源项目,用于在本地计算机上运行大型语言模型&#xff0…

【机器学习】基于t-SNE的MNIST数据集可视化探索

一、前言 在机器学习和数据科学领域,高维数据的可视化是一个极具挑战但又至关重要的问题。高维数据难以直观地理解和分析,而有效的可视化方法能够帮助我们发现数据中的潜在结构、模式和关系。本文以经典的MNIST手写数字数据集为例,探讨如何利…

【redis】发布订阅

Redis的发布订阅(Pub/Sub)是一种基于消息多播的通信机制,它允许消息的**发布者(Publisher)向特定频道发送消息,而订阅者(Subscriber)**通过订阅频道或模式来接收消息。 其核心特点如…

C语言零基础入门:嵌入式系统开发之旅

C语言零基础入门:嵌入式系统开发之旅 一、引言 嵌入式系统开发是当今科技领域中一个极具魅力和挑战性的方向。从智能家居设备到汽车电子系统,从智能穿戴设备到工业自动化控制,嵌入式系统无处不在。而C语言,作为嵌入式开发中最常…

K8S学习之基础二十三:k8s的持久化存储之nfs

K8S持久化存储之nfs ​ 在 Kubernetes (k8s) 中使用 NFS(Network File System)作为存储解决方案是一种常见的方式,特别是在需要共享存储的场景中。以下是关于如何在 Kubernetes 中使用 NFS 存储的详细说明: 1. 准备 NFS 服务器 …

【Rust】枚举和模式匹配——Rust语言基础14

文章目录 1. 枚举类型1.2. Option 枚举 2. match 控制流结构2.1. match 对绑定值的匹配2.2. Option<T> 的匹配2.3. 通配模式以及 _ 占位符 3. if let 控制流4. 小测试 1. 枚举类型 枚举&#xff08;enumerations&#xff09;&#xff0c;也被称作 enums。枚举允许你通过…

【商城实战(25)】解锁UniApp移动端适配秘籍,打造完美商城体验

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…

《C++ Primer》学习笔记(二)

第二部分&#xff1a;C标准库 1.为了支持不同种类的IO处理操作&#xff0c;标准库定义了以下类型的IO&#xff0c;分别定义在三个独立的文件中&#xff1a;iostream文件中定义了用于读写流的基本类型&#xff1b;fstream文件中定义了读写命名文件的类型&#xff1b;sstream文件…

MATLAB风光柴储微网粒子群算法

本程序实现了风光柴储微网中的粒子群优化&#xff08;PSO&#xff09;算法&#xff0c;用于优化微网的能源调度问题。具体来说&#xff0c;程序考虑了光伏发电、风力发电、柴油机发电&#xff08;柴储&#xff09;&#xff0c;并使用粒子群算法来优化这些能源的调度&#xff0c…

解决Windows版Redis无法远程连接的问题

&#x1f31f; 解决Windows版Redis无法远程连接的问题 在Windows系统下使用Redis时&#xff0c;很多用户会遇到无法远程连接的问题。尤其是在配置了Redis并尝试通过工具如RedisDesktopManager连接时&#xff0c;可能会报错“Cannot connect to ‘redisconnection’”。今天&am…

解决 HTTP 请求中的编码问题:从乱码到正确传输

文章目录 解决 HTTP 请求中的编码问题&#xff1a;从乱码到正确传输1. **问题背景**2. **乱码问题的原因**2.1 **客户端编码问题**2.2 **请求头缺失**2.3 **服务器编码问题** 3. **解决方案**3.1 **明确指定请求体编码**3.2 **确保请求头正确**3.3 **动态获取响应编码** 4. **调…

VS Code 配置优化指南

目录 一、安装与基础设置1. 安装 VS Code2. 中文语言包 二、插件推荐三、常见配置项与优化1. 用户 / 工作区设置2. 全局配置 / Settings Sync3. 常用设置示例 四、性能优化五、调试与终端配置1. 调试配置2. 内置终端配置 六、快捷键配置七、美观与主题八、总结 VS Code&#xf…

基于NXP+FPGA永磁同步电机牵引控制单元(单板结构/机箱结构)

永磁同步电机牵引控制单元&#xff08;单板结构/机箱结构&#xff09; 永磁同步电机牵引控制单元&#xff08;TCU-PMSM&#xff09;用于牵引逆变器-永磁同步电机构成的牵引电传动系统&#xff0c;采用轴控方式。执行高性能永磁同步电机复矢量控制策略&#xff0c;具有响应迅速…

/etc/sysconfig/jenkins 没有这个文件

在 CentOS 或其他基于 Red Hat 的 Linux 系统中&#xff0c;/etc/sysconfig/jenkins 文件通常用来存储 Jenkins 的配置参数&#xff0c;例如 JENKINS_HOME 的路径。但是&#xff0c;如果你发现没有这个文件&#xff0c;你可以通过以下几种方式来解决或确认&#xff1a; 检查 J…

conda 安装软件报错 Found conflicts! Looking for incompatible packages.

问题描述&#xff1a; 利用 conda 安装某包 conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc时发现报错&#xff1a; Collecting package metadata (current_repodata.json): done Solving environment: failed with initial frozen solve. Retrying with…

MySQL 衍生表(Derived Tables)

在SQL的查询语句select …. from …中&#xff0c;跟在from子句后面的通常是一张拥有定义的实体表&#xff0c;而有的时候我们会用子查询来扮演实体表的角色&#xff0c;这个在from子句中的子查询会返回一个结果集&#xff0c;这个结果集可以像普通的实体表一样查询、连接&…

STM32配套程序接线图

1 工程模板 2 LED闪烁 3LED流水灯 4蜂鸣器 5按键控制LED 6光敏传感器控制蜂鸣器 7OLED显示屏 8对射式红外传感器计次 9旋转编码器计次 10 定时器定时中断 11定时器外部时钟 12PWM驱动LED呼吸灯 13 PWM驱动舵机 14 PWM驱动直流电机 15输入捕获模式测频率 16PWMI模式测频率占空…

鸿蒙初级考试备忘

Module类型 Module按照使用场景可以分为两种类型&#xff1a; Ability类型的Module&#xff1a; 用于实现应用的功能和特性。每一个Ability类型的Module编译后&#xff0c;会生成一个以.hap为后缀的文件&#xff0c;我们称其为HAP&#xff08;Harmony Ability Package&#x…