Docker详细讲解

news2024/11/27 12:36:57

2013年发布至今, Docker一直广受瞩目,被认为可能会改变软件行业。
但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?今天就来详细解释,帮助大家理解它,还带有简
单易懂的实例,教你如何将它用于日常开发。
在这里插入图片描述
Docker简介
Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程
序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。
Docker的优点如下:
1、简化程序
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚
拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大
优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
2、避免选择恐惧症
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配
置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、
消息队列等等都可以打包成一个镜像部署。
3、节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。
Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
在这里插入图片描述
Docker daemon( Docker守护进程)
Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
Client( Docker客户端)
Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。图中, docker build
等都是 Docker的相关命令。
Images( Docker镜像)
Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系
统,同理,使用Docker镜像可以运行 Docker镜像中的程序。
Container(容器)
容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来
启停、移动、删除容器。
Registry
Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他
机器上运行这个镜像,就需要手动复制。此时可借助 Docker Registry来避免镜像的手动复制。
一个 Docker Registry可包含多个 Docker仓库,每个仓库可包含多个镜像标签,每个标签对应一个 Docker镜像。这跟
Maven的仓库有点类似,如果把 Docker Registry比作 Maven仓库的话,那么 Docker仓库就可理解为某jar包的路径,而
镜像标签则可理解为jar包的版本号。
Docker Registry可分为公有Docker Registry和私有Docker Registry。 最常⽤的Docker Registry莫过于官⽅的Docker
Hub, 这也是默认的Docker Registry。 Docker Hub上存放着⼤量优秀的镜像, 我们可使⽤Docker命令下载并使⽤。

Docker 的安装
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩
写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。
Docker CE 的安装请参考官方文档,我们这里以CentOS为例:
1、Docker 要求 CentOS 系统的内核版本高于 3.10
通过 uname -r 命令查看你当前的内核版本

uname ‐r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

 yum ‐y update

3、卸载旧版本(如果安装过旧版本的话)

sudo yum remove ‐y docker*

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

yum install ‐y yum‐utils

5、设置yum源,并更新 yum 的包索引

yum‐config‐manager ‐‐add‐repo http://mirrors.aliyun.com/docker‐ce/linux/centos/docker‐ce.repo
yum makecache fast

在这里插入图片描述
6、可以查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker‐ce ‐‐showduplicates | sort ‐r

在这里插入图片描述
7、安装docker

yum install ‐y docker‐ce‐3:19.03.9‐3.el7.x86_64 # 这是指定版本安装

8、启动并加入开机启动

systemctl start docker && systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

在这里插入图片描述
注意:一般需要配置docker镜像加速器
我们可以借助阿里云的镜像加速器,登录阿里云(https://cr.console.aliyun.com/#/accelerator)
可以看到镜像加速地址如下图:
在这里插入图片描述

cd /etc/docker

查看有没有 daemon.json。这是docker默认的配置文件。
如果没有新建,如果有,则修改。

 1 vim daemon.json
 2 {
 3  "registry‐mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"]
 4 }

保存退出。
重启docker服务

 1 systemctl daemon‐reload
 2 systemctl restart docker

成功!
10、卸载docker

 1 yum remove ‐y docker*
 2 rm ‐rf /etc/systemd/system/docker.service.d
 3 rm ‐rf /var/lib/docker
 4 rm ‐rf /var/run/docker

Docker常用命令
镜像相关命令
1、搜索镜像
可使用 docker search命令搜索存放在 Docker Hub中的镜像。执行该命令后, Docker就会在Docker Hub中搜索含有 java这
个关键词的镜像仓库。

docker search java

在这里插入图片描述

以上列表包含五列,含义如下:- NAME:镜像仓库名称。- DESCRIPTION:镜像仓库描述。- STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于 GitHub的 stars0- OFFICAL:表示是否为官方仓库,该列标记为[0K]的镜像均由各软件的官方项目组创建和维护。- AUTOMATED:表示是否是自动构建的镜像仓库。
2、下载镜像
使用命令docker pull命令即可从 Docker Registry上下载镜像,执行该命令后,Docker会从 Docker Hub中的 java仓库下载最
新版本的 Java镜像。如果要下载指定版本则在java后面加冒号指定版本,例如:docker pull java:8

docker pull java:8

在这里插入图片描述

docker pull nginx

在这里插入图片描述
3、列出镜像
使用 docker images命令即可列出已下载的镜像

docker images

在这里插入图片描述
以上列表含义如下

  • REPOSITORY:镜像所属仓库名称。
    • TAG:镜像标签。默认是 latest,表示最新。
    • IMAGE ID:镜像 ID,表示镜像唯一标识。
    • CREATED:镜像创建时间。
  • SIZE: 镜像大小。
    4、删除本地镜像
    使用 docker rmi命令即可删除指定镜像,强制删除加 -f
docker rmi java

删除所有镜像

