Docker容器引擎的介绍

news2024/11/18 9:43:31

目录

Docker概述

容器受欢迎的原因

Docker与虚拟机的区别

Docker三个核心概念

Docker的安装

1、环境准备

2、安装依赖包

3、设置阿里云镜像源

4、安装 Docker-CE并设置为开机自动启动

Docker命令

1、查看 docker 版本信息

2、docker 信息查看

3、Docker 镜像操作命令

1)搜索镜像

2)获取镜像

3)查看镜像信息

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

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

6)删除镜像

7)导出镜像

8)导入镜像

4、Docker容器操作

1)容器创建

2)查看容器的运行状态

3)创建并启动容器

4)在后台持续运行 docker run 创建的容器

5)终止容器运行

6)进入容器

7)复制到容器中与从容器中复制到宿主机中

8)容器的导出与导入

9)删除容器


Docker概述

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

容器受欢迎的原因

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

Docker与虚拟机的区别

docker与虚拟机的区别
容器虚拟机
所有容器共享宿主机内核每个虚拟机都有独立的操作系统和内核
通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量完全隔离。每个虚拟机都有独立的硬件资源
秒级启动速度分钟级启动速度
容器相当于宿主机的进程,性能几乎没有损耗需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访问,有一定的性能损耗,一般损耗范围在20%-50%
单机容量能够支持成百上千个容器单机容量只能支持最多几十个虚拟机
namespace(命名空间)
namespace系统调用参数隔离内容
UTSCLONE_NEWUTS主机名与域名
IPCCLONE_NEWWIPC信号量、消息队列和共享内存
PIDCLONE_NEWPID进程编号
NETWORKCLONE_NEWNET网络设备、网络栈、端口等
MOUNTCLONE_NEWNS挂载点(文件系统)
USERCLONE_NEWUSER用户和用户组(3.8以后的内核才支持)

Docker三个核心概念

  1. 镜像:是创建容器的基础,是一个只读的模板文件,里面包含运行容器中的应用程序所有需要的所有内容(应用程序文件、配置文件、运行库文件、依赖包等)
  2. 容器:是用镜像运行的实例,容器可以被创建、启动、停止、删除,每个容器之间默认是相互隔离的
  3. 仓库:是用来集中保存镜像的地方,有公有仓库和私有仓库之分

Docker的安装

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

1、环境准备

systemctl stop firewalld.service
setenforce 0

2、安装依赖包

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。
-------------------------------------------------------------------------------------------

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

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

Docker命令

1、查看 docker 版本信息

docker version    #查看 docker 版本信息

2、docker 信息查看

docker info      #docker 信息查看

3、Docker 镜像操作命令

1)搜索镜像

格式:docker search 关键字
例:docker search nginx

2)获取镜像

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

3)查看镜像信息

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

#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json

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

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

格式:docker inspect 镜像ID号
docker inspect bc649bab30d1

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

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

格式:docker tag 名称:[标签] 新名称:[新标签]
例:docker tag nginx:latest nginx:web

6)删除镜像

格式:
docker rmi 仓库名称:标签				#当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号						#会彻底删除该镜像

注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
例:docker rmi nginx:web

7)导出镜像

格式:docker save -o 存储文件名 存储的镜像
例:docker save -o nginx nginx:latest	#存出镜像命名为nginx存在当前目录下

8)导入镜像

格式:
docker load < 存出的文件
或者
docker load -i 存出的文件

例:docker load < nginx
 或 docker load -i nginx

4、Docker容器操作

1)容器创建

#容器创建:就是将镜像加载到容器的过程。
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入接受用户输入命令
-t:让 Docker 分配一个伪终端 tty
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell 

例:docker create -it nginx:latest /bin/bash

2)查看容器的运行状态

docker ps -a			#-a 选项可以显示所有的容器

3)创建并启动容器

可以直接执行 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 run 镜像名 (bash|sh -c 命令)
例:docker run alpine /usr/bin/bash -c ls /
docker ps -a					#会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了

