docker基础
一,云计算
1.云计算模式
公有云、私有云和混合云是三种主要的云计算部署模式,它们各自具有不同的特点、优势和典型的产品/服务。以下是对这些云模式的详细解释和其对应的产品示例。
1. 1公有云(Public Cloud)
定义:
公有云是一种由第三方云服务提供商运营的云平台,资源(如服务器和存储)由多个用户共享,并通过互联网进行访问。公有云通常按需付费,支持高度的弹性和扩展性,适合于各种规模的企业。
特点:
- 按需计费,低前期投入
- 弹性扩展性强
- 资源共享,维护由服务提供商负责
- 安全性和隐私依赖于服务提供商的保障
代表产品:
- AWS(亚马逊云):全球最大和最成熟的公有云服务提供商,提供丰富的IaaS、PaaS、SaaS服务。
- 阿里云:中国领先的公有云平台,广泛用于企业和政府,提供计算、存储、数据库、AI等服务。
- 微软Azure:提供全面的云服务,覆盖基础设施、平台和软件即服务,并与微软生态系统高度集成。
- 腾讯云:提供广泛的云产品和服务,包括云服务器、数据库、AI服务等。
- 谷歌云(GCP):提供强大的数据分析和机器学习平台。
1.2私有云(Private Cloud)
定义:
私有云是为特定企业或组织专门构建和使用的云基础设施,资源不与其他组织共享。私有云可以在组织的本地数据中心部署,也可以由第三方托管。这种模式提供了更高的安全性和控制力,特别适合对数据隐私和安全有较高要求的企业。
特点:
- 高度的安全性和隐私
- 自主控制和自定义
- 可以部署在本地或托管在第三方数据中心
- 成本较高,前期投资大
代表产品:
- VMware:提供虚拟化技术和私有云基础设施解决方案,广泛用于数据中心管理。
- OpenStack:开源私有云平台,提供高度可定制的云环境,适合企业构建自主可控的私有云。
- 华为云Stack:华为的私有云解决方案,专注于政府、金融和大型企业的需求。
- Oracle Cloud at Customer:允许客户在自己的数据中心运行Oracle云服务,支持本地私有云环境。
1.3混合云(Hybrid Cloud)
定义:
混合云是一种集成了公有云和私有云的解决方案,允许数据和应用在这两种环境中无缝切换。混合云支持企业在需要时使用公有云的弹性和扩展性,但同时保持某些关键数据或应用在私有云中进行控制。它能为企业提供灵活性,同时满足安全、隐私和合规要求。
特点:
- 公有云的灵活性与私有云的控制力结合
- 数据和应用可以在公有云和私有云之间转移
- 最适合需要高度安全性和合规性、但又需要弹性的企业
- 成本优化,可根据需求选择不同的云模式
代表产品:
- 微软Azure Stack:微软的混合云解决方案,允许企业在本地运行Azure服务并与Azure公有云集成。
- IBM Cloud:提供广泛的混合云产品,包括对私有云和公有云的支持,帮助企业集成现有基础设施。
- AWS Outposts:亚马逊的混合云服务,允许AWS的基础设施部署在本地数据中心,提供与AWS云服务一致的体验。
- VMware Cloud on AWS:VMware和AWS的混合云解决方案,结合了VMware的私有云技术和AWS的公有云服务。
总结
- 公有云:适用于需要快速部署和弹性扩展,且对隐私和安全要求不高的企业。
- 私有云:适合对数据安全、合规性有严格要求的企业,如金融、医疗、政府等。
- 混合云:适合那些需要结合公有云的弹性和私有云的安全控制的企业,特别是那些需要分阶段迁移到云上或者处理大量敏感数据的企业。
不同企业可以根据自身业务需求和预算选择适合的云计算模式。
2. 云计算服务的三种主要模式
IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务)之间的区别。
2.1IaaS(Infrastructure as a Service,基础设施即服务):
在IaaS中,云服务提供商管理网络、存储、服务器和虚拟化,而用户则负责管理操作系统、中间件、运行时环境、数据和应用程序。它为用户提供了最大的灵活性,允许用户直接控制底层基础设施。
厂商管理:网络、存储、服务器、虚拟化
用户管理:操作系统、中间件、运行时环境、数据、应用程序
典型产品:Amazon EC2、Google Compute Engine、Microsoft Azure VM。
2.2PaaS(Platform as a Service,平台即服务):
PaaS提供的服务较IaaS更高级,用户无需关心底层的虚拟化、服务器和操作系统,专注于管理应用程序和数据。服务提供商负责管理包括操作系统和运行时环境在内的大部分基础设施。
厂商管理:网络、存储、服务器、虚拟化、操作系统、中间件、运行时环境
用户管理:数据、应用程序
典型产品:Google App Engine、Microsoft Azure App Services、Heroku。
2.3SaaS(Software as a Service,软件即服务):
在SaaS模式中,云服务提供商提供了完整的应用程序,用户只需使用这些应用程序,所有底层的基础设施和应用程序的管理工作都由服务提供商负责。
厂商管理:网络、存储、服务器、虚拟化、操作系统、中间件、运行时环境、数据、应用程序
用户管理:使用应用程序
典型产品:Google Workspace(如Gmail、Google Docs)、Microsoft Office 365、Salesforce。
随着服务模式的变化,用户管理的责任逐渐减少,而云服务提供商承担的管理责任逐渐增加。
二,什么是docker
- Docker是一个开源的应用容器引擎,基于Go语言开发并遵从Apache2.0协议。
- 它允许开发者将应用及其依赖打包到一个可移植的容器中,然后发布到任何支持Docker的平台上。
- Docker类似虚拟机,比虚拟机更加轻量化。
- Docker容器共享宿主机的操作系统内核,因此启动速度更快,资源占用更少。
1.Docker设计宗旨
Build, Ship, and Run Any App, Anywhere:Docker的设计宗旨是实现应用组件级别的“一次封装,到处运行”。这意味着开发者可以将应用及其依赖打包成Docker镜像,然后在任何支持Docker的平台上运行这些镜像,无需担心环境差异和依赖问题。打包的镜像既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
广泛的应用场景:Docker的应用场景非常广泛,包括但不限于Web应用、数据库、大数据处理、机器学习等。通过Docker,开发者可以轻松地构建、部署和管理这些应用,提高开发效率和运维质量。
2.Docker的优点
灵活: 最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:可以即时部署更新和升级。
便携式:可以在本地构建,部署到云,并在任何地方运行。
可扩展:可以增加并自动分发容器副本。
可堆叠:可以垂直和即时堆叠服务。
3.Docker容器技术与虚拟机的区别
3.1虚拟化架构
(1)全虚拟化
- 特点:完全模拟硬件环境,操作系统与底层硬件隔离。
- 优点:提供良好的隔离性和兼容性,无需修改操作系统。
- 缺点:可能引入性能开销,增加系统复杂性。
(2)半虚拟化:
- 特点:操作系统与虚拟机管理程序(虚拟机和宿主机)配合,提高性能和效率。
- 优点:性能较高,提供更好的硬件访问性能。
- 缺点:需要修改操作系统,可能影响兼容性,增加部署和维护难度
EXSI VMWARE VSphere 企业版 (全虚拟化 常用 硬件配置 1TB硬盘 CPU48核 2个CPU)
客户端 (半虚拟化 VMware Workstation Pro 苹果 Fusion MAC)
半虚拟化产品:
KVM(可以是全虚拟化,也可以是半虚拟化)适合linux生态系统,对成本要求要小的环境
OpenStack(linux操作系统之上安装的 ,华为云,阿里云)
citrix HYpervisior( Citrix 公司开发的基于开源 Xen 项目的企业级虚拟化管理程序)虚拟机桌面要求较高
HYpervisior 微软 (windows server 2012/2016/2019等等)
Oracle VM VirtualBox 适合个人和开发使用
VMWARE VSphere 和 HYperv 适合企业级生产环境·VMWARE VSphere更强大成本比较高, HYperv对windows用户更方便友好
3.2区别
Docker容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更大
特性 | 虚拟机 | Docker 容器 |
---|---|---|
启动速度 | 分钟级 | 秒级 |
计算能力损耗 | 损耗 50%左右 | 几乎无 |
性能 | 弱于 Docker | 接近原生 |
系统支持量(单机) | 几十个 | 上千个 |
隔离性 | 完全隔离 | 资源隔离/限制 |
(1)容器在内核中支持的两种重要技术是:
a.Namespace(命名空间):
- 作用:Namespace 提供进程间的隔离,使得 Docker 容器看起来像是独立的操作系统环境。
- 实现:通过不同类型的 Namespace 实现资源的隔离,包括:
- PID namespace:隔离进程 ID 空间,容器内只能看到自己的进程。
- NET namespace:隔离网络接口,容器拥有自己的网络栈。
- MNT namespace:隔离文件系统挂载点,容器内看到的文件系统与其他容器和主机不同。
- UTS namespace:隔离主机名和域名。
- IPC namespace:隔离进程间通信。
- USER namespace:隔离用户 ID 和组 ID。
Namespace 是 Linux 内核提供的一种资源隔离机制,六项隔离的详细内容如下:
Namespace | 系统调用参数 | 隔离内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名与域名,使容器内可以拥有自己的主机名和域名。 |
IPC | CLONE_NEWPIPC | 隔离信号量、消息队列和共享内存,确保不同容器的进程间通信不会干扰。 |
PID | <font style="color:#DF2A3F;">CLONE_NEWPID</font> | 隔离进程编号,使容器内的进程编号与宿主机隔离,容器内的进程可以从 PID 1 开始,重点。 |
NETWORK | <font style="color:#DF2A3F;">CLONE_NEWNET</font> | 隔离网络设备、网络栈、端口等,使每个容器有自己的网络栈,可以独立配置 IP 地址、路由等,重点。 |
MOUNT | CLONE_NEWNS | 隔离文件系统的挂载点,使容器内可以有自己独立的挂载点和文件系统。 |
USER | CLONE_NEWUSER | 隔离用户和用户组,使容器内的用户 ID 和组 ID 与宿主机隔离(3.8 以后的内核才支持)。 |
**CLONE_NEWUSER**
(用户隔离)是 Linux 3.8 版本后新增的功能:
- 用户隔离允许容器中的用户与宿主机用户空间隔离,这样容器中的用户可以拥有不同的权限和身份,而不会影响宿主机的用户权限。例如,容器内的一个进程可以以 root 权限运行,但在宿主机中,它仅具有普通用户的权限,从而提高了安全性。
这一机制是 Linux 内核提供的一个重要特性,为容器化和安全隔离提供了更灵活的方式。
b.cgroup(控制组):
- 作用:cgroup 用于限制容器的资源使用,例如 CPU、内存、磁盘 I/O、网络带宽等。
- 实现:通过 cgroup,可以为每个容器设定资源的上限和配额,确保一个容器不会占用过多资源,影响其他容器或宿主机的性能。
另外,Docker 还使用了 写时复制技术(Copy-On-Write),它使得文件操作更加高效:
- **作用:**CoW 是一种优化文件操作的技术,只有当文件发生修改时,才会创建副本。如果只是读取操作,多个容器可以共享同一个文件系统层。
- **应用场景:**例如,虚拟机分配的磁盘容量(如 500GB)并不是立即占用物理磁盘 500GB,而是随着实际使用情况动态增长。同样,Docker 容器也通过 CoW 实现文件系统层的共享,节省磁盘空间,并提高容器启动速度和文件操作效率。
总结
Docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。
4.Docker的核心概念
4.1 镜像(Image)
- 定义:Docker 镜像是一个轻量级、可执行的独立软件包,其中包含了运行特定程序所需要的所有代码、依赖库、工具和配置文件。
- 功能:镜像类似于虚拟机的快照,包含运行容器所需的文件系统。通过镜像可以创建和启动容器。
- 特性:Docker 镜像是只读的,每当容器启动时,会为镜像创建一个可写的层(写时复制)。
4.2容器(Container)
- 定义:Docker 容器是镜像的一个实例,它运行在 Docker 引擎上,具有自己的文件系统、网络环境和进程空间。
- 功能:容器是一个轻量级的虚拟化环境,通过隔离技术(如 namespace 和 cgroup)实现与宿主机隔离,同时能高效共享宿主机的资源。
- 特点:容器启动速度极快,几乎没有性能开销,适合快速部署、扩展和管理。
4.3仓库(Registry)
- 定义:Docker 仓库是存储和分发 Docker 镜像的地方。常见的 Docker 仓库包括官方的 Docker Hub 和私有的 Docker Registry。
- 功能:用户可以将创建的镜像推送到仓库中,也可以从仓库中拉取镜像,用于在不同的环境中启动容器。
- 种类:
- 公共仓库:如 Docker Hub,全球用户都可以访问并拉取镜像。
- 私有仓库:用户可以部署自己的私有仓库,用于存储公司内部的镜像。
Docker的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker
三,Docker安装
Docker 只能支持 64 位系统。
docker
1.关闭防火墙,临时关闭增强功能
systemctl stop firewalld
setenforce 0
2.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
um-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 安装最新版本
或
yum install -y docker-ce-20.10.18 ocker-ce-cli-20.10.18 containerd.io 指定安装版本
5.开机自启Docker
systemctl enable --now docker.service
Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
四,docker镜像命令操作
1.查看 docker 版本信息
docker version
2.信息查看
docker info
Client 部分(客户端信息):
Client: Docker Engine - Community: 表示你使用的是 Docker 社区版。
Version: 26.1.4: Docker 客户端的版本号。
Context: default: 当前使用的 Docker 上下文(通常是默认的环境配置)。
Debug Mode: false: Docker 客户端的调试模式关闭(false)。
Plugins:
buildx: Docker 的构建插件,用于支持多架构镜像构建。
Version: v0.14.1: buildx 插件的版本。
Path: 插件存放的位置 /usr/libexec/docker/cli-plugins/docker-buildx。
compose: Docker Compose 插件,用于多容器应用程序编排。
Version: v2.27.1: compose 插件的版本。
Path: 插件路径 /usr/libexec/docker/cli-plugins/docker-compose。
Server 部分(服务器端信息):
Containers: 当前 Docker 容器的信息:
Running: 0: 正在运行的容器数为 0。
Paused: 0: 暂停的容器数为 0。
Stopped: 0: 停止的容器数为 0。
Images: 0: Docker 中当前存在的镜像数量为 0。
Server Version: 20.10.18: Docker 服务器端的版本号为 20.10.18。
Storage Driver: overlay2: 使用 overlay2 作为 Docker 存储驱动,常见且高效的存储选项。
Backing Filesystem: xfs: 底层文件系统是 xfs。
Supports d_type: true: 文件系统支持 d_type,这是 overlay2 驱动正常工作的必要条件。
Native Overlay Diff: true: Docker 使用本地差异存储优化性能。
userxattr: false: 用户扩展属性未启用。
Logging Driver: json-file: Docker 使用 json-file 作为日志记录驱动,将日志记录在 JSON 文件中。
Cgroup Driver: cgroupfs: 使用 cgroupfs 作为 cgroup 驱动管理容器的资源分配(如 CPU、内存等)。
Cgroup Version: 1: 使用 cgroup v1 版本(较旧的版本)。
Plugins: Docker 支持的各种插件:
Volume: 存储卷插件,支持 local 存储卷。
Network: 网络插件,支持 bridge, host, ipvlan, macvlan, null, overlay 等。
Log: 日志插件,支持 awslogs, fluentd, gcplogs, gelf, journald, json-file, local, logentries, splunk, syslog。
Swarm: inactive: Docker 的 Swarm 模式(集群管理)未激活。
Runtimes:io.containerd.runc.v2: 使用 containerd 作为容器运行时 io.containerd.runtime.v1.linux: 旧版本的容器运行时。
runc: runc 是容器的默认运行时。
Default Runtime: runc: 默认的容器运行时是 runc。
Init Binary: docker-init: Docker 容器使用 docker-init 作为初始化进程。
containerd version: d2d58213f83a351ca8f528a95fbd145f5654e957: containerd 运行时的版本号。
runc version: v1.1.12-0-g51d5e94: runc 运行时的版本号。
init version: de40ad0: docker-init 的版本。
Security Options:
seccomp: Docker 使用 seccomp(安全计算模式),用来限制容器内的系统调用。
Profile: default: 使用默认的 seccomp 配置文件。
Kernel Version: 3.10.0-693.el7.x86_64: Docker 服务器所在的操作系统内核版本是 3.10.0。
Operating System: CentOS Linux 7 (Core): 服务器的操作系统是 CentOS 7。
OSType: linux: 操作系统类型是 Linux。
Architecture: x86_64: 系统架构是 64 位的 x86 架构。
CPUs: 4: 服务器有 4 个 CPU 核心。
Total Memory: 7.624GiB: 系统总内存为 7.6 GB。
Name: apache: 服务器主机名为 apache。
ID: KPXH:BT2Y:B7JD:VM4S:OUW3:574S:BB5W:JKZK:M5NI:ZVMY:3INR:QEVV Docker 服务器的唯一标识符。
Docker Root Dir: /var/lib/docker: Docker 的根目录,所有容器、镜像等文件存储在此目录下。
Debug Mode: false: Docker 服务器的调试模式关闭(false)。
Experimental: false: 实验性功能未启用。
Insecure Registries: Docker 注册表配置中不安全的注册表(不使用 HTTPS):
127.0.0.0/8: 允许本地回环 IP 地址范围(127.0.0.0/8)的不安全注册表。
Live Restore Enabled: false: Live Restore 功能未启用。启用该功能后,当 Docker 守护进程崩溃时,容器仍会继续运行。
3.搜索镜像
docker search 关键字
例
docker search mysql
4.获取镜像
docker pull 仓库名称或标签
如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
例
docker pull nginx #加上nginx版本号就下对应的版本,不设置就下载最新版本
5.镜像加速下载配置方法
5.1阿里云加速器
web访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
在主机配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5.2华为加速器
web访问https://activity.huaweicloud.com获取镜像加速器配置
在主机配置
vi /etc/docker/daemon.json
{
"registry-mirrors": [ "加速器地址" ]
}
systemctl restart docker
6.查看镜像信息
镜像下载后在/var/lib/docker目录中
**buildkit**
:用于 Docker 的BuildKit
功能。BuildKit 是 Docker 用于构建镜像的工具,能够提高构建速度,支持更复杂的构建配置。这个目录包含 BuildKit 构建相关的缓存和元数据。**containers**
:存储所有运行或已停止的 Docker 容器的信息。每个容器都有一个唯一的 ID,Docker 在这里保存容器的状态、日志、配置等。**image**
:用于存储 Docker 镜像及其相关的元数据。镜像是容器的基础,Docker 从这里加载镜像并启动容器。**network**
:存储 Docker 创建的网络配置信息。Docker 使用自定义的网络驱动(如 bridge、overlay 等)为容器提供网络隔离和通信能力,这个目录保存了所有的网络配置和网络状态。**overlay2**
:存储 Docker 使用的 OverlayFS 文件系统的分层数据。这是 Docker 默认的存储驱动,overlay2
允许多个容器共享相同的基础层,从而节省磁盘空间。每个容器和镜像的文件系统层次结构都存储在这里。**plugins**
:存储 Docker 插件的相关信息。Docker 支持使用插件来扩展其功能,比如存储、网络等,插件的数据和配置文件会保存在这个目录中。**runtimes**
:存储 Docker 支持的运行时(runtime)信息。Docker 默认使用runc
作为运行时,但也可以通过这个目录支持其他运行时(如containerd
等)。**swarm**
:用于存储 Docker Swarm 的配置和状态信息。Swarm 是 Docker 的集群管理和编排工具,允许用户将多个 Docker 主机组合成一个集群,这个目录保存了 Swarm 的集群状态、服务等相关数据。**tmp**
:临时文件存储目录。Docker 在运行过程中可能会生成一些临时文件,这些文件会被保存在这个目录中。通常用于缓存、临时数据等。**trust**
:存储与 Docker 内容信任(Docker Content Trust, DCT)相关的信息。Docker Content Trust 是一个用于验证和签署镜像的安全机制,确保拉取和运行的镜像没有被篡改。**volumes**
:存储 Docker 容器的卷数据。卷(Volumes)是一种持久化存储机制,用于在容器之间共享数据或确保容器重启后数据不会丢失。所有创建的卷及其数据都会存放在这个目录下。
6.1查看下载下来的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
6.2查看下载到本机的所有镜像
docker images
- REPOSITORY:镜像属于的仓库
- TAG:镜像的标签信息,标记同一个仓库中的不同镜像
- IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像
- CREATED:镜像创建时间
- VIRTUAL SIZE:镜像大小
6.3根据镜像标识ID号(唯一的),查看镜像详细信息
docker inspect 标识ID号
例
docker inspect 7f553e8bbc89 #上面nginx的ID号
7.修改镜像名标签
docker tag 原镜像名:原标签 新镜像名:新标签
例
docker tag nginx:latest nginx:web
8.删除镜像
docker rmi 镜像名:web
例
docker rmi nginx:web
或
docker rmi 7f553e8bbc89
假设删除不了加选项f强制删除
docker rmi -f 7f553e8bbc89
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash#批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi#删除none镜像
9.存出镜像
docker save -o 存储文件名 存储的镜像 #将镜像保存成为本地文件
例
docker save -o nginx nginx:latest#存出镜像命名为nginx存在当前目录下
存储镜像命令在使用时将文件压缩打包
10.载入镜像
docker load < 存出的文件 #将镜像文件导入到镜像库中
或
docker load -i 存出的文件
例
docker load < nginx
或
docker load -i nginx
模拟载入,将nginx镜像使用scp命令传到另一台主机,用另一台主机载入
11.上传镜像
docker上传镜像默认上传到 docker Hub 官方公共仓库,要注册使用公共仓库的账号。
使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,需要先对本地的镜像添加新标签,再使用 docker push 命令进行上传。
docker tag nginx:latest abc/nginx:web#添加新的标签时必须在前面加上自己的dockerhub的username
docker login#登录公共仓库
Username:abc
password:123456
docker push soscscs/nginx:web#上传镜像
现在用不了,用华为的代替,先建一个
sudo docker tag {镜像名称}:{版本名称} swr.cn-north-4.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}
sudo docker push swr.cn-north-4.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}
例
docker tag redis:latest swr.cn-north-4.myhuaweicloud.com/miao-miao/redis
docker push swr.cn-north-4.myhuaweicloud.com/miao-miao/redis
五,docker容器命令操作
1.创建容器
将镜像加载到容器的过程,新创建的容器默认处于停止模式,程序不会运行,要发起一个进程才能启动容器
docker create 选项 镜像
常用选项
-i :让容器的标准输入保持打开。
-t :为容器分配一个伪终端(pseudo-TTY)。
-it :-i 和 -t 的组合,让容器的标准输入保持打开,并分配一个伪终端(运行一个交互式会话shell)。
例
docker create -it redis:latest /bin/bash #/bin/bash启动方式
2.查看容器状态
docker ps -a
-a :显示所有容器状态,非正常正常状态的容器都显示
docker ps 只显示正常状态的容器
- CONTAINER ID: 这是Docker为每个容器分配的唯一标识符。它通常是一个长字符串,但通常只显示前几个字符以便于阅读。
- IMAGE: 容器基于的镜像。镜像是一个轻量级、可执行的独立软件包,它包括运行某个软件所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件等。
- COMMAND: 容器启动时运行的命令或程序。这是容器的主要执行点。
- CREATED: 容器被创建的日期和时间。
- STATUS: 容器的当前状态,例如“Up”表示容器正在运行,“Exited”表示容器已经停止运行等。
3.启动容器
docker start 容器的ID或者名称
4.创建启动容器
docker run #相当于先执行docker create 命令再执行docker start
例
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a
#会发现创建了一个新容器并启动执行一条·shell·命令,之后就停止了
例
在后台持续运行 docker run 创建的容器
docker run -itd centos:7 /usr/bin/bash -c "while true;do echo hello;done"
-d 选项让·Docker·容器以守护形式在后台运行。并且容器所运行的程序不能结束。
-i :让容器的标准输入保持打开。
-t :为容器分配一个伪终端(pseudo-TTY)。
-it :-i 和 -t 的组合,让容器的标准输入保持打开,并分配一个伪终端(运行一个交互式会话shell)。
docker ps -a
#显示当前所有的容器 #可以看出容器始终处于·UP,运行状态
4.1Docker容器的生命周期与其内部运行的主命令或进程紧密相关,命令运行则容器运行,命令结束则容器退出。
4.2Docker容器默认会将容器内部第一个启动的进程(PID为1的进程)作为容器是否正在运行的判断依据。
如果PID为1的进程终止,Docker容器会认为没有前台进程在运行,从而直接退出。
这意味着在Docker容器中必须保持至少一个前台进程持续运行,以维持容器的活跃状态。
如果所有前台进程都结束,容器将被视为已挂掉并停止运行。
4.3/var/lib/docker是 Docker 引擎在 Linux 系统中默认存储 Docker 数据的目录。这个目录包含了 Docker 引擎的运行时数据、容器镜像、容器卷等相关文件
4.4用 docker run 来创建容器时, Docker 在后台的标准运行过程:
(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
(5)分配一个地址池中的 IP 地址给容器;
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。
总结
docker run 的运行过程
1、检查本地是否存在镜像,如没有就从仓库(公共/私有)中拉取镜像
2、基于镜像 创建并启动镜像
3、容器会在镜像层外面去挂载一层可提供读写 的一个容器层
4、给容器分配网络接口做桥接docker0网桥,并且分配容器IP
5、执行启动容器时指定的PID=1 前台进程
5,停止容器运行
docker stop 容器的ID或者名称
例
docker stop ab73c83bf341
6.将宿主机的文件传入容器内部
6.1复制
echo ABC-abc > test1.txt
docker cp test1.txt brave_jepsen:/home
6.2确认
docker exec -it brave_jepsen /bin/bash
进入docker机器
docker exec:执行命令来运行一个新的进程。
brave_jepsen:这是要进入的容器的名称或容器ID。
/bin/bash:这个是要在容器中执行的命令,在 Bash shell,允许进入容器的 Bash 终端。
7.将容器的文件拷贝到宿主机
docker cp brave_jepsen:/etc/host.conf /home/
8.容器的导出和导入
可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移(注意打包的是容器!!!)
8.1容器导出
docker export 容器ID或名称 > 文件名
例
docker export centos01 > centos7.tar
scp centos7.tar 192.168.88.90:/opt
8.2容器导入
到192.168.88.90主机上导入容器启动验证刚刚home下的test1.txt是否存在
cd /opt/
cat centos7.tar|docker import - centos7:test
docker run -itd --name centos02 centos7:test /bin/bash
9.删除容器
docker rm 容器ID或名称
删除不了的加上-f选项强制删除
删除容器先停止容器在在删除
docker stop 容器ID或名称
docker rm 容器ID或名称
批量停止容器
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
可以写$1或$3,docker ps -a 命令显示的第一列和第三列分别是容器名称和容器ID
docker rm $(docker ps -a -q)#批量清理后台停止的容器
六,Docker网络
1.Docker网络简介
Docker 在使用 Linux 桥接 网络时,会为每个容器分配一个 Container-IP
,并且所有容器都通过一个虚拟网桥(docker0
)连接起来。容器之间可以通过彼此的 Container-IP
直接进行通信,而 docker0
网桥就是这些容器的默认网关。同一宿主机内的容器都接入同一个网桥,容器之间就能够通过容器的 Container-IP 直接通信。
Docker 网桥(例如 docker0
)是宿主机虚拟出来的一个网络设备,它存在于宿主机的网络命名空间中,实际上是一个虚拟的二层网络设备,用于连接 Docker 容器。由于 docker0
网桥是虚拟设备,且运行在宿主机的私有网络命名空间中,因此外部网络无法直接通过容器的 Container-IP
进行访问。
docker run -d --name test1 -P nginx #随机映射端口(从32768开始),一般不这么操作
docker run -d --name test2 -p 43000:80 nginx#
-d后台运行
43000主机端口
80容器端口
浏览器登录192.168.88.80:8010,端口80是容器内的端口登录不了
2.查看docker容器日志信息
docker logs 容器的ID或者名称
例
docker logs test1
3.Docke网络模式
Docker 提供了几种不同的网络模式,允许容器之间、容器与主机之间以及容器与外部网络之间进行灵活的通信。每种网络模式都有其独特的用途和场景。下面是 Docker 中常见的网络模式:
3.1 Bridge 模式(默认模式)
Bridge 网络是 Docker 的默认网络模式。Docker 启动容器时,会自动将容器连接到一个默认的虚拟网桥(docker0
)。容器之间通过这个桥接网络进行通信。
- 特点:
- 每个容器都有一个独立的
Container-IP
,容器之间通过Container-IP
进行通信。 - 容器可以与宿主机通信,外部网络不能直接通过
Container-IP
访问容器,需使用端口映射(-p
或-P
)来允许外部网络访问。 - 适用于在单个宿主机上运行多个相互通信的容器。
- 每个容器都有一个独立的
docker run -itd --name test5 --network bridge centos:7 /bin/bash
在这个命令中,容器的 80 端口被映射到宿主机的 8080 端口,允许外部访问。
3.2 Host 模式
在 Host 模式下,Docker 容器直接使用宿主机的网络堆栈。容器没有自己的独立 Container-IP
,它共享宿主机的 IP 地址和网络端口。
-
特点:
- 性能较好,因为没有额外的网络虚拟化开销。
- 容器与宿主机使用相同的 IP 和端口,没有
docker0
网桥。 - 容器暴露的端口与宿主机冲突,需要小心管理端口。
- 适用于性能要求较高的场景,或与主机密切集成的容器。
在这个模式下,容器内的服务会直接绑定到宿主机的网络接口,外部网络可以通过宿主机的 IP 访问容器的服务。
3.3 None 模式
在 None 模式下,Docker 不为容器分配任何网络接口,容器完全隔离于网络之外。
- 特点:
- 容器没有网络连接,不能与其他容器或宿主机通信。
- 适用于完全不需要网络的容器,或需要自行配置网络的场景。
docker run -itd --name test4 --net none centos:7 /bin/bash
3.4 Container 模式
在 Container 模式下,多个容器共享同一个网络命名空间(namespace)。一个容器的网络接口会与另一个容器共享,这使得它们像是在同一个网络中运行一样。
- 特点:
- 容器共享同一个
Container-IP
和网络配置。 - 适用于容器之间需要高效通信的场景,通常与容器组合(如 sidecar 模式)使用。
- 容器共享同一个
docker run -itd --name test2 centos:7 /bin/bash
--name 选项可以给容器创建一个自定义名称
docker ps -a
docker inspect -f '{{.State.Pid}}' 3e1a479316a3#查看容器进程号
ls -l /proc/21903/ns#查看容器的进程、网络、文件系统等命名空间编号
docker run -itd --name test2 --net=container:3e1a479316a3 centos:7 /bin/bash
--name 选项可以给容器创建一个自定义名称
docker ps -a
docker inspect -f '{{.State.Pid}}' 865de8a18c55#查看容器进程号
ls -l /proc/22329/ns#查看容器的进程、网络、文件系统等命名空间编号
对比发现net号和user号一样
3.5自定义网络
使用bridge模式,是无法支持指定IP运行docker的,例如执行以下命令就会报错
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
自定义网络先定义网络,在指定ip运行docker
docker 网络·总结
HOST 与宿主机共享网络名称空间/网络协议
Container:多个容器之间共享一个network namespaces
none 自闭空间
bridge:默认模式通过VEth对连容器与docker0网桥,网桥自动分配容器IP,同时docker0作为·“局域网”·内容器的网关,最后和宿主机网卡镜像通讯
原文地址:https://blog.csdn.net/2301_80613136/article/details/142967760
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!