Docker之概述与安装

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《Docker之概述与安装》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁

一、服务器选型

在选择服务器操作系统时,Windows附带了许多您需要付费的功能。 Linux是开放源代码,可让用户免费使用。

二者对比

  • Linux 是开源的,因此是免费的。 Web 主机仅需要支付技术支持即可安装和维护程序(如果需
    要)。服务器提供商不需要将额外的成本转嫁给客户。另一方面,对于 Windows 服务器,公司通常必须为操作系统和定期使用许可证付费。
    Linux 服务器及其运行的应用程序通常设计为精益运行,因此通常使用较少的计算机资源。好处是程序员可以" 即时 " 修改 Linux 服务器和软件,而无需重新启动,这在 Windows 环境中是不可能的。
  • Microsoft Windows服务器在多数据库任务下趋向于变慢,崩溃的风险更高。
    Linux 比 Windows 更安全。尽管没有哪个系统能幸免于黑客和恶意软件的攻击,但是 Linux 往往是一个低调的目标。由于Windows 运行着世界上大多数软件,因此,黑客们渴望获得低挂的果实Windows。

二、虚拟机

1. 简单介绍

虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

2. 微服务的部署策略

部署单体应用意味着运行大型应用的多个相同副本,通常提供若干台(N )服务器(物理机或虚拟机),在每台服务器上运行若干个(M )应用实例。部署单体应用并不总是简单明了,但还是比部署微服务应用简单。
微服务应用由几十甚至数百个服务组成。服务用不同的语言和框架写成,每个都是一个小应用,包括特定的部署、资源、扩展和监控需求,例如,根据服务需求运行若干数量的服务实例。
此外,每个服务实例必须配套提供适当的 CPU 、内存 和 I/O 资源。更具挑战性的是,尽管如此复杂,部署服务还必须快速、可靠和性价比高。

3. 基于主机(物理机或虚机)的多服务实例

基于主机的多服务实例" 模式是最为传统的应用程序部署方法。
在该模式下,软件开发人员可以提供单个或多个物理机或虚机,同时在每个主机上运行多个服务实例。
此模式有几种不同的实现形式,其中包括:将每一个服务实例都作为一个单独的进程,或是在同一进程中运行多个服务实例。

三、什么是Docker

1. 基本概述

Docker是一种容器化平台,旨在简化应用程序的开发、部署和管理。它使用轻量级的容器来封装应用程序及其所有依赖关系,提供一致的运行环境。Docker容器是可移植、可扩展和自包含的,使得开发者能够更轻松地在不同的环境中运行其应用。

优点:

由于多个服务实例使用的是同一服务器、及其操作系统,因此它们的资源使用效率相对较高。
不足:

  • 除非每个实例都是一个单独的进程,否则您对服务实例的实际控制权并不大。而且,您无法限制每个实例能够使用到的资源比例。这将带来主机内存被大量消耗的隐患。
  • 如果多个服务实例在同一进程中运行,它们之间会缺乏隔离关系。这通常会导致在相同进程中,某个行为异常的服务能够直接影响、甚至中断其他的服务。
  • 由于运营团队需要了解服务的详细信息,因此在部署期间,他们可能发生人为错误的风险较高。显然,开发和运营团队之间需要通过必要的信息交换,来尽可能地消除复杂性

4. 基于容器的服务实例

在这种部署模式下,每个服务实例都运行在其各自的容器中,因此也被称为操作系统级别的虚拟化机制。

使用这一模式时,用户将服务打包为容器镜像。每个容器镜像就是一个文件系统镜像,由应用和运行服务所需的库构成。有的容器镜像还包括完整的 Linux 根文件系统,有的则更轻量。
以部署 Java 服务为例,构建的容器镜像包括 Java 运行时、 Apache Tomcat 服务器、以及编译好的 Java应用。
一旦将服务打包为容器镜像,就启动一到多个容器。通常每个物理机或虚拟主机上会运行多个容器,会用到 Kubernetes 或 Marathon 这样的集群管理工具来管理容器。
集群管理工具把主机看做资源池,根据每个容器需要的资源和每个主机上可用的资源来调度容器。
容器的优点与虚拟机类似,服务实例之间完全隔离,也能轻松监控每个容器的资源消耗。