4)在后台持续运行 docker run 创建的容器

docker  run  -d  alpine  sh -c "while true;do echo welcome;done"
docker ps -a	#可以看出容器始终处于 UP,运行状态

5)终止容器运行

格式:docker stop 容器的ID/名称
例:docker stop 516e4f2fb36e

6)进入容器

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

格式:docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。

7)复制到容器中与从容器中复制到宿主机中

echo abc123 > ~/test.txt
docker cp ~/test.txt centos:/opt/

#从容器复制文件到主机
docker cp centos:/opt/test.txt ~/abc123.txt

8)容器的导出与导入

用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

#导出格式:docker export 容器ID/名称 > 文件名
docker export centos> centos7.tar

docker export -o centos7.tar centos

#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test			#导入后会生成镜像,但不会创建容器

docker import centos7.tar -- centos7:test

9)删除容器

格式:docker rm [-f] 容器ID/名称
docker stop centos
docker rm centos        #删除已经终止状态的容器
docker rm -f centos        #强制删除正在运行的容器
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

docker images | awk 'NR>=2{print "docker rmi "$3}' | bash			#批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi		#删除none镜像

docker rm $(docker ps -a -q)		#批量清理后台停止的容器

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

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

相关文章

GoLong的学习之路(五)语法之数组

书接上回&#xff0c;上回书说到&#xff0c;循环语句&#xff0c;在go中循环语句的少了whlie这个关键词&#xff0c;但是与之for可以改这个改这个特点。并且在终止关键词中&#xff0c;又有标签可以方便&#xff0c;停止。这次说数组 文章目录 Array(数组)数组的初始化方法一方…

数据结构堆详解

[TOC]堆详解 一&#xff0c;堆 1.1堆的概念 堆的性质&#xff1a; 堆中某个节点的值总是不大于或不小于其父节点的值&#xff1b; 堆总是一棵完全二叉树。 1.2堆的存储模式 我们前面的文章提到过&#xff0c;二叉树的两种存储模式&#xff0c;一个是顺序存储&#xff0c;一…

网络第一颗

✍ 如何理解局域网和广域网&#xff1f; ✍ 路由器和交换机是怎样工作的&#xff1f; ✍ 三层交换机能不能代替路由器&#xff1f; -- 1.局域网 2. 广域网 -- -- 企业网络 运营商架构 数据中心架构 -- 局域网 - 内网 - 私网 -- 通过交换机连接的 转发相同IP地址段的…

NVIDIA显卡算力表--nvidia显卡算力表

参考链接&#xff1a;https://blog.csdn.net/qq_41070955/article/details/108269915 官方链接&#xff1a;https://developer.nvidia.com/cuda-gpus

电压放大器在工业领域有哪些用途

电压放大器在工业领域中有广泛的应用&#xff0c;其主要功能是将传感器或其他信号源的微小电压信号放大为更大幅度的电压信号&#xff0c;以便进行后续的信号处理、控制和监测。以下是电压放大器在工业领域中的一些常见用途&#xff1a; 传感器信号放大&#xff1a;工业生产中经…

Java 通过反射修改字符串 String 类型变量的取值而不改变字符串变量的指向

注意点 由于 JDK 8 中有关反射相关的功能自从 JDK 9 开始就已经被限制了&#xff0c;如&#xff1a;通过反射修改 String 类型变量的 value 字段(final byte[])&#xff0c;所以要能够使用运行此方法&#xff0c;需要在运行项目时&#xff0c;添加虚拟机(VM)选项&#xff1a;-…

map set 使用快速上手【C++】

目录 一&#xff0c;关联式容器 二&#xff0c;键值对 三&#xff0c;set 1&#xff09;使用参考此文档 2&#xff09;count 函数 3&#xff09;multiset类 四&#xff0c;map 1. 模板参数介绍 2.operator[]介绍 3. multimap 英语比较好的同学可以自行查找文档 学…

springboot+avue框架开发的医院绩效考核系统全套源码

