当前位置: 首页 > news >正文

容器技术入门与Docker环境部署指南

目录

一、Docker概述

1.什么是Docker

2.Docker的优势

3.Docker与传统虚拟机的区别

4.Docker的应用场景

5.Docker的核心概念

二、Docker安装

三、Docker镜像操作

四、Docker容器操作


一、Docker概述

1.什么是Docker

a.Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器

b.Docker是目前较为主流的容器技术,容器技术是一种轻量级是虚拟化技术,它可以让应用程序及其依赖项打包在一个独立的单元中运行,从而实现应用的隔离、可移植性和资源的高效利用

2.Docker的优势

a.隔离性

b.可移植性

c.资源高效利用

d.快速部署和扩展

3.Docker与传统虚拟机的区别

特性

Docker容器

虚拟机

启动速度

秒级

分钟级

计算能力消耗

几乎无

损耗50%左右

性能

接近原生

弱于

系统支持量

上千个

几十个

隔离性

资源限制

完全隔离

4.Docker的应用场景

a.开放环境管理

b.持续集成和持续部署(CI/CD)

c.微服务架构

d.云计算

5.Docker的核心概念

a.镜像:是创建容器的基础,类似于虚拟机的快照,可以理解为面向Docker容器引擎的只读模板

b.容器:是从镜像创建的运行实例,它可以被启动、停止、删除,可以看作是一个简易版的Linux环境,Docker利用容器来运行和隔离应用

c.仓库:是用来集中保存镜像的地方。创建镜像后,可以使用push命令将它上传到共有仓库(Public)或私有仓库(Private),仓库注册服务器(Registry)是存放仓库的地方,最大的仓库是docker Hub

二、Docker安装

1.下载Docker的repo文件

curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.替换仓库地址

sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/docker-ce.repo

3.更新文件并安装Docker

dnf clean all
dnf makecache
dnf -y install docker-ce

4.添加国内镜像站

mkdir /etc/docker/
cat>/etc/docker/daemon.json<<EOF
{
"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"]
}
EOF

5.开启Docker服务

systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker version

三、Docker镜像操作

1.获取镜像

docker pull nginx:1.24.0

a.命令语法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]

b.参数说明(OPTIONS):

         -a:拉取指定仓库中的所有标签的镜像

        --disable-content-trust:默认值为true,用于禁用镜像内容验证

        NAME:要拉取的镜像的名称,可以包含仓库地址和命名空间信息

        RAG:指定要拉取的镜像的具体标签,用于区分同一镜像的不同版本

        DIGEST:通过镜像的摘要信息来确定要拉取的镜像版本

2.查看镜像信息

docker images

a.REPOSITORY:镜像属于仓库

        TAG:镜像的标签信息标记同一个仓库中的不同镜像

        IMAGE ID:镜像的唯一ID号,唯一标识一个镜像

        CREATED:镜像创建时间

        VIRTUAL SIZE:镜像大小

b.命令语法:docker images [OPTIONS] [REPOSITORY[:TAG]]

c.参数说明:

        -a:显示所有镜像

        --digests:显示镜像的摘要信息

         -f:根据指定条件过滤输出结果

        --format string:使用Go模板语法自定义输出格式

        --no-trunc:不揭短输出信息,完整显示镜像ID等较长字段

        -q:只显示镜像的ID

        REPOSITORY:指定要显示的镜像仓库名称

        TAG:指定要显示的镜像标签

3.查看镜像详细信息

docker inspect nginx:1.24.0

a.命令语法:docker inspect [OPTIONS] NAME | ID [NAME|ID……]

b.参数说明:

        --format:-f:指定输出格式,使用Go模板语法

        --size :-s:在输出中显示容器的文件系统大小

c.可检查的Docker对象:

        容器(Container):获取容器的详细信息

        镜像(Image):查看镜像的构建历史、层信息、环境变量等

        网络(Network):了解网络的配置

        卷(Volume):获取卷的详细信息 

4.修改镜像标签

docker tag nginx:1.24.0 kgcnginx:v1

a.命令语法:docker tag SOURCE_IMAGE[:TAG]TARGET_IMAGE[:TAG]

b.参数说明:

        SOURCE_IMAGE[:TAG]:指定源镜像的名称和标签。SOURCE_IMAGE是源镜像的名称,[:TAG]是可选的标签,如果不指定标签,默认使用latest。

         TARGET_IMAGE[:TAG]:指定目标镜像的名称和标签。这是你要为源镜像添加的新标签。

#用镜像名
docker rmi nginx:v1
#用ID
docker rmi c15

a.命令语法:dockerrmi[OPTIONS]IMAGE[IMAGE...]

