一 国内:
中国电信天翼云
提供包括云主机在内的全方位云计算服务,侧重于安全合规和企业级服务。
利用电信的网络优势,提供稳定可靠的基础设施服务。
中国联通沃云
提供包括云主机在内的多项云计算服务,适合不同行业和场景。
依托联通的网络资源,强调网络质量和地域覆盖广度。
二 国外:
亚马逊云(Amazon Web Services, AWS):
作为全球最大的云服务提供商,AWS 提供了广泛的服务,包括 EC2(Elastic Compute Cloud)云
服务器、S3 存储、RDS 数据库服务、ELB 弹性负载均衡等,拥有全球数据中心网络。
微软云(Microsoft Azure)
Azure 是一个全面的云服务平台,提供虚拟机、云存储、SQL 数据库等服务,以及强大的人工智
能和机器学习功能,具备全球覆盖能力。
谷歌云(Google Cloud Platform, GCP):
GCP 提供一系列云服务和工具,如 Compute Engine、Cloud Storage、Cloud SQL 等,依托谷歌
的技术实力,特别在大数据处理、人工智能领域有显著优势。
三 云服务模式
laaS : Infrastructure (基础设施) -as-a-Service
PaaS : Platform (平台) -as-a-Service
SaaS : Software (软件) -as-a-Service。
基础设施即服务(IaaS)
定义:IaaS是云计算的基础层级,它向用户提供虚拟化的计算资源,如虚拟机、存储空间、网络和
操作系统。用户可以根据需求租用这些基础设施,并对其进行配置和管理,但无需关心底层硬件的维护。
应用场景:适用于需要高度定制化环境的企业,如运行特定应用、开发测试环境、数据备份和恢复等。
平台即服务(PaaS)
定义:PaaS为开发人员提供了一个完整的开发和部署环境,包括操作系统、数据库、中间件、编
程框架等。用户可以在服务商提供的平台上直接开发、运行和管理应用程序,无需关心底层基础设
施的细节。
应用场景:适合软件开发团队,可以加速应用开发、简化运维工作,如Web应用、移动应用后端、
大数据分析平台等。
软件即服务(SaaS)
定义:SaaS是云计算服务的最高层级,直接向用户提供应用程序,用户通过互联网访问并使用这
些应用,无需安装或维护软件。所有应用相关的后台管理、数据存储、安全更新等均由服务提供商
负责。
应用场景:广泛应用于日常办公、CRM、ERP、邮件服务、协作工具等领域,如Office 365、
Salesforce、Google Workspace等。
每种服务模式都代表了从基础设施到最终应用的不同层次的服务抽象,用户可以根据自身需
求选择合适的服务模式,实现资源的灵活配置和高效利用,同时降低运营成本和提升业务敏捷性。
目前中国使用最多的服务模式是 PaaS ,国外使用最多的是 SaaS。
3. 关于 docker 产品
Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其所有的依赖包打包成一个
轻量级、可移植的容器(Container),然后可以在任何支持Docker的Linux或Windows操作系统机
器上运行这个容器,实现应用程序的快速部署和一致性运行环境。Docker采用操作系统级别的虚
拟化技术,相较于传统的虚拟机技术,它更为轻量级,启动速度快,资源利用率更高。
3.1 虚拟化产品有哪些?
服务器虚拟化产品:
VMware vSphere:包括ESXi hypervisor和vCenter Server,提供企业级的虚拟化解决方案。
Microsoft Hyper-V:Windows Server内置的虚拟化平台,支持创建和管理虚拟机。
Xen:开源虚拟化技术,常用于Citrix XenServer和一些Linux发行版中。
KVM(Kernel-based Virtual Machine):基于Linux内核的开源虚拟化解决方案,广泛应用于云平台。
桌面虚拟化产品:
VMware Horizon:提供虚拟桌面基础架构(VDI)和应用程序虚拟化。
Citrix Virtual Apps and Desktops(原XenDesktop):支持交付虚拟应用和桌面到任何设备。
Microsoft Remote Desktop Services:允许用户远程访问Windows应用和桌面。
存储虚拟化产品:
VMware vSAN:软件定义的存储解决方案,直接在ESXi主机的本地存储上创建分布式存储层。
Microsoft Storage Spaces Direct:Windows Server中的存储虚拟化功能,支持使用直接附加存储创建存储池。
NetApp Data ONTAP:企业级存储虚拟化解决方案,支持数据管理和保护。
网络虚拟化产品:
VMware NSX:提供软件定义的网络和安全服务,支持网络虚拟化和微分段。
Cisco ACI(Application Centric Infrastructure):以应用为中心的网络架构,提供网络虚拟化和策略驱动的网络管理。
Open vSwitch(OVS):开源的虚拟交换机,常用于OpenStack等云平台的网络虚拟化。
容器和轻量级虚拟化产品:
Docker:容器化平台,用于应用程序的打包、分发和运行。
Kubernetes(K8s):容器编排系统,用于自动化容器化应用的部署、扩展和管理。
Linux Containers (LXC):基于操作系统级别的轻量级虚拟化技术,提供容器服务。
3.2 虚拟机架构:
① 寄居架构
虚拟机作为应用软件安装在操作系统上
可以在此应用软件上安装多个操作系统
直接安装在硬件上的系统为宿主
本机(真实的操作系统) ----> 虚拟化产品 ----> 虚拟化操作系统或软件
虚拟机监视器:例如 VMware 等
VMware非常强大,真机可以上网,虚拟机也可以上网。
病毒木马都可以拖到虚拟机运行,与真机脱离,非常安全。
但是真机一旦崩了,虚拟机当然也崩了。所以实际生产环境用的是 源生架构
② 源生架构
虚拟机软件直接安装在计算机硬件上
虚拟机本身就是一个操作系统
在这个虚拟机中可以同时运行多个操作系统
裸金属 服务器 ---> 虚拟化产品
3.3 虚拟化技术概述
虚拟化技术允许在单一物理硬件上创建和运行多个独立的虚拟环境,核心分类包括仿真虚拟化、半
虚拟化和全虚拟化,每种技术各有侧重:
仿真虚拟化:无需硬件支持,兼容性强,能在不同架构间运行操作系统,但性能较低。
半虚拟化:需修改客户系统以提升性能,直接与虚拟化层通信,适用于特定场景和注重性能的环
境。
全虚拟化:现代技术大多结合硬件辅助,以实现接近原生的性能,同时保持高度兼容性,适用于广
泛场景。
主流虚拟化产品对比
1 VMware系列
VMware Workstation: 面向个人用户的Windows或Linux上的虚拟机软件,适合开发、测试及多系
统体验。
VMware Fusion: 专为Mac设计的虚拟化软件,允许在Mac上运行Windows及其他操作系统。
VMware ESXi & vSphere: 企业级裸金属虚拟化平台,直接安装在物理服务器上,提供高性能和集
中管理能力。可通过客户端或网页端访问管理界面,网页端逐渐成为主流,便于远程管理和维护。
之前用的是客户端连接 VMware vsphere
现企业 使用 网页端连接 VMware vsphere
2 KVM/OpenStack
KVM: 基于Linux内核的虚拟化技术,开源且强大,尤其适用于构建私有云环境。与OpenStack等云
平台结合,提供全面的虚拟化解决方案,适合大规模部署和服务自动化。
3 Xen
Xen Hypervisor: 是一个成熟的开源虚拟机监视器,特别是与RHEL(Red Hat Enterprise Linux)5
紧密集成,支持半虚拟化和全虚拟化,适用于企业级服务器虚拟化场景。
4 其他半/全虚拟化产品
Hyper-V (微软): 微软开发的虚拟化平台,特别适合Windows环境,广泛应用于Windows Server,
支持半虚拟化技术。
VirtualBox: 一款广受欢迎的免费虚拟机软件,适用于多种操作系统,支持全虚拟化,适合开发测试
和教育用途。
Citrix Hypervisor: 前身为XenServer,专注于提供高效的服务器和桌面虚拟化解决方案,适用于企
业环境,支持全虚拟化。
重点:
① KVM 全虚拟化产品 调用linux内核 来完成
② ESXI (裸金属虚拟化) 企业用的特别多 除了云 就是它
exsi流程图:
KVM:
二 docker 的相关知识
1. docker 的概念
docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 docker 可以
让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的
linux服务器,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类
iphone的app),并且容器开销极其低。
Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,
即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封
装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的
操作系统。
①docker容器的优点?
容器化越来越受欢迎,因为容器:
灵活:即使是最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:可以即时部署更新和升级。
便携式:可以在本地构建,部署到云,并在任何地方运行。
可扩展:可以增加并自动分发容器副本。
可堆叠:可以垂直和即时堆叠服务。
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其
他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需
要的资源更多。
②容器技术有哪些?
docker
podman : 与docker相似 OCI redhat
K8s
container : docker核心组件之一
LXC : linux 容器化技术
crio: 轻量级 专门用于 k8s
apche mesos : 容器编排平台
③容器在内核中支持2种重要技术:
docker 本质就是宿主机的一个进程,docker是通过 namespace 实现资源隔离,通过 cgroup
实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比
如分配500g并不是实际占用物理磁盘500g)。
④namespace的六项隔离
namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWWIPC 信号量、消息队列和共享内存
PID CLONE_NEWPID 进程编号
NETWORK CLONE_NEWNET 网络设备、网络栈、端口等
MOUNT CLONE_NEWNS 挂载点(文件系统)
USER CLONE_NEWUSER 用户和用户组(3.8以后的内核才支持)
2. docker 的三个重要概念
① image 镜像
Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的
只读模板。
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包
含代码,运行时间,库、环境变量和配置文件。
Docker 镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完
整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和
远端一样的环境,这也是 Docker 镜像的精髓。
② container 容器
Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是
相互隔离、互不可见,以保证平台的安全性。
可以把容器看做是一个简易版的 linux 环境(包括root用户权限、镜像空间、用户空间和网络空间
等)和运行在其中的应用程序。
镜像 nginx (run) 起来之后的一个实例,可以把容器看做时一个简易版的linux环境容器 就是集
装箱(logo上的集装箱)
③ repostory 仓库
Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传
到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只
需从仓库获取。
Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker
仓库就是放镜像的场所,做大的公开库 docker hub
registry 是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个
镜像,每个镜像有不同的标签(tag) 仓库分为两种,公有参考,和私有仓库,最大的公开仓库是
docker Hub,存放了数量庞大的镜像供用户下载,国内的docker pool,这里仓库的概念与 Git 类
似,registry 可以理解为 github 这样的托管服务。
3. docker 的主要用途
官方就是Bulid 、ship、run any app/any where,编译、装载、运行、任何app/在任意地方都能运行。就是实现了应用的封装、部署、运行的生命周期管理只要在glibc
的环境下,都可以运行。运维生成环境中:docker化。
发布服务不用担心服务器的运行环境,所有的服务器都是自动分配docker,自动部署,自动安装,
自动运行
再不用担心其他服务引擎的磁盘问题,cpu问题,系统问题
资源利用更出色
自动迁移,可以制作镜像,迁移使用自定义的镜像即可迁移,避免出现问题
管理更加快捷方便
4. docker 与虚拟机的区别
cgroup的特点
cgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理
cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资
源的分配和再利用
所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个
cgroup的控制组
cgroup的四大功能
资源限制:可以对任务使用的资源总额进行限制
优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先
级
资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
任务控制:cgroup可以对任务执行挂起、恢复等操作
总的来说,cgroup就是控制容器能够使用资源的上限
三. 安装 docker
目前 Docker 只能支持 64 位系统。
systemctl stop firewalld.service
setenforce 0
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
-----------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备
驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
-----------------------------------------------------------------------------------------
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io 安装最新版本
若想安装docker-ce-20.10.18,把docker-ce改成docker-ce-20.10.18即可
systemctl start docker.service
systemctl enable docker.service
-----------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责
管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大
部分情况下Docker服务端和客户端运行在一台机器上。
-----------------------------------------------------------------------------------------
1 关闭防火墙 防护
systemctl stop firewalld.service
setenforce 0
2 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,
它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
3 安装阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4 安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
安装最新版本
docker-ce-20.10.18
5 设置为开机自动启动
systemctl start docker.service
systemctl enable docker.service
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务
进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制
Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
6 查看 docker 版本信息
docker version
[root@docker ~]# docker version
Client: Docker Engine - Community
Version: 26.1.0
API version: 1.45
Go version: go1.21.9
Git commit: 9714adc
Built: Mon Apr 22 17:09:57 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 26.1.0
API version: 1.45 (minimum version 1.24)
Go version: go1.21.9
Git commit: c8af8eb
Built: Mon Apr 22 17:08:46 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.31
GitCommit: e377cd56a71523140ca6ae87e30244719194a521
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
7 docker 信息查看
docker info
[root@docker ~]# docker info
Client: Docker Engine - Community
Version: 26.1.0
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.14.0
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.26.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0 #容器数量
Running: 0
Paused: 0
Stopped: 0
Images: 0 #镜像数量
Server Version: 26.1.0 #server 版本信息
Storage Driver: overlay2
Backing Filesystem: xfs #宿主机上的底层文件系统
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs #Cgrop驱动
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: e377cd56a71523140ca6ae87e30244719194a521
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
seccomp
Profile: builtin
Kernel Version: 3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.686GiB
Name: docker
ID: 550bda84-3e70-4de5-ac4c-1b757191d36a
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
这段输出是通过在Linux终端执行docker info命令后显示的Docker服务详细信息,以下是各项参数的解释:
Client部分:
显示的是客户端使用的Docker引擎版本(这里是Docker Engine - Community 26.0.2)及其上下文、调试模式等信息,以及安装的插件及其版本,包括Buildx和Compose。
Server部分:
Containers:表示当前服务器上总的容器数量,以及正在运行、暂停和停止的容器数量。
Images:当前存在的镜像数量。
Server Version:运行的Docker服务端版本号。
Storage Driver:使用的是overlay2存储驱动程序,以及相关的文件系统设置。
Logging Driver:日志记录驱动为json-file格式。
Cgroup Driver:控制组驱动为cgroupfs,Cgroup Version为1。
Plugins:列出了一系列已安装的插件,包括Volume类型、Network类型、Log驱动等。
Swarm:表明Swarm模式未激活。
Runtimes:列出支持的容器运行时,这里包括io.containerd.runc.v2和runc。
Kernel Version、Operating System、OSType、Architecture、CPUs和Total Memory提供了宿主机的基本系统信息。
Docker Root Dir:Docker数据根目录的位置。
Security Options:支持的安全选项,此处显示启用了seccomp安全特性,并指定了内建的seccomp配置文件。
Insecure Registries:允许不验证证书的私有仓库列表。
Live Restore Enabled:是否启用实时恢复功能,此处为false,意味着没有启用。
总体而言,这段信息详细展示了Docker服务的配置情况、运行状态以及底层操作系统和硬件环境的概况。
四 Docker 镜像操作
1 搜索镜像
格式:docker search 关键字
docker search nginx
2 获取镜像
获取镜像 nginx
格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull nginx
3 镜像加速下载
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://m6wtxrrn.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
4 查看镜像信息
查看镜像信息
镜像下载后存放在 /var/lib/docker 。
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,
其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。
5 查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
6 查看下载到本地的所有镜像
docker images
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
7 根据镜像的唯一标识 ID 号,获取镜像详细信息
根据镜像的唯一标识 ID 号,获取镜像详细信息
格式:docker inspect 镜像ID号
docker inspect 2ac752d7aeb1
8 为本地的镜像添加新的标签
为本地的镜像添加新的标签
格式:docker tag 名称:[标签] 新名称:[新标签]
docker tag nginx:latest nginx:web
#查看
docker images | grep nginx
9 删除镜像 标签
格式:
docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号 #会彻底删除该镜像
注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
10 存出镜像:将镜像保存成为本地文件
格式:docker save -o 存储文件名 存储的镜像
docker save -o nginx nginx:latest #存出镜像命名为nginx存在当前目录下
ls -lh
①导出到本地
②导出到指定目录
11 载入镜像:将镜像文件导入到镜像库中
载入镜像====:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
docker load < nginx
docker load -i nginx
12 上传镜像
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
docker tag nginx:latest soscscs/nginx:web #添加新的标签时必须在前面加上自己的dockerhub的username
docker login #登录公共仓库
Username:soscscs
password:123
docker push soscscs/haproxy:web #上传镜像
13 上传镜像到仓库
docker tag nginx:latest ydqhub/nginx:web
#修改标签
docker login
#登录公共仓库
docker push ydqhub/nginx:web
#上传镜像
14 批量删除
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash #批量删除镜像
docker images | grep v1 | awk '{print $3}' | xargs docker rmi #删除标签为v1镜像
五 Docker 容器操作
1 容器创建:就是将镜像加载到容器的过程。
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入
-t:让 Docker 分配一个伪终端 tty
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell
docker create -it nginx:latest /bin/bash
2 查看容器的运行状态
docker ps
#查看正在运行的容器
docker ps -a
#查看所有的容器
3 启动容器
格式:docker start 容器的ID/名称
docker start 8b0a7be0ff58
docker ps -a
3 创建并启动容器
可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。
注意:容器是一个与其中运行的 shell 命令共存亡的终端,命令运行容器运行, 命令结束容器退
出。
当利用 docker run 来创建容器时, Docker 在后台的标准运行过程!
(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
(5)分配一个地址池中的 IP 地址给容器;
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。
docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,如果docker容器中 pid = 1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。
/var/lib/docker
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a #会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了
#在后台持续运行 docker run 创建的容器
需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker ps -a #可以看出容器始终处于 UP,运行状态
peaceful_chatelet
docker run -itd --name test1 centos:7 /bin/bash #创建容器并持续运行容器
4 在后台持续运行 docker run 创建的容器
① -d 与不加 -d
需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker ps -a #可以看出容器始终处于 UP,运行状态
docker run -itd --name test1 centos:7 /bin/bash #创建容器并持续运行容器
② 创建运行centos7
③ 死循环
5 终止容器运行
格式:docker stop 容器的ID/名称
docker stop 2592d3fad0fb
docker ps -a
6 查看容器IP及详细信息
#要查看IP地址,需要开启一个容器,才会进行分配IP地址
docker inspect 【容器ID】
#查看指定id的详细信息
7 容器的进入
docker run -it 会创建前台进程,但是会输入exit后会终止进程
dcoker attach 会通过连接stdin,连接到容器内输入输出流,会再输出exit后终止容器操作
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容
器,但不影响容器运行。
格式:docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。
docker start 2592d3fad0fb #进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit #退出容器后,容器仍在运行
docker ps -a
docker run -it centos:7 bash #不加 -d 选项会创建容器后直接进入容器,但是退出容器,容器也会停止
① 临时进入
使用run进入,可以使用ctrl+d退出,直接退出终端
docker run -it centos:7 usr/bin/bash
②永久性进入,退出后还是运行状态
docker run -itd centos:7 /bin/bash 或者 dockers start 【容器id】
需要先运行容器
docker exec -it 【容器ID】 /bin/bash
③ docker attach
会通过连接stdin,连接到容器内输入输出流,公在输入exit后终止容器进程(临
时性的,不推荐)
面试题
怎么把宿主机的文件传入到容器内部
1、linux 怎么复制
cp 原文件路径目标文件路径
docker cp l opt / abc容器id: /opt/abc
8 宿主机复制到容器中
docker 【源文件路径】 【目标文件路径】
docker cp /opt/mcb。txt 【容器id】:/opt/
#将本地文件导入到容器中
9 将容器文件导出到本地
docker cp 【容器id】:/opt/
10 容器文件导出与导入
用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
导出格式:docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7.tar
导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test #导入后会生成镜像,但不会创建容器
11 删除容器
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash #批量停止容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stop
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash #批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi #删除none镜像
docker rm $(docker ps -a -q) #批量清理后台停止的容器
docker rm 2592d3fad0fb #删除已经终止状态的容器
docker rm -f 2592d3fad0fb #强制删除正在运行的容器
docker rm -f `docker ps -q` 删除所有正在运行容器