医院综合绩效核算系统全套源码 &#xff08;应用案例自主版权演示&#xff09; 医院绩效考核系统以医院的发展战略为导向&#xff0c;把科室、员工的绩效考核跟战略发展目标紧密结合&#xff0c;引导医院各个科室、各员工的工作目标跟医院的发展目标结合在一起&#xff0c;实现…

代码随想录Day26 贪心01 LeetCode T53 最大子数组和

LeetCode T53 最大子数组和 题目链接:53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 贪心贪的是哪里呢&#xff1f; 如果 -2 1 在一起&#xff0c;计算起点的时候&#xff0c;一定是从 1 开始计算&#xff0c;因为负数只会拉低总和&#xff0c;这就是贪…

VPN访问外网的原理

一.前言 许多人都用VPN翻墙&#xff0c;那么VPN为什么可以做到访问外网&#xff1f; VPN的全称叫“Virtual Private Network”意思就是虚拟私人专用网络&#xff0c;是专用网络的延伸&#xff0c;通过VPN&#xff0c;可以模拟点对点专用连接的方式&#xff0c;通过共享和公共网…

对知识蒸馏的一些理解

知识蒸馏是一种模型压缩技术&#xff0c;它通过从一个大模型&#xff08;教师模型&#xff09;中传输知识到一个小模型&#xff08;学生模型&#xff09;中来提高学生模型的性能&#xff0c;知识蒸馏也要用到真实的数据集标签。 软损失soft loss就是拿教师模型在蒸馏温度为T的…

Ai写作创作系统ChatGPT网站源码+图文搭建教程+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

map 和 set 的一起使用

map 和 set 一起使用的场景其实也蛮多的&#xff0c;最近业务上就遇到了。需求是这样的&#xff0c;一条路径&#xff08;mpls中的lsp&#xff09;会申请多个 id&#xff0c;这个 id 是独一无二的。这里很显然就就一个”一对多“的情况&#xff0c;合适用这个容器不保存这些信息…

【Java集合类面试九】、介绍一下HashMap的扩容机制

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;介绍一下HashMap的扩容机…

【Java集合类面试七】、 JDK7和JDK8中的HashMap有什么区别?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;JDK7和JDK8中的HashMap有…

【保姆级教程】:docker搭建MongoDB三节点副本集

容器可以理解为一个进程&#xff0c;镜像是把环境&#xff0c;组件等都配置好&#xff0c;运行成容器的&#xff0c;容器里面运行服务&#xff0c;也可以说是一个进程。镜像是模板&#xff0c;镜像是实例。 一个镜像可以创建多个实例。也就是多个容器&#xff0c;容器之间相互…

【已解决】vue项目之爆红红红红······

我是用npm update更新依赖的时候就开始爆红了... 这里显示是依赖问题&#xff0c;有多种解决方式&#xff1a;1&#xff0c;哪个依赖出问题就去提高或者降低依赖的版本&#xff1b;2&#xff0c;提高或者降低vue-cli的版本。 第一种&#xff1a; 我的报错信息提示eslint这个依…

Linux系统开发(1):IO多路复用

IO即输入输出&#xff0c;是主存和外部设备&#xff08;磁盘驱动器、终端和网络&#xff09;之间复制数据的过程。 IO过程 应用程序进程向操作系统发起IO调用请求&#xff1b;操作系统将外部设备的数据加载到内核缓冲区&#xff1b;操作系统将内核缓冲区的数据拷贝到进程缓冲…

Linux:firewalld防火墙-小环境实验(3)

环境介绍 本章为全纯手打&#xff0c;无任何复制&#xff0c;如果哪句命令出错&#xff0c;请评论出来我会快速修改 需求 图中防火墙区域为网关服务器上分区 &#xff0c;在网站服务器上可以使用默认的或者别的 1&#xff09;首先关闭全部的服务器的防火墙&#xff0c;实现全…

【GWO-BP预测】基于灰狼算法优化BP神经网络回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…