目录
一:Docker概述
因为Docker轻便、快速的特性,可以使应用达到快速选代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式在开发环境中能够快速提高工作效率。
Docker容器能够帮助开发人员、系统管理员、质量管理和版本控制工程星师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。
1:什么是Docker
如果要方便的创建运行在云平台上的应用,必须要脱离底层的硬件,同时还需要任何时间地点可获取这些资源,这正是Docker所能提供的。Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。
2:Docker的优势
传统虚拟化技术(如VMware、VirtualBox是通过虚拟机管理程序(Hypervisor)在物理服务器上创建多个虚拟机(VM),每个虚拟机都包含完整的操作系统。而容器技术是在操作系统层面进行虚拟化,多个容器共享宿主机的操作系统内核。
容器技术和传统虚拟化的主要区别在于:
> 资源占用:传统虚拟机需要为每个虚拟机分配独立的操作系统,这会占用大量的系统资源而容器共享宿主机的内核,只包含应用及其依赖项,资源占用相对较少,启动速度也更快。
> 隔离性:虚拟机提供了更高程度的隔离,因为每个虚拟机都有自己独立的操作系统:容器的隔离性相对较弱,但对于大多数应用场景来说已经足够,并且可以通过合理的配置和管理来增强隔离性。
> 性能:由于虚拟机存在额外的虚拟化层,会带来一定的性能开销:容器直接运行在宿主机的内核上,性能损耗较小,更接近原生应用的性能。
特性 | Docker容器 | 虚拟机 |
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗50%左右 |
性能 | 接近原生 | 弱于 |
系统支持量 | 上千个 | 几十个 |
隔离性 | 资源限制 | 完全隔离 |
容器技术的优势主要体现在以下几个方面:
> 隔离性:不同的容器之间相互隔离,一个容器的故障或异?常不会影响其他容器的运行,提高了应用的稳定性和安全性。
> 可移植性:容器将应用及其依赖项打包成一个独立的单元,使得应用用可以在不同的环境中(如开发环境、测试环境、生产环境)无缝迁移和运行,避免了"在我的机器上能运行,但在你的机器上不行"的问题。
> 资源高效利用:容器共享宿主机的操作系统内核,不需要为每个应应用运行独立的操作系统大大减少了资源的浪费,提高了服务器的利用率。
> 快速部署和扩展:容器的启动速度非常快,通常只需要几秒钟,而且可以根据需要快速创建和销毁容器,方便进行应用的快速部署和弹性扩展。
3:Docker的应用场景
> 开发环境管理:开发人员可以使用容器来创建一致的开发环境,确保团队成员之间的环境一致性,提高开发效率。
> 持续集成和持续部署(CI/CD):在CI/CD流程中,容器可以帮助实现应用的快速打包、测试和部署,实现自动化的软件开发流程。
> 微服务架构:容器技术非常适合微服务架构,每个微服务可以打包成一个独立的容器,独立开发、测试和部署,提高系统的可伸缩性和容错性。
> 云计算:云服务提供商可以利用容器技术为用户提供更高效、灵活的计算资源,用户可以根据自己的需求快速创建和管理容器化的应用。
4:Docker核心概念
(1)镜像
镜像、容器、仓库是Docker的三大核心概念。其中Docker的的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。例如:一个镜像可以是一个完整的CentOS 操作系统环境,称为一个Centos镜像;也可以是一个安装了MySQL的应用程序,称之为一MySQL镜像等等。
Docker提供了简单的机制来创建和更新现有的镜像,用户也可!以从网上下载已经创建好的镜像直接
使用。
(2)容器
Docker的容器是从镜像创建的运行实例,它可以被启动、停上和删除。所创建的每一个容器都是相
互隔离、互不可见,以保证安全性的平台。可以将容器看作是一个简易版的Linux环境,Docker利用
容器来运行和隔离应用。
(3)仓库
Docker仓库是用来集中保存镜像的地方,当创建建了自己的镜像之后,可以使用 push命令将它上传
到公有仓库(Public)或者私有仓库(Private)。当下次要在另另外一台机器上使用这个镜像时,只需从
仓库获取。
二:Docker安装
Docker 支持在主流的操作系统平台上进行使用,包括Windows系统、Linux系统、以及MacOS系统等。目前最新的RHEL、Centos以及Ubuntu系统官方软件源中都已经默认自带了Docker包,可直接安装使用,也可以用Docker自己的YUM源进行配置。
Centos系统下安装Docker可以有两种方式:一种是使用CURL获得Docker的安装脚本进行安装,另一种是使用YUM仓库来安装Docker。注意:目前Docker只能支持64位系统
1:本安装方式使用阿里的软件敞开
步骤1:关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/=enforcing/=disabled\' /etc/selinux/config
步骤2:下载Docker的repo文件
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
步骤3:替换仓库
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's/$basearch/x86_64/g'/etc/yum.repos.d/doctker-ce.repo
步骤4:更新索引文件并安装docker
dnf clean all
dnf makecache
dnf -y install docker-ce
步骤5:添加国内镜像站
由于工信部网络政策调整,docker.io、gcr.io 等国际镜像站的访问受限,无法使用这些国外的镜
像站拉取镜像,因此我们需要设置国内的镜像站。
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com"
],
"insecure-registries": ["192.168.10.106"]
}
步骤6:开启docker服务
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker version
步骤7:优化内核参数
cat>> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p
三:docekr镜像操作
运行Docker容器前需要本地存在对应的镜像。如果不存在本地镜像,Docker就会尝试从默认镜像
仓库下载。镜像仓库是由Docker官方维护的一个公共仓库,可以满足用户的绝大部分需求。用户也可以通过配置来使用自定义的镜像仓库。
1:获取镜像
[root@localhost ~]# docker pull nginx:1.24.0
docker pull是Docker里的一个关键命令,其主要功能是从Docker镜像仓库(默认是DockerHub)中拉取镜像到本地Docker主机
2:查看镜像信息
[root@localhost ~]# docker images
docker images是Docker中一个基础且常用的命令,主要用于列出出本地Docker主机上的镜像信息。docker images命令会列出本地 Docker主机上所有可用的镜像,展示镜像的基本信息,帮助用户了解本地镜像的存储情况,包括镜像的仓库名、标签、镜像ID、创建时间和大小等。
3:查看镜像的详细信息
[root@localhost ~]# docker inspect c15
docker inspect是Docker中一个非常实用的命令,它用于这返回Docker对象(如容器、镜像、网络、卷等)的底层详细信息,这些信息以JSON格式展示,方便用户深入了解Docker对象的配置和状态。
4:修改镜像标签(老名字+新名字)
[root@localhost ~]# docker tag nginx1.24.0 nginx:v1
[root@localhost ~]# docker images
在Docker中,dockertag命令用于为现有的Docker镜像添加一个新的标签(tag)。标签本质上是镜像的一个别名,它可以让你更方便地引用和管理镜像,同时时也有助于区分不同版本或用途的镜像。
5:删除镜像
(1)用镜像名删除
[root@localhost ~]# docker rmi nginx:v1
(2)用ID删除
[root@localhost ~]# docker rmi c15
6:存出镜像和载入镜像
(1)导出
[root@localhost ~]# docker save -o nginx nginx:1.24.0
dockersave命令用于将一个或多个Docker镜像保存为一个tar归档文件,这在需要将镜像传输到其他Docker环境(如离线环境)时非常有用。
(2)删除
[root@localhost ~]# docker rmi nginx:1.24.0
(3)导入
[root@localhost ~]# docker load<nginx
当需要把一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成为本地文件,这一过程叫
做存出镜像,可以使用docker save命令进行存出操作,之后就可以拷贝该文件到其他机器。将存出的
镜像从机器A拷贝到机器B后,需要在机器B上使用该镜像像,就可以将该文件导入到机器B的镜像库
中,这一过程叫做载入镜像。使用dockerload或者docker--iinput进行载入操作。
四:Docker容器操作
容器是Docker的另一个核心概念。简单说,容器是镜像的一个运行实例,是独立运行的一个或一组
应用以及它们所必需的运行环境,包括文件系统、系统类库、shel11环境等。镜像是只读模板,而容器会给这个只读模板添加一个额外的可写层。
1:容器的创建于启动
(1)创容容器
[root@localhost ~]# docker create -it centos:7
docker create是Docker中的一个重要命令,它的主要作用是基于指定的镜像创建一个新的容器,
但并不立即启动该容器。下面将对dockercreate命令进行详细解释
(2)查看所有的容器
[root@localhost ~]# docker ps -a
dockerps是Docker中一个非常基础且常用的命令,主要用于别出Docker容器的相关信息。通
过该命令,用户可以查看容器的运行状态、ID、名称、所使用的镜像等关键内容,方便对容器进行管理和监控。
(3)容器的运行
[root@localhost ~]# docker start 5a
docker start是Docker中用于启动已创建但处于停止状态客器的命令。docker start命令的
主要作用是将之前使用docker create创建好但处于停止状态的容器,或者之前已经停止运行的容器重新启动起来。它会重新初始化容器的运行环境,加载相关资源,让容器内的进程继续执行。
(4)利用容器执行命令(命令执行完毕后容器会退出)
[root@localhost ~]# docker run centos:7 /usr/bin/baish -C "ls /root"
docker run是Docker中最常用的命令之一,它的主要功能是基于指定的镜像创建并启动一个新的容器。以下将从命令语法、参数说明、使用示例和注意事项几个方面对docker run命令进行详细解释。
(5)在启动容器时持续在后台运行
[root@localhost ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
或
[root@localhost ~]# docker run -dit centos:7 /bin/baash
注意事项:
> 容器退出问题:若容器内的主进程退出,容器也会随之停止运行。例如,若在容器内运行的脚本执行完毕后没有其他持续运行的进程,容器就会停止。因此,要要确保容器内有持续运行的服务或进程。
> 日志查看:由于容器在后台运行,无法直接看到其输出信息。可以使用dockerlogs命令查看容器的日志,例如dockerlogs<容器ID或名称>,以此来排查>容器运行过程中出现的问题
> 资源占用:在后台运行的容器会持续占用系统资源(如CPU、内存等),要注意监控容器的资源使用情况,避免资源过度占用影响系统性能。可以使用dockerstats命令查看容器的资源使用统计信息。
2:容器的终止
[root@localhost ~]# docker stop b18
执行该命令后,Docker会向my_nginx容器内的主进程发送SIGTTERM信号,等待10秒(默认时
间),如果进程没有自行终止,再发送SIGKILL信号强制终止。
3:进入容器
[root@localhost ~]# docker exec -it 03f /bin/bash
退出
[root@03f062851c52 /]# exit
docker exec命令是Docker中一个非常实用的工具,它允许你在一个正在运行的容器内部执行额
外的命令。dockerexec命令的主要作用是在不停止容器运行的情况下,对正在运行的容器进行调试、维护或执行一些临时任务。通过该命令,你可以在容器内部执行各种操作,就像直接登录到容器内部的操作系统一样。以下是对该命令的详细解释:
4:容器导出
[root@localhost ~]# docker export 03f > centos7
docker export命令用于将一个运行中的或已停止的Docker容器的文件系统内容导出为一个tar
归档文件。
应用场景:
> 迁移容器:当你需要把一个容器从一个Docker 环境迁移到另一个Docker环境时,可以使用dockerexport导出容器的文件系统,再在目标环境中导入使用
> 备份容器:对容器的当前状态进行备份,以便在需要时可以恢复到该状态
> 分析容器内容:将容器的文件系统导出后,可以在宿主机上查看和分析容器内的文件和目录结构。
5:容器导入生成镜像
[root@localhost ~]# docker import centos7 centos7:test
[root@localhost ~]# docker images
6:容器删除
[root@localhost ~]# docker rm 7f
docker rm是Docker中用于删除容器的基础命