Docker 基本管理及部署

目录

1.Docker概述

1.1 Docker是什么?

1.2 Docker的宗旨

1.3 容器的优点

1.4 Docker与虚拟机的区别

1.5 容器在内核中支持的两种技术

1.6 namespace的六大类型

2.Docker核心概念

2.1 镜像

2.2 容器

2.3 仓库

3.安装Docker

3.1 查看 docker 版本信息

4.Docker镜像操作

5.Docker容器操作

6.总结


1.Docker概述

1.1 Docker是什么?

Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。
Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。

Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。

容器引擎:docker、containered、podman、rocket

1.2 Docker的宗旨

即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“ 一次封装、到处运行 “ 的目的,这里的应用既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

1.3 容器的优点

  • 灵活:即使是最复杂的应用也可以集装箱化
  • 轻量级:容器利用并共享主机内核
  • 可互换:可以及时部署更新和升级
  • 便携式:可以在本地构建,部署到云,并在任何地方运行
  • 可扩展: 可以增加并自动分发容器副本
  • 可堆叠:可以垂直和即时堆叠服务

容器是与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

1.4 Docker与虚拟机的区别

特性Docker容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗 50%左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性资源隔离/限制完全隔离

1.5 容器在内核中支持的两种技术

Docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制 ,通过写时复制技术(copy-on-write)实现高效文件操作 (类似于虚拟机的磁盘,比如分配500g并不是实际占用物理磁盘500g,只有当需要修改时才复制一份数据)

1.6 namespace的六大类型


2.Docker核心概念

2.1 镜像

Docker的镜像是创建容器的基础,类似于虚拟机的快照,可以理解为一个面向docker引擎的只读模板.
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包括代码、运行时间、库、环境变量和配置文件。
docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统.因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是docker镜像的精髓。

2.2 容器

docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看作是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等) 和运行在其中的应用程序

2.3 仓库

Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到共有仓库(public)或者私有仓库(private), 当下次要在另一台机器上使用这个镜像时,只需从仓库获取.

Docker的镜像 、容器、日志等内容全部都默认存储在/var/lib/docker

3.安装Docker

目前Docker只能支持64位系统。

systemctl disable --now firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

导入阿里云镜像源

cd /etc/yum.repos.d
mv local.repo repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

安装依赖包

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。

设置阿里云docker镜像源

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.iosystemctl start docker.service
systemctl enable docker.service 
--------------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
--------------------------------------------------------------------------------------------

3.1 查看 docker 版本信息

docker version  #查看docker版本#docker详细信息查看
docker info  

4. Docker镜像操作

镜像加速下载

浏览器访问阿里云官网>产品>容器>容器镜像服务 ACR>管理控制台>镜像工具>镜像加速器



搜索镜像

docker search 关键字
docker search nginx

获取镜像

docker pull 仓库名/镜像名[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为latest标签。
docker pull nginx
docker pull nginx:1.20
docker pull nginx:1.18

查看下载到本地的所有镜像

docker images等于docker image lsREPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID号,唯一标识一个镜像;
CREATED:镜像创建时间;docker images -q   #仅查看镜像 id号



查看镜像信息

镜像下载后存放在/var/lib/docker。
Docker相关的本地资源存放在/var/lib/docker/目录下,其中containers目录存放容器信息,image目录存放镜像信息,overlay2目录下存放具体的镜像底层文件。

查看下载的镜像文件信息

cat /var/lib/docker/image/overlay2/repositories.json

根据镜像的唯一标识ID号,获取镜像详细信息

docker inspect 镜像ID号
docker inspect 605c77e624dddocker inspect 仓库名:标签
docker inspect nginx:1.20

lowerdir是镜像层,目录或者文件是只读的,其实就是rootfs,image layer可以分很多层,所以对应的lowerdir是可以有多个目录
upperdir是在lowerdir之上的容器层,这层是可读可写的,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这层
MergedDir是表现层,是容器的挂载点


为本地的镜像添加新的标签

docker tag 名称:[标签] 新名称:[新标签]docker tag nginx:latest nginx:1.21
docker tag nginx:latest xy101/nginx:1.21


删除镜像

docker rmi 镜像名称:标签		  #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号			  #会彻底删除该镜像
docker rmi 镜像ID号	-f        #强制删除所有的镜像快速删除所有镜像方法:
docker rmi $(docker images -q)docker rmi nginx:1.18
docker rmi 50fe74b50e0d
docker rmi 605c77e624dd -f




存出镜像:将镜像保存成为本地文件

docker save -o 镜像文件路径  镜像名或镜像ID       #将镜像导出为文件docker save -o /opt/nginx-1.20.tar nginx:1.20
ls /opt
scp /opt/nginx-1.20.tar 192.168.9.111:/opt192.168.9.111服务器查看


载入镜像:将镜像文件导入到镜像库中

docker load < 存出的文件
或者
docker load -i 存出的文件docker load < nginx
docker load -i nginx

上传镜像

docker账户

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使
 用命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。

docker login  #输入用户名及密码
docker tag nginx:1.20 别名   #添加别名
docker push 别名   #上传即可

阿里云账户上传示例

docker login --username=aliyun6939554239 registry.cn-hangzhou.aliyuncs.com #登录,输入密码
docker tag nginx:1.20 registry.cn-hangzhou.aliyuncs.com/aliyun-xy101/nginx-xy101:1.20   #为nginx:1.20创建别名ginx-xy101:1.20
docker push registry.cn-hangzhou.aliyuncs.com/aliyun-xy101/nginx-xy101:1.20  #上传阿里云官方进行查看


5.Docker容器操作

容器创建:就是将镜像加载到容器的过程。

新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

docker create [选项] 镜像名:标签 [容器启动命令]    #创建容器
常用选项:
-i:让容器开启标准输入接受用户输入命令
-t:让Docker分配一个伪终端tty
-it :合起来实现和容器交互的作用,运行一个交互式会话shell 
--name : 指定容器名docker create -it nginx:latest /bin/bash

查看容器的运行状态

docker ps -a			#-a选项可以显示所有的容器
docker ps -a -q  #查看容器id号
docker inspect 容器名/容器id  #查看容器详细信息



启动容器

docker start 容器的ID/名称
docker ps -a    #查看所有容器
docker ps       #查看正在运行的容器


停止容器

docker stop 容器的ID/名称 [-t 等待时间]   #停止容器,发送SIGTERM信号,默认等待10d 
docker kill 容器的ID/名称      #强制退出容器,默认发送SIGKILL信号

删除容器

docker rm [-f] 容器ID/名称   #删除已经停止的容器  [-f]选项强制删除若想删除正在 运行的容器,必须先暂停该容器的启动状态,在进行删除或使用-f选项,否则无法删除


批量清理后台停止的容器

docker rm $(docker ps -a -q)	


批量清理后台所有容器

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


创建并启动容器

可以直接执行docker run命令, 等同于先执行docker create命令,再执行docker start命令。


注意: 容器是一个与其中运行的shell命令/进程共存亡的终端,命令/进程运行容器运行, 命令/进程结束容器退出。
docker容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker容器中pid = 1的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。

当利用docker run来创建容器时, Docker在后台的标准运行过程是:

(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
(5)分配一个地址池中的IP地址给容器;
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。

容器的进入

需要进入容器进行命令操作时,可以使用docker exec命令进入运行着的容器。

docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让Docker分配一个伪终端。
#进入容器前,确保容器正在运行
docker exec -it c3 /bin/sh
ls
exit				#退出容器后,容器仍在运行

将本地文件复制到容器中

docker cp 宿主机文件路径  容器名或容器ID:绝对路径                      #复制宿主机文件到容器中
docker cp /etc/yum.repos.d/CentOS-Base.repo c3:/lib

从容器复制文件到本地主机

cp 容器名或容器ID:绝对路径  宿主机文件路径                      #复制容器文件到宿主机中
docker cp c3:/lib/systemd /root/
docker cp c3:/lib/init /root/

查看容器日志

docker logs 容器名/容器id    #查看容器中PID=1的主进程的日志

导出容器

docker export 容器名/id > 保存目录/文件名

导入容器

docker import 容器文件 -- 名称:标签
cat 容器文件 | docker import -镜像名:标签    #将容器模板文件导入成镜像

6.总结

docker是什么?

docker是用go语言开发并开源的容器引擎,用来运行容器里的应用。docker也是用来管理容器和镜像的工具。

Docker与虚拟机的区别

docker容器虚拟机
所有容器共享宿主机的内核每个虚拟机都有独立的操作系统和内核
通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量完全隔离,每个虚拟机都有独立的硬件资源分配
秒级启动速度分钟级启动速度
容器相当于宿主机的进程,性能几乎没有损耗需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访问,会有一定的性能损耗
一个宿主机可以启动成百上千个容器最多几十台虚拟机

Linux6大namespace(资源隔离)

MNT/MOUNT隔离文件系统
NET/Network网络资源隔离
PID进程的pid隔离
IPC进程间通信隔离
UTS隔离主机名
USER隔离用户

docker run的启动过程

1.检查本地是否有指定镜像,如果有则直接使用本地镜像创建容器,如果没有则从仓库拉取镜像再创建容器

2.在只读的镜像层上再挂载一层可读可写的容器层

3.从docker网桥给容器分配一个虚拟接口和IP地址

4.使用镜像的默认启动命令或docker run 指定的命令来启动容器,直到容器中的PID=1的主进程退出为止
 

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

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

相关文章

FPGA上板项目(一)——点灯熟悉完整开发流程、ILA在线调试

目录 创建工程创建 HDL 代码仿真添加管脚约束添加时序约束生成 bit 文件下载ILA 在线调试 创建工程 型号选择&#xff1a;以 AXU9EG 开发板为例&#xff0c;芯片选择 xczu9eg-ffvb1156-2-i 创建 HDL 代码 注意&#xff1a;由于输入时钟为 200MHz 的差分时钟&#xff0c;因此…

2024年高职云计算实验室建设及云计算实训平台整体解决方案

随着云计算技术的飞速发展&#xff0c;高职院校亟需构建一个与行业需求紧密结合的云计算实验室和实训平台。以下是针对2024年高职院校云计算实验室建设的全面解决方案。 1、在高职云计算实验室的建设与规划中&#xff0c;首要任务是立足于云计算学科的精准定位&#xff0c;紧密…

4.SpringBoot自定义封装Starter实践

目录 概述旧版2.7之后自定义Starter 概述 SpringBoot自定义封装Starter实践 旧版 在SpringBoot2.7之前&#xff0c;META-INF 下 spring.factories 加 org.springframework.boot.autoconfigure.EnableAutoConfigurationXXAutoConfiguration 2.7之后 SpringBoot2.7推出新的自动配…

爬虫-浏览器自动化

什么是selenium selenium是浏览器自动化测试框架&#xff0c;原本用于网页测试。但到了爬虫领域&#xff0c;它又成为了爬虫的好帮手。有了 selenium&#xff0c;我们便不再需要判断网页数据加载的方式&#xff0c;只要让 selenium 自动控制浏览器&#xff0c;就像有双无形的手…

【以史为镜、以史明志,知史爱党、知史爱国】中华上下五千年之-元朝

元朝是中国历史上第一个由蒙古族族建立的大统一封建王朝。完整的元王朝历史进程分为四个阶段&#xff1a; 元朝的历史让我们一笔带过&#xff0c;相信大家也不怎么喜欢看。同意的点赞&#xff01; 元朝的前身——蒙古汗国&#xff08;1206年—1271年&#xff09; 建立王朝统治—…

快速体验 Llama3 的 4 种方式,本地部署,800 tokens/s 的推理速度真的太快了!

北京时间4月19日凌晨&#xff0c;Meta在官网上官宣了Llama-3&#xff0c;作为继Llama1、Llama2和CodeLlama之后的第三代模型&#xff0c;Llama3在多个基准测试中实现了全面领先&#xff0c;性能优于业界同类最先进的模型&#xff0c;你有没有第一时间体验上呢&#xff0c;这篇文…

加入这些使用,代码变得简单即优雅!

加入这些使用&#xff0c;代码变得简单即优雅&#xff01;在Spring Boot应用中&#xff0c;拦截请求通常可以通过两种方式实现&#xff1a;使用HandlerInterceptor&#xff08;处https://mp.weixin.qq.com/s?__bizMzkzMTY0Mjc0Ng&mid2247484482&idx1&sn063cea7cda…

Apache AGE 运算符

运算符 字符串特定比较运算符 测试数据 SELECT * FROM cypher(graph_name, $$ CREATE (:Person {name: John}),(:Person {name: Jeff}),(:Person {name: Joan}),(:Person {name: Bill}) $$) AS (result agtype);Starts With 对字符串执行区分大小写的前缀搜索。 SELECT * …

【源码开源】C#桌面应用开发:串口调试助手

c#桌面应用开发 1、环境搭建和工程创建&#xff1a;参照番茄定时器项目 工程创建参照 2、界面布局设计 3、具体功能函数 &#xff08;1&#xff09;端口扫描&#xff1a; private void btn_com_scan_Click(object sender, EventArgs e){//端口号扫描ReflashPortToComboBox(…

安装失败,已为系统安装 Microsoft Edge Webview2 Runtime

在使用微软的webview2的时候&#xff0c;有时候会出现如下错误提示&#xff1a; 解决方案&#xff1a; 1、打开电脑“控制面板”&#xff0c;找到Microsoft Edge Webview2 Runtime 2、鼠标右键点击&#xff0c;“更改”&#xff0c;按电脑指示操作执行。 3、再次安装Microsoft…

CV每日论文--2024.7.12

1、LLaVA-NeXT-Interleave: Tackling Multi-image, Video, and 3D in Large Multimodal Models 中文标题&#xff1a;LLaVA-NeXT-Interleave&#xff1a;处理大型多模态模型中的多图像、视频和 3D 简介&#xff1a;视觉指令调整在增强大型多模态模型(LMMs)的能力方面取得了显著…

事务码 BP DYNPRO_NOT_FOUND

事务码 BP DYNPRO_NOT_FOUND 使用事务 BP 时&#xff0c;模块 PBO_START_SUBSCREEN 中 SAPLBUSS 中的转储 DYNPRO_NOT_FOUND 目录 问题 双击查看详细信息时发生错误DYNPRO_NOT_FOUND 解决方案 执行事务码BUSP 重新生成屏幕 参考链接: 1621119

2w才学到的交易策略,Anzo Capital今天免费分享

花费了2w学费才学到的外汇交易策略&#xff0c;Anzo Capital今天免费分享&#xff01;那就是使用交易价格行动和利润区策略&#xff0c;在实施价格行动利润区策略时&#xff0c;关键步骤一定要严格执行&#xff0c;下面是操作的关键步骤&#xff1a; 1. 定义趋势&#xff1a;首…

获取网页logo图标

怎么获取网页logo图标的URL链接 第一种方法&#xff1a; 最常用的方法&#xff08;适用于90%的站点&#xff09;是&#xff0c;直接在访问网址首页链接后加上上/favicon.ico&#xff0c;例如&#xff1a; https://www.baidu.com/favicon.ico 第二种方法&#xff1a; 按F12&…

【逆向基础】十二、工具分享之Process Explorer

一、简介 Process Explorer是一款出色的进程资源管理器。在调试运行window系统中的程序软件时&#xff0c;使用Process Explorer可以通过工整的UI界面&#xff0c;让我们快速了解软件的进程信息&#xff0c;挂载的动态库等&#xff1b;可以帮助我们快速定位分析的方向&#xf…

python如何结束程序运行

方法1&#xff1a;采用sys.exit(0)&#xff0c;正常终止程序&#xff0c;从图中可以看到&#xff0c;程序终止后shell运行不受影响。 方法2&#xff1a;采用os._exit(0)关闭整个shell&#xff0c;从图中看到&#xff0c;调用sys._exit(0)后整个shell都重启了&#xff08;RESTAR…

30.ROM-IP核的调用

&#xff08;1&#xff09;ROM IP核简介&#xff1a; ROM是只读存储器&#xff0c;是一种只能读出事先锁存的固态半导体存储器。其特性是一旦存储资料就无法再将之改变或删除&#xff0c;并且资料也不会因为电源关闭而消失。&#xff08;掉电不丢失&#xff09; FPGA使用内部RA…

上讯信息 InforCube运维管理审计系统 RepeatSend 前台RCE漏洞复现

0x01 产品简介 上讯信息的InforCube运维管理审计系统&#xff08;InforCube OMA&#xff09;是一款新一代运维安全审计产品&#xff0c;旨在全面提升企业IT运维管理水平&#xff0c;通过细粒度授权、全过程操作记录及控制、全方位操作审计等功能&#xff0c;实现运维过程的“事…

USB PD SINK协议取电芯片不同品牌介绍对比-在选择PD SINK 协议芯片时,用户需要综合考虑各方面的因素,包括工作耐压、稳定性、兼容性等

PD SINK协议芯片是现代通信技术中的一项重要技术&#xff0c;它起着连接不同系统的桥梁作用。协议芯片内部集成了各种不同的通信协议&#xff0c;如蓝牙、Wi-Fi、以太网等&#xff0c;使不同设备之间的通信变得更加简单和高效。协议芯片推动了信息通信技术的发展。在过去&#…

Windows下查看某个端口被某个应用占用

1、打开命令窗口(以管理员身份运行) ​​​​​​​​​​ 2、查找所有运行的端口 输入所有命令&#xff1a;当前命令可以查看当前电脑的全部端口使用情况 netstat -ano3、查看被占用端口对应的 PID&#xff08;这里以8000端口为例&#xff09; netstat -ano|findstr &qu…