b.参数说明:

        -f,force:强制删除镜像。即使有容器正在使用该镜像,也会尝试删除,但不建议轻易使用,因为可能导致容器无法正常运行。

        -no-prune:默认情况下,删除镜像时会同时删除该镜像相关的未使用的父镜像层(虚悬镜像),使用该选项可以禁止删除这些父镜像层。

        IMAGE:指定要删除的镜像,可以是镜像的名称、标签、镜像ID,也可以同时指定多个镜像。例如:nginx:latest、123456789abc等。

c.注意事项:

        在删除镜像之前,要确保没有正在运行或已停止的容器依赖该镜像可以使用dockerps-a

        命令查看所有容器,使用dockerstop和dockerrm命令停止并删除依赖该镜像的容器后,再删除镜像。

        镜像的删除是不可逆的操作,删除后无法恢复,所以在执行删除操作前要谨慎确认。

        当删除一个有多个标签的镜像时,删除一个标签只是移除该标签的引用,只有当所有标签都被删除后,镜像才会真正从磁盘上删除。

docker save -o nginx-1.24.0.tar nginx:1.24.0

a.导出

docker save -o nginx-1.24.0.tar nginx:1.24.0

注意事项:

        文件大小:保存的镜像文件可能会非常大,尤其是包含多个大型镜像时。在保存和传输这些文件时,要确保有足够的磁盘空间和网络带宽。

        镜像版本:保存的镜像文件中包含的是特定版本(标签)的镜像。在恢复镜像时,要确保使用正确的标签和版本。

        跨平台兼容性:虽然Docker镜像是设计为跨平台的,但在不同的操作系统上保存和加载镜像时,可能会遇到一些兼容性问题。尽量在相同或兼容的操作系统版本之间传输和使用镜像。

        镜像依赖:如果保存的镜像依赖于其他基础镜像,确保在目标环境中也有这些基础镜像,或者将它们一起保存和传输。

b.删除

docker rmi nginx:1.24.0

c.导入

docker load < nginx-1.24.0.tar

四、Docker容器操作

1.容器的创建于启动

a.创建容器

docker create -it centos:7

命令语法:docker create[OPTIONS]IMAGE[COMMAND][ARG...]

参数说明:

OPTIoNS(可选参数):dockercreate支持众多可选参数,这些参数可以帮助你对创建的容器进行各种配置,以下是一些常用的参数:

        -i,--interactive:保持标准输入打开,即使没有附加到容器上,常用于需要交互的应用程序。

        -t,--tty:分配一个伪终端,通常与-i一起使用,模拟一个交互式的终端环境,如docker create -it。

        -p,--publishlist:将容器内的端口映射到宿主机的端口,格式为宿主机端口:容器端口,例如-p8080:80表示将容器的80端口映射到宿主机的8080端口。

        -V,--volumelist:挂载数据卷,将宿主机的目录或文件挂载到容器内,格式为宿主机路径:容器路径,例如-V/host/data:/container/data。

        --namestring:为创建的容器指定一个自定义的名称,方便后续管理和识别。

    -e,--envlist:设置容器内的环境变量,格式为变量名=变量值,例如-eDB_HOST=localhost。

        --networkstring:指定容器要加入的网络,例如--networkmy_network。

        IMAGE:指定用于创建容器的镜像名称和标签,如nginx:latest。如果本地没有该镜像,Docker会尝试从DockerHub等镜像仓库中拉取

        [COMMAND][ARG....](可选):指定容器启动时要执行的命令及其参数。如果不指定,将使用镜像的默认启动命令。

b.查看所有的容器

docker ps -a

- 命令语法:docker ps[OPTIONS]

- 参数说明:

        -a,--all:列出所有容器,包括正在运行的和已经停止的容器。默认情况下,docker ps 仅显示正在运行的容器。

        -q,--quiet:只显示容器的ID,不显示其他详细信息。该参数常用于脚本编写,方便批量操作容器,比如批量停止或删除容器。

        -s,--size:在输出中显示容器所占用的文件系统大小,包括读写层大小和总大小。

        -f,--filterfilter:根据指定的条件过滤输出结果。过滤条件可以有多种,例如status=running表示只显示正在运行的容器;name=my_container表示只显示名称为my_container的容器。

        -formatstring:使用Go模板语法自定义输出格式,用户可以根据自己的需求灵活定制输出内容和样式。

        -n,--last int:显示最近创建的n个容器(包括已停止的)。例如,dockerps-n 3会显示最近创建的3个容器信息。

        -l,--latest:只显示最近创建的容器(包括已停止的)。

c.容器的运行

docker start pedantic_fermat

命令语法:docker start[OPTIONS]CONTAINER[CONTAINER....]