2. 关键概念与特点

|-------------|---------------------------------------------------------------------------------------|
| 关键概念和特点 | 说明 |
| 容器化 | Docker利用容器技术,将应用程序和其所有依赖项(库、环境变量、配置文件等)打包到一个容器中。这个容器可以在任何支持Docker的环境中运行,而不受底层系统差异的影响。 |
| 轻量级 | Docker容器共享主机操作系统的内核,相比于传统虚拟化,容器更轻量,更快速启动,并占用更少的系统资源。 |
| 可移植性 | 由于Docker容器包含应用程序及其所有依赖项,因此它们可以在开发、测试和生产环境之间轻松迁移,确保一致的运行环境。 |
| 版本控制和分发 | Docker通过镜像(Image)的概念实现版本控制。镜像是一个只读的模板,定义了容器运行时所需的文件系统和参数。这使得开发者能够轻松地分享、分发和更新应用程序。 |
| 快速部署 | Docker容器可以在几秒钟内启动,使得应用程序的部署变得更加迅速和灵活。 |
| 自动化 | Docker可以与自动化工具和编排系统(如Docker Compose、Kubernetes等)集成,从而实现自动化的应用程序部署、扩展和管理。 |
[Docker的关键概念和特点]

总之,Docker的普及极大地改变了软件开发和部署的方式,提高了开发和运维的效率,同时降低了应用程序在不同环境中运行时可能遇到的问题。

3. 应用场景

Docker 的灵活性和轻量级容器化技术使其在各种应用场景中得到广泛应用。以下是一些常见的 Docker 应用场景:

  1. 应用程序打包和分发: Docker 可以将应用程序及其所有依赖项封装到一个容器中,形成一个可移植的镜像。这使得应用程序在不同环境中的部署更加一致和可靠。

  2. 微服务架构: Docker 容器适用于微服务架构,每个微服务可以打包为一个独立的容器。这简化了微服务的开发、测试和部署,并提高了系统的可伸缩性和弹性。

  3. 持续集成和持续部署(CI/CD): Docker 可以集成到 CI/CD 流水线中,实现自动化的构建、测试和部署。这样,开发者可以更快速地交付新的功能和更新。

  4. 多语言开发环境: Docker 可以为不同的编程语言和开发框架创建隔离的开发环境。开发者可以使用容器来确保他们在不同的开发机器上拥有相同的运行时环境。

  5. 大数据处理: Docker 容器可用于在分布式系统中运行大数据处理框架,如Hadoop、Spark等。这使得大数据应用程序的部署和管理更加便捷。

  6. 测试环境: Docker 容器可以在开发和测试过程中提供一致的运行环境,减少了"在我的机器上可以工作"这种问题。测试团队可以使用容器来进行集成测试、单元测试等。

  7. 云计算和容器编排: Docker 可以与云平台(如AWS、Azure、Google Cloud等)以及容器编排工具(如Kubernetes、Docker Swarm等)集成,实现应用程序的弹性伸缩、高可用性和自动化管理。

  8. 快速部署和回滚: Docker 容器可以快速部署,并支持回滚到先前的版本。这为应用程序的快速发布和问题恢复提供了便利。

4. Docker****三要素

4.1 Docker镜像

Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载 一 个已经做好的镜像来直接使用

4.2 Docker仓库

仓库是集中存放镜像文件的场所。
有时候会把仓库和仓库注册服务器( Registry )混为一谈,并不严格区分。实际上,仓库注册服务器上 往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的
标签( tag )。
仓库分为公开仓库(Public )和私有仓库( Private )两种形式。最大的公开仓库是 Docker Hub ,存放了数量庞大的镜像供用户下载。当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了

4.3 Docker容器

Docker 利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

  1. 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
  2. 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容
  3. 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构

5. 虚拟机与容器的区别

VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用;
Container(Docker容器 ) ,在宿主机器、宿主机器操作系统上创建 Docker 引擎,在引擎的基础上再安装应用。

四、安装Docker

安装之前必须保证VM虚拟机中安装Centos系统,然后在我们的连接服务器工具中连接它。

安装必要的系统工具: yum install -y yum-utils device-mapper-persistent-data lvm2

配置阿里云Docker Yum源: yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum缓存:yum makecache fast

执行上述代码报错就执行下述代码 yml.pid占用: -- rm -f /var/run/yum.pid
安装docker-CE: yum -y install docker-ce

到这里docker就安装成功了。
1 )默认安装的是最新版本的稳定版
2 )查看版本列表请使用如下命令:
yum list docker-ce --showduplicates | sort -r
3 )如果要安装特定版本的 docker-CE 请使用如下命令格式:
yum install docker-ce-

五、Docker的基本使用

1. 基本服务

1.1 查看服务状态

systemctl status docker

1.2 启停服务

systemctl start docker //启动
systemctl stop docker //停止
systemctl restart docker //重启

1.3

systemctl enable docker //设置开启自启动
systemctl disable docker //关闭开机自启动

2. 仓库+镜像

2.1 查看当前镜像

docker images //查看镜像

2.2 配置加速器

我们前去阿里云官网进行登陆获取阿里云加速器

我们在进行查看 cat /etc/docker/daemon.json

配置好之后请在虚拟机进行拍照 ,防止后续出现问题

2.3 镜像操作

下载镜像 :docker pull 镜像名

docker pull nginx下载nginx镜像,帮我们安装好了Linux服务,默认是最新版。

我们在进行查看镜像 ,latest代表最新版

当然我们也可以将镜像上传到我们的仓库去,指令docker push 但是我们上传的是默认官网的仓库,上传不了,需要我们自己登陆注册。我们再进行拉取centos的镜像资源。

2.4 其他操作

重新加载daemon :systemctl daemon-reload
重启docker : systemctl restart docker
搜索镜像 : docker search 镜像名称
删除镜像: docker rmi 镜像ID/标签

3. 容器

容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。
镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态

3.1 创建容器

指令:docker create 镜像名称
docker create -it centos:latest
docker create -it --name centos01 centos:latest
centos:latest 即镜像名字:版本(或镜像ID),将使用指定镜像创建容器。另外,Docker会检查本地是否存在指定的镜像,不存在就从公有仓库下载
-it:是两个参数,-i:interactive容器具有交互功能,-t:容器将提供伪终端
--name:指定生成的容器的名字,允许空,如果不指定会自动生成

docker ps 查看容器

docker ps -a 查看容器(使用第二个)

3.2 启动、停止、重启容器

docker start 容器ID|name|name:tag
docker stop 容器ID|name|name:tag
docker restart 容器ID|name|name:tag

3.3 删除容器

docker rm 容器 ID
docker rm - f 容器 ID

3.4 进入容器

docker exec - it 容器 ID / 容器 NAME / bin / bash
docker exec - it 容器 ID / 容器 NAME bash ( 简写 )

3.5 退出容器

退出时如果想继续运行容器:按顺序按【 ctrl + p 】,【 ctrl + q 】
如果不想继续运行:按【 ctrl + d 】或输入 exit


🎉🎉本期的博客分享到此结束🎉🎉

📚📚各位老铁慢慢消化📚📚

🎯🎯下期博客博主会带来新货🎯🎯

🎁三连加关注,阅读不迷路 !🎁

相关推荐
AI慧聚堂17 分钟前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
不爱学英文的码字机器19 分钟前
[Linux] Shell 命令及运行原理
linux·运维·服务器
cdut_suye30 分钟前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
qq_4336184435 分钟前
shell 编程(三)
linux·运维·服务器
苹果醋342 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
两张不够花44 分钟前
Jenkins 持续集成部署
运维·jenkins
码农土豆1 小时前
PaddlePaddle飞桨Linux系统Docker版安装
linux·docker·paddlepaddle
Hacker_xingchen1 小时前
天融信Linux系统安全问题
linux·运维·系统安全
丘狸尾1 小时前
[cisco 模拟器] ftp服务器配置
android·运维·服务器
黑客老陈1 小时前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss