详细解释容器以及虚拟机centos7.9容器化部署基础服务(容器化部署nginx)

简介: 容器是一种轻量级、可移植的软件打包和隔离技术,将应用程序及其依赖项打包,确保在任何环境中一致运行。容器共享主机操作系统内核,相比虚拟机更高效、轻量,具有快速启动和高资源利用率的特点。容器的关键技术包括命名空间(如 PID、NET 等)、控制组(cgroups)和联合文件系统(UnionFS)。使用容器可以提高开发和部署效率,简化管理,确保环境一致性。例如,在 CentOS 7.9 上部署 Nginx 时,可以通过 Docker 下载和运行 `nginx:1.20` 镜像,并通过端口映射使外部请求访问 Nginx 服务。此外,还可以将测试页面复制到容器中,进一步验证容器的功能。

一.什么是容器?

容器是一种轻量级、可移植的软件打包和隔离技术。它将应用程序及其所有依赖项(如库、配置文件、二进制文件等)打包在一个独立的单元中,以确保应用程序可以在任何环境中一致地运行。容器利用了操作系统的虚拟化功能,但比传统的虚拟机更高效和轻量。

容器的特点

轻量级:
与虚拟机不同,容器不需要包含一个完整的操作系统。它们共享主机操作系统的内核,从而减少了开销和启动时间。

可移植性:
容器封装了应用程序及其所有依赖项,确保在不同环境中运行时保持一致性。这意味着你可以在开发环境中创建一个容器,并将其无缝地移植到测试或生产环境中。

隔离性:
每个容器都是独立的,具有自己的文件系统、进程空间和网络接口。这种隔离确保了一个容器中的应用程序不会干扰其他容器中的应用程序。

快速启动:
容器的启动速度非常快,通常在几秒钟内就能启动并运行,这比启动一个虚拟机快得多。

资源利用效率高:
由于容器共享主机操作系统的内核,它们比虚拟机更节省资源,能够在同一台主机上运行更多的应用实例。

容器对比虚拟机有什么区别?

虽然容器和虚拟机都提供了应用程序隔离的能力,但它们的工作原理和资源利用方式有很大的不同。

虚拟机(VM):
每个虚拟机都有自己的完整操作系统,包括内核,这使得虚拟机比较重,启动时间较长,占用更多的资源。

容器:
容器共享主机操作系统的内核,不需要独立的操作系统,这使得容器更轻量、启动更快、资源利用更高效。

容器的工作原理

镜像(Image):
容器镜像是一个只读的模板,包含了应用程序及其运行所需的所有内容。镜像可以看作是容器的蓝图,从中可以创建一个或多个容器。

容器(Container):
容器是镜像的一个运行实例。它从镜像中创建,并包含了运行应用程序所需的所有内容。在运行时,容器可以有自己的文件系统、网络接口、进程空间等。

Docker 引擎:
Docker 引擎是一个轻量级的容器运行时,用于创建、运行和管理容器。它包括一个守护进程(daemon),一个 REST API,以及一个命令行界面(CLI)。

容器的主要技术

Namespace:
Namespace 提供了一个隔离的执行空间,让每个容器都有自己的进程空间、网络接口、文件系统等,从而实现容器间的隔离。

namespace有六个他们分别是
pid namespace(进程隔离)
net namespace(网络隔离)
ipc namespace(进程间交互隔离)
mnt namespace(文件系统隔离)
uts namespace(主机名、域名隔离)
user namespace(用户隔离)

Control Groups(cgroups):
cgroups 控制和限制容器使用的资源,如 CPU、内存、磁盘 I/O 等,确保每个容器都能公平地使用系统资源。

Union File System(UnionFS):
UnionFS 是一种分层的文件系统,允许将多个文件系统叠加在一起形成一个统一的文件系统。Docker 使用 UnionFS 来构建容器镜像和容器,使得镜像可以由多个层组成,每一层都可以共享和复用。

最后了解一下使用容器的优势

一致性和可移植性:
无论是开发、测试还是生产环境,容器中的应用程序运行效果一致,减少了环境配置带来的问题。

高效的开发和部署:
开发人员可以快速构建、测试和部署应用程序,缩短了开发周期。

更好的资源利用:
通过共享操作系统内核和使用 cgroups,容器能够更高效地利用系统资源。