参数说明:

        -a,--attach:将本地标准输入、输出和错误输出附加到启动的容器上,即启动容器后进入容器的交互界面,能实时看到容器内程序的输出信息,也可以向容器内输入命令。

        -i,--interactive:保持容器的标准输入打开,允许你与容器内的进程进行交互。通常和-a选项一起使用,以实现交互式操作。

        --checkpointstring:指定从哪个检查点恢复容器。检查点功能允许你保存容器的当前状态,之后可以从该状态恢复容器的运行。

        --checkpoint-dirstring:指定检查点文件所在的目录。

        --detach-keys string:指定从附加模式退出的键序列。默认情况下,使用Ctrl-p 、ctrl-q组合键可以从附加模式退出容器,同时保持容器在后台运行。

        --publish-all,-P:发布容器内所有暴露的端口到宿主机上,宿主机端口会随机分配。

        CONTAINER [CONTAINER...]:可以指定一个或多个要启动的容器,既可以使用容器的名称,也可以使用容器的ID。

注意:

若容器启动失败,可使用dockerlogs命令查看容器的日志信息,以排查启动失败的原因。

使用-a选项附加到容器时,若要退出容器又不停止它,可使用默认的Ctrl-pCtrl-q组合键(可通过--detach-keys选项修改)。

对于依赖外部资源(如数据库、网络服务)的容器,要确保这些资源在启动容器前已经可用,否则容器可能因无法连接到依赖资源而启动失败。

d.利用容器执行命令(前台运行命令,执行完会退出)

docker run --name nginx01 nginx:1.24.0

选项:

        -d:让容器在后台运行,并返回容器的ID

        -i:保持标准输入打开,允许你于容器内的进程进行交互

         -t:分配一个伪终端,通常于-i一起使用,模拟一个交互式的终端环境

         --name string:为创建的容器指定一个自定义的名称

        -m:限制容器可以使用的内存大小

        --cpus decimal:限制容器可以使用的CPU资源

        -p:将容器内的端口映射到宿主机的端口,格式为宿主机端口:容器端口

        -P:发布容器内所有暴露的端口到宿主机上,宿主机端口会随机分配

        -v:挂载数据卷,将宿主机的目录或文件挂载到容器内,格式为宿主机路径:容器路径

        -e:设置容器内的环境变量,格式为变量名=变量值

        --nerwork string:指定容器要加入的网络

        IMAGE:指定用于创建容器的镜像名称和标签

e.在启动时持续在后台运行

#随机端口号
docker run -d  --name nginx2  -P nginx:1.24.0
#指定端口号
docker run -d  --name nginx3  -p 80:80 nginx:1.24.0

注意:

        容器退出问题:若容器内的主进程退出,容器也会随之停止运行。例如,若在容器内运行的脚本执行完毕后没有其他持续运行的进程,容器就会停止。因此,要确保容器内有持续运行的服务或进程。

        日志查看:由于容器在后台运行,无法直接看到其输出信息。可以使用dockerlogs命令查看容器的日志,例如dockerlogs<容器ID或名称>,以此来排查容器运行过程中出现的问题。

        资源占用:在后台运行的容器会持续占用系统资源(如CPU、内存等),要注意监控容器的资源使用情况,避免资源过度占用影响系统性能。可以使用dockerstats命令查看容器的资源使用统计信息。

2.容器的终止

a.注意事项:

        容器响应情况:有些容器内的应用程序可能无法正确处理SIGTERM信号,导致无法在指定时间内正常关闭。在这种情况下,Docker会在等待时间结束后发送SIGKILL信号强制终止容器,可能会造成数据丢失。

        依赖关系:在停止容器时,要考虑容器之间的依赖关系。如果一个容器依赖于另一个容器提供的服务,先停止被依赖的容器可能会导致依赖容器出现问题。

        停止状态检查:可以使用dockerps命令检查容器是否已经成功停止。停止的容器不会再出现在dockerps的输出中,但可以使用dockerps-a查看所有容器(包括已停止的)。

3.把容器中的内容复制到宿主机

docker cp nginx01:/usr/share/nginx/html/index.html ./

4.把宿主机中的内容复制到容器中

docker cp index.html nginx2:/usr/share/nginx/html/index.html

5.进入容器

docker exec -it nginx1 bash#添加测试
echo 'This is Docker' > /usr/share/nginx/html/index.html

a.命令语法:docker exec[OPTIONS]CONTAINER COMMAND[ARG...]