docker rmi $(docker images ‐q)

容器相关命令
1、新建并启动容器
使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项。-d选项:表示后台运行-P选项:随机端口映射-p选项:指定端口映射,有以下四种格式。
– ip:hostPort:containerPort
– ip::containerPort
– hostPort:containerPort
– containerPort
–net选项:指定网络模式,该选项有以下可选参数:
–net=bridge:默认选项,表示连接到默认的网桥。
–net=host:容器使用宿主机的网络。
–net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置。
–net=none:不配置该容器的网络,用户可自定义网络配置。

docker run ‐d ‐p 91:80 nginx

这样就能启动一个 Nginx容器。在本例中,为 docker run添加了两个参数,含义如下:-d 后台运行-p 宿主机端口:容器端口 #开放容器端口到宿主机端口
访问 http://Docker宿主机 IP:91/,将会看到nginx的主界面如下:
在这里插入图片描述
需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就
会自动从 Docker Hub下载镜像并启动一个 Docker容器。
2、列出容器
用 docker ps命令即可列出运行中的容器

docker ps

在这里插入图片描述
如需列出所有容器(包括已停止的容器),可使用-a参数。该列表包含了7列,含义如下

  • CONTAINER_ID:表示容器 ID。
    • IMAGE:表示镜像名称。
    • COMMAND:表示启动容器时运行的命令。
    • CREATED:表示容器的创建时间。
    • STATUS:表示容器运行的状态。UP表示运行中, Exited表示已停止。
    • PORTS:表示容器对外的端口号。
    • NAMES:表示容器名称。该名称默认由 Docker自动生成,也可使用 docker run命令的–name选项自行指定。
      3、停止容器
      使用 docker stop命令,即可停止容器
docker stop f0b1c8ab3633

其中f0b1c8ab3633是容器 ID,当然也可使用 docker stop容器名称来停止指定容器
4、强制停止容器
可使用 docker kill命令发送 SIGKILL信号来强制停止容器

docker kill f0b1c8ab3633

5、启动已停止的容器
使用docker run命令,即可新建并启动一个容器。对于已停止的容器,可使用 docker start命令来启动

docker start f0b1c8ab3633

6、查看容器所有信息

docker inspect f0b1c8ab3633

7、查看容器日志

docker container logs f0b1c8ab3633

8、查看容器里的进程

docker top f0b1c8ab3633

9、容器与宿主机相互复制文件
从容器里面拷文件到宿主机:

docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径
docker cp 7aa5dc458f9d:/etc/nginx/nginx.conf /mydata/nginx

从宿主机拷文件到容器里面:

docker cp 要拷贝的宿主机文件路径 容器id:要拷贝到容器里面对应的路径

10、进入容器
使用docker exec命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这
个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了

docker exec ‐it f0b1c8ab3633 /bin/bash (有的容器需要把 /bin/bash 换成 sh)

11、容器内安装vim、ping、ifconfig等指令

 1 apt‐get update
 2 apt‐get install vim #安装vim
 3 apt‐get install iputils‐ping #安装ping
 4 apt‐get install net‐tools #安装ifconfig

12、删除容器
使用 docker rm命令即可删除指定容器

 docker rm f0b1c8ab3633

该命令只能删除已停止的容器,如需删除正在运行的容器,可使用-f参数
强制删除所有容器

docker rm ‐f $(docker ps ‐a ‐q)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux操作系统】进程概念

目录 一、进程概念1.1 什么是进程 二、task_struct内容分类2.1 标识符2.2 进程状态2.2.1 进程排队2.2.2 关于进程状态的表述——运行、阻塞、挂起2.2.3 Linux中具体的进程状态2.2.4 孤儿进程 2.3 进程优先级 三、Linux的调度与切换3.1 进程切换3.2 进程调度 四、环境变量4.1 ma…

产品文档全攻略:分类、价值及创建技巧

作者 | Josh Fechter 产品文档是产品附带的资料。这些文档包含产品工作的详细信息、使用指南、免责声明以及与产品相关的其他重要详细信息。 产品文档是一个广义的术语,并不仅仅是为了供消费者使用。产品文档还包括供内部组织使用的产品或服务的信息。这些文档文件…

KETTLE调用http传输中文参数的问题

场景:检查服务器异常(hive)服务,就通过http发送一条短信到手机上,内容类似:【通知】 S T A R T D A T E h i v e 服务检测异常 {START_DATE}_hive服务检测异常 STARTD​ATEh​ive服务检测异常{DB_ID}&#…

我的点赞功能(完整分页查询步骤)和快速刷题开发

文章目录 1.我的点赞分页展示1.分页查询工具类1.PageInfo.java 需要分页查询的就继承它,传值的时候pageNo和pageSize可以为空2.PageResult.java 根据条件从数据库中查询信息,然后设置这里的四个值即可得到分页查询结果 2.sun-club-application-controlle…