简化的管理:
容器化应用程序的管理更加简单,可以轻松地启动、停止、重启和监控容器。

二、容器部署nginx

实验环境

centos7.9
已安装docker-ce-20.10.20版本

实验步骤

经过上面的了解,我们知道镜像是容器运行的基础,所以我们需要先下载镜像
我们可以先搜索nginx的镜像

[root@vm1 ~]# docker search nginx

可以看到有很多版本,后面带OK的则是官方版本
image.png

本次下载的版本为1.20,比较稳定

[root@vm1 ~]# docker pull nginx:1.20

然后查看一下

[root@vm1 ~]# docker images

可以看到我们刚刚下载好的nginx
以下信息分别是
名称 标签 id 创建时间 大小
我这里创建时间长是因为我之前已经下载过了
image.png

让我们运行容器

[root@vm1 ~]# docker run  -d  -p  80:80  nginx:1.20

docker run:这部分指示Docker运行一个新的容器。

-d:这是一个选项,代表“detached”(分离模式),它告诉Docker在后台运行容器。这意味着容器将在后台运行,并且不会占据当前终端的控制权。

-p 80:80:这也是一个选项,用于指定端口映射。这里的80:80表示将容器内部的80端口映射到宿主机(即宿主操作系统)的80端口,这样外部请求就可以通过宿主机的80端口访问到运行在容器内的Nginx服务。

nginx:1.20:这是指定要运行的镜像名称及版本标签。在这里,它指示Docker运行一个名为nginx的镜像,版本为1.20。

查看容器

[root@vm1 ~]# docker ps -a

看到up就是运行成功了!

image.png
让我们创建一个测试页面并拷贝进容器内

[root@vm1 ~]# echo "nginx is running" > index.html
[root@vm1 ~]# docker  cp  index.html 96:/usr/share/nginx/html/

docker cp 复制文件到容器内
格式
docker cp 文件 容器id:路径

最后用浏览器查看一下结果
记得关闭防火墙关闭沙盒和开启路由转发

临时关闭防火墙
[root@vm1 ~]# systemctl stop firewalld
临时关闭沙盒
[root@vm1 ~]# setenforce 0
开启路由转发
[root@vm1 ~]# echo "net.ipv4.ip_forward" >> /etc/sysctl.conf 
[root@vm1 ~]# sysctl -p

最后用浏览器查看结果就行了
直接访问你这台服务器的ip,我这里是192.168.10.11
image.png
实验完成

如果对您有帮助就点个赞吧

相关文章
|
10天前
|
存储 数据安全/隐私保护 数据中心
Incus 6.4 容器和虚拟机管理器发布
【10月更文挑战第26天】
20 2
Incus 6.4 容器和虚拟机管理器发布
|
11天前
|
存储 持续交付 虚拟化
|
2月前
|
Unix Linux 开发工具
centos的官网下载和vm16虚拟机安装centos8【保姆级教程图解】
本文详细介绍了如何在官网下载CentOS 8以及在VMware Workstation Pro 16虚拟机上安装CentOS 8的步骤,包括可能出现的问题和解决方案,如vcpu-0错误的处理方法。
centos的官网下载和vm16虚拟机安装centos8【保姆级教程图解】
|
1月前
|
应用服务中间件 Linux nginx
CentOS7安装Nginx
CentOS7安装Nginx
|
1月前
|
存储 Linux 开发者
虚拟机centos7.9一键部署docker
本文介绍了如何在 CentOS 7.9 虚拟机上安装 Docker 社区版 (Docker-ce-20.10.20)。通过使用阿里云镜像源,利用 `wget` 下载并配置 Docker-ce 的 YUM 仓库文件,然后通过 `yum` 命令完成安装。安装后,通过 `systemctl` 设置 Docker 开机自启并启动 Docker 服务。最后,使用 `docker version` 验证安装成功,并展示了客户端与服务器的版本信息。文中还提供了列出所有可用 Docker-ce 版本的命令。
150 0
虚拟机centos7.9一键部署docker
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
存储 缓存 监控
在Linux中,如何优化虚拟机和容器的性能和资源使用?
在Linux中,如何优化虚拟机和容器的性能和资源使用?
|
8天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
4天前
|
关系型数据库 MySQL API
|
21天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
57 5
下一篇
无影云桌面