b.参数说明:

        -d,--detach:让命令在容器后台执行,不将命令的输出信息显示在当前终端,执行后会返回命令在容器内的执行进程ID。

        -i,--interactive:保持标准输入打开,允许你与容器内执行的命令进行交互,通常用于需要输入信息的命令。

        -t,--tty:分配一个伪终端,模拟一个交互式的终端环境,一般和-i一起使用,即dockerexec-it,这样可以让你像在本地终端一样与容器内的命令进行交互。

        -u,--userstring:指定在容器内执行命令的用户,可以是用户名或用户ID,例如

        --userroot:表示以root用户身份执行命令。

        -W,--Workdirstring:指定命令在容器内的工作目录,即命令执行时的当前目录。

        CONTAINER:指定要在哪个正在运行的容器中执行命令,可以使用容器的名称或者ID。

        COMMAND [ARG...]:指定要在容器内执行的命令及其参数。例如,执行1s命令查看容器内的文件列表,或者执行bash进入容器的shell环境。

6.容器导出

a.应用场景:

        迁移容器:当你需要把一个容器从一个Docker环境迁移到另一个Docker环境时,可以使用dockerexport导出容器的文件系统,再在目标环境中导入使用。

        备份容器:对容器的当前状态进行备份,以便在需要时可以恢复到该状态。

分析容器内容:将容器的文件系统导出后,可以在宿主机上查看和分析容器内的文件和目录结构。

7.容器导入生成镜像

docker import nginx1.tar nginx1

8.容器删除

docker rm pedantic_fermat

a.命令语法:docker rm[OPTIONS]CONTAINER[CONTAINER...]

b.参数说明:

        -f,--force:强制删除正在运行的容器。默认情况下,dockerrm只能删除已停止的容器,添加该选项后,会向容器内的主进程发送SIGKILL信号,直接终止容器并将其删除,但可能导致数据丢失或应用异常。

        -l,--1ink:仅删除容器的网络连接,而不删除容器本身。通常用于清理容器与网络之间的关联。

        v,--volumes:在删除容器的同时,删除与该容器关联的数据卷。如果数据卷中存储着重要数据,使用该选项要谨慎。

        CONTAINER[CONTAINER...]:指定要删除的容器,可以是容器的名称或者ID,支持同时指定多个容器,用空格分隔。

c.注意:

        容器状态:默认只能删除已停止的容器,若要删除正在运行的容器,需使用-f选项,但可能会导致数据丢失或应用异常,因此尽量先使用dockerstop正常停止容器后再删除。

        数据卷处理:使用-v选项删除容器关联的数据卷时要谨慎,确保数据卷中的数据不再需要,否则可能造成数据丢失。

        依赖关系:在删除容器前,要考虑容器之间的依赖关系。如果一个容器依赖于另一个容器提供的服务,先删除被依赖的容器可能会导致依赖容器出现问题。

不可逆操作:容器删除后无法直接恢复,因此在执行删除操作前要确认容器确实不再需要。

http://www.xdnf.cn/news/1066141.html

相关文章:

  • asp.net core Razor动态语言编程代替asp.net .aspx更高级吗?
  • 如何在 Vue 应用中嵌入 ONLYOFFICE 编辑器
  • LED-Merging: 无需训练的模型合并框架,兼顾LLM安全和性能!!
  • WebSocket长连接在小程序中的实践:消息推送与断线重连机制设计
  • 运维打铁: Windows 服务器基础运维要点解析
  • 详解HarmonyOS NEXT仓颉开发语言中的全局弹窗
  • AI编程再突破,文心快码发布行业首个多模态、多智能体协同AI IDE
  • vue3整合element-plus
  • WebSocket快速入门
  • 卓易通是什么
  • 深度学习:PyTorch卷积神经网络(CNN)之图像入门
  • 【软考高级系统架构论文】论企业集成平台的理解与应用
  • Spring Boot 使用 ElasticSearch
  • 大数据时代UI前端的变革:从静态展示到动态交互
  • ISCSI存储
  • FreeRTOS 介绍、使用方法及应用场景
  • RabbitMQ从入门到实践:消息队列核心原理与典型应用场景
  • 跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破
  • 【论文阅读笔记】TransparentGS:当高斯溅射学会“看穿”玻璃,如何攻克透明物体重建难题?
  • 【破局痛点,赋能未来】领码 SPARK:铸就企业业务永续进化的智慧引擎—— 深度剖析持续演进之道,引领数字化新范式
  • 针对数据仓库方向的大数据算法工程师面试经验总结
  • 计算机网络通信技术与协议(九)————交换机技术
  • 前端手写题(一)
  • leetcode51.N皇后:回溯算法与冲突检测的核心逻辑
  • Linux——6.检测磁盘空间、处理数据文件
  • 【分布式技术】Bearer Token以及MAC Token深入理解
  • Python商务数据分析——Python 入门基础知识学习笔记
  • Node.js特训专栏-实战进阶:6. MVC架构在Express中的应用
  • C++智能指针编程实例
  • 目标检测neck算法之MPCA和FSA的源码实现