记一次Nginx代理配置的奇怪经历

目录 1 背景 2 需求 3 方案 4 问题 5 解决方案 6 最后记录 7 参考文献 1 背景 最近我们在做一个能源类智能化转型的项目,整个项目非常大,下面有很多的子项目组。不同项目组之间都是独立的子系统。 客户对技术上做了统一要求,使用统一的…

SpringBoot 自动配置(Condition)

一.Condition Condition 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操 作。 案例:需求1 在 Spring 的 IOC 容器中有一个 User 的 Bean,现要求: 1. 导入Jedis坐标后,加载该Bean…

基于STM32开发的智能农业灌溉系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 农田自动化灌溉家庭园艺智能浇灌常见问题及解决方案 常见问题解决方案结论 1. 引言 智能农业灌溉系统通过集成多种传感器,实时监测土壤湿度、温度、…

​【迅为电子】RK3568驱动指南|第十七篇 串口-第196章 串口简介

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

项目视图组(基于模型)Model-Based-Qt-思维导图-学习笔记

项目视图组(基于模型)Model-Based Model-Based (1)List View:清单视图 QListView 继承关系:继承自 QAbstractItemView,被 QListWidget 和 QUndoView 继承 功能:提供模型上的列表或图标视图,以非分层列表…

通过连接数据库演示解耦过程

一、什么是解耦? 解耦就是为了降低程序之间的耦合性,在软件工程中,对象之间的耦合度就是对象之间的关联度。程序之间耦合度越高,程序维护起来也就越困难,即程序维护成本高。所以我们需要通过现有方法降低耦合性&#x…

oss学习问题记录

1.在使用oss上传文档时,根据返回的地址访问上传的图片,会报错误如下:This XML file does not appear to have any style information associated with it. The document tree is shown below. 在设置了上传的文档类型和代码设置读写权限之后 …

Redis的基本概念和使用

目录 一、Redis简介 1、NOSQL 2、NOSQL和关系型数据库比较 3、主流的NOSQL产品 4、什么是Redis 5、启动Redis 二、Redis基本操作 1、大概操作 三、 Redis 数据类型(5种常用) 1、redis 数据存储格式 2、String 3、hash 4、list 5、Set 6、…

面试题-Spring Bean的生命周期

文章目录 Spring Bean 生命周期分为哪几个阶段浅析Bean生命周期源码实现1.1 DefaultListableBeanFactory1.2 createBean2.1 populateBean3.1 initializeBean3.2 invokeInitMethod3.3 applyBeanPostProcessorsBeforeInitialization5.1 destroyBean5.2 invokeDestroyMethod Sprin…

Python爬虫——爬取某网站的视频

爬取视频 本次爬取,还是运用的是requests方法 首先进入bilibili官网中,选取你想要爬取的视频,进入视频播放页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要…

一次评审会议上的纠偏

这段时间,整个项目组都投入在某个专项项目中,评审和版本迭代的频率也很高。而在近期的评审会上,发生了一起激烈的争辩,也让我意识到大多数产品人身上的通病,觉得挺有意义的,借此分享给大家。 同事A最近在做…

Qt窗口交互场景、子窗口数据获取

一、前言 在现代软件开发中,图形用户界面(GUI)的设计不仅仅关乎美观,更在于用户体验和功能的无缝衔接。Qt框架以其强大的跨平台能力和丰富的组件库,成为众多开发者构建GUI应用的首选工具。在Qt应用中,窗口…

​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​

目录 微机原理判断指令是否正确【见的多了,你就懂了~】 1. 立即数不能作为目标操作数 2. 操作数位数必须匹配 3. 需要指定存储器操作数的字节或字 4. 两个操作数不能同时为存储器操作数 5. 循环次数超过1必须使用CL寄存器 6. 段寄存器限制(特别是…

比OpenAI的Whisper快50%,最新开源语音模型

生成式AI初创公司aiOla在官网开源了最新语音模型Whisper-Medusa,推理效率比OpenAI开源的Whisper快50%。 aiOla在Whisper的架构之上进行了修改采用了“多头注意力”机制的并行计算方法,允许模型在每个推理步骤中预测多个token,同时不会损失性…

[000-01-010].第02节:Spring基础开发环境搭建

1.1.新建空项目: 1.新建Empty项目,主要是为了方便之后把各个模块的代码统一的放在一起: 2.设置JDK: 3.设置maven版本: 1.2.建立第一个Spring项目模块: 1.新建模块: 2.配置依赖&#xff…

gitlab自动部署是什么 gitlab自动部署如何进行操作

在现代软件开发流程中,自动化部署是提高效率和确保软件质量的关键环节。GitLab作为一个强大的DevOps平台,提供了完整的自动部署工具,帮助开发团队实现代码从编写到生产的无缝转换。本文将详细解析GitLab的自动部署功能是什么,如何…