DOCKER容器相关知识
一、什么是Docker容器
为了解决虚拟机存在的一些缺点(1.占用资源多,需要安装整个操作系统,消耗大量内存和硬盘;2.运行步骤冗余;3.运行速度慢)以及软件开发中的一些麻烦(环境配置麻烦,将软件从一个环境移植到另一个环境麻烦)。
Linux发展出了另一种虚拟技术:Linux容器。容器不是模拟一个完整的操作系统,而是对进程进行隔离,或者说,就是在正常进程的外面套用了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而
实现与底层程序的隔离。由于容器是进程级别的,相比虚拟机就有了更多的优势。Docker属于linux容器的一种封装,Docker将软件代码和依赖项,全部打包到一个文件中,运行单个文件,就会生成虚拟容器。在这个虚拟容器中,
不管本地的操作系统是如何不同,此容器都能照常运行。
简单的说,docker的接口非常简单,可以帮助用户更好的创建和使用容器,让相同的代码在不同的环境下运行。
二、Docker的用途
1.提供一次性的环境:本地测试别人的软件、持续集成的时候提供单元测试和构建的环境。
2.提供弹性的云服务:因为Docker容器可以随时启动或关闭,所以非常适合动态规划和缩容。
3.组建微服务构架:通过多个容器,服务的部署能更加灵活,帮助实现微服务构架。
4.不需要虚拟硬件和操作系统,轻量级,占用体积小,启动快
三、Docker容器和VM的对比
Docker容器和传统的VM技术,在实现有不同
VM:使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。
其中:
Server相当于云服务器,Host OS操作系统,Docker Engine就是我们安装的docker软件。应用A和应用B是在Docker组件中运行的应用。Dokcer既没有操作系统的概念,用的还是宿主机的操作系统,但是它做出了隔离,也实现了虚拟化。
四、docker容器是如何工作的、docker架构
组成docker的三大要素:镜像、容器、仓库。
镜像:是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。
容器:镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。
镜像仓库:集中存放镜像文件的地方。用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。
注意:其中镜像和容器的区别,就相当于C++中面向对象的类和对象的区别。
Docker容器的运行逻辑,使用了最经典的C/S架构,Dokcer守护进程作为服务器端接受客户端的请求,并负责创建、分发和运行docker容器。Docker守护进程一般在后台运行,用户使用客户端直接和守护进程进行信息交互。
架构:
Docker客户端:是用户与docker进行交互的最主要方式,当在终端输入docker命令时候,就会在服务器产生对应的操作。并把结果返回给客户端。一般个人来说,客户端和服务器都部署在本地。也可以通过更改或者指定DOCKER_HOST
连接远程服务器。
Docker服务端:即Docker Daemon,负责监听Docker API请求,并管理Docker对象。
Docker仓库:专门用于存储镜像的云服务环境。例如Docker Hub。
Docker对象:镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。容器:镜像被运行起来后的实例。网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。
五、容器镜像的基本操作
下载镜像:
远程仓库地址:https://hub.docker.com/
docker search 镜像名字
也可以查看帮助了解更多参数。
#下拉镜像
docker pull 名字:版本号
#查看镜像:
docker image
#运行镜像:
docker run 镜像名字
#删除镜像:
docker rmi 镜像名字/ID
需要注意的是,如果还有基于这个镜像的容器,是不能删除镜像的,应该先删除容器,再删除镜像。
#查询容器
docker ps -a
#删除容器
docker rm 容器/id
#创建容器(创建一个状态待启动的容器)
docker create [OPTIONS] image [COMMAND][ARG...]
命令参数[OPTIONS] -t 分配一个伪TTY,也就是分配虚拟终端。 -i 即使没有连接,也保持STDIN打开。 --name 为容器起名,即使没有名字也会随机产生一个名字。
[COMMAND]表示容器启动后,需要在容器中执行的命令
[ARG...]表示执行COMMAND时提供的一些参数
#运行并启动容器
docker run -di --name=
#查看机器上运行的容器,不包括停止的
docker ps
#查看机器上所有的容器,包括停止的
docker ps -a
#停止容器
docker stop 容器名字/ID号
#启动容器
docker start 容器名字/ID号
#进入容器
docker exec -it 容器ID/bin/bash
#退出容器
exit
#文件拷贝
docker cp 宿主机文件 容器id:容器路径(也可以倒过来拷贝)
#目录挂载
run 命令后面加一个 -v /宿主机要挂载的目录:/容器要挂载的路径 指定镜像
挂载后,宿主机目录和容器目录互相影响。
#端口映射
run 命令后加一个-p 宿主机:容器端口
#查看容器ip
docker inspect 容器ID
除了映射之外,也可以通过容器IP:容器端口 来直接访问容器端口。二者都可,不然访问不了容器端口。
六、配置镜像提速
清华和阿里云做了一个备份,去国内地址拉镜像会比较快。
1.vi /etc/docker/daemon.json
2.第二步指定地址:"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通