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"]

 

 

 

 

 

posted @   。knight  阅读(59)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示