[云原生1.] Docker容器的简单介绍和基本管理

news2024/11/19 20:18:30

1. Docker容器的基本概述

1.1 简介

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

1.2 容器的优点

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

1.3 Docker与虚拟机的区别

在这里插入图片描述

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

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

1.4 Docker核心组成

1.4.1 镜像

是创建容器的基础,是一个只读的模板文件,里面包含运行容器中的应用程序所有需要的所有内容(应用程序文件、配置文件、运行库文件、依赖包等)

1.4.2 容器

是用镜像运行的实例,容器可以被创建、启动、停止、删除,每个容器之间默认是相互隔离的

1.4.3 仓库

是用来保存镜像的地方,有公有仓库私有仓库之分

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

1.5 容器在内核中支持2种重要技术

docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离通过cgroup实现资源限制

1.5.1 linux六大namespace(命名空间)

namespace系统调用参数隔离内容
UTSCLONE_NEWUTS主机名和域名
IPCCLONE_NEWWIPS信号量,消息队列和共享内存
PIDCLONE_NEWPID进程编号
NETWORKCLONE_NEWNET网络设备,网络栈,端口等
MOUNTCLONE_NEWNS挂载点(文件系统)
USERCLONE_NEWUSER用户和用户组(3.8以后的内核才支持)

1.6 Docker的使用场景

  1. 使用Docker容器开发、测试、部署服务

  2. 创建隔离的运行环境3.搭建测试环境

  3. 构建平台即服务PaaS基础设施

  4. 提供软件即服务SaaS应用程序

  5. 高性能、超大规模宿主机部署

2. Docker的部署

2.1 前置准备

systemctl stop firewalld.service
setenforce 0

#如果是最小化安装需要安装依赖包
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。
-------------------------------------------------------------------------------------------

2.2 安装Drocker

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

在这里插入图片描述

systemctl start docker.service
systemctl enable docker.service 

在这里插入图片描述

#查看 docker 版本信息
docker version

#docker 信息查看
docker info  

3. Docker 镜像操作

3.1 搜索镜像

#基本格式:
docker search 关键字
#示例
docker search nginx

在这里插入图片描述

3.2 获取镜像

#基本格式:
docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
#镜像加速下载
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置


mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
docker pull nginx

在这里插入图片描述
在这里插入图片描述

docker pull nginx:1.12
#指定下载镜像版本

在这里插入图片描述

3.3 查看镜像信息

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

#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看下载到本地的所有镜像
docker images

在这里插入图片描述

REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
#根据镜像的唯一标识 ID 号,获取镜像详细信息
#基本格式:
docker inspect 镜像ID号
#示例
docker inspect bc649bab30d1
lowerdir是镜像层,目录或者文件是只读的,其实就是rootfs,image layer可以分很多层,所以对应的lowerdir是可以有多个目录
upperdir是在lowerdir之上的容器层,这层是可读可写的,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这里层
MergedDir是表现层,是容器的挂载点

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

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

docker images | grep nginx

在这里插入图片描述

3.5 删除镜像

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

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

在这里插入图片描述

3.6 镜像的存出、载入

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

#基本格式:
docker save -o 存储文件名 存储的镜像
docker save -o nginx1.12.tar nginx:1.12    #存出镜像命名为nginx存在当前目录下
ls -lh

在这里插入图片描述

3.6.2 载入镜像 ---- 将镜像文件导入到镜像库中

格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
docker load < nginx1.12.tar

在这里插入图片描述

3.7 上传镜像

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。
https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。

在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。

#基本格式
docker login                                   #默认登录官方公有仓库
docker push 你的仓库名/镜像名:标签
docker tag nginx:latest soscscs/nginx:web		#添加新的标签时必须在前面加上自己的dockerhub的username
docker login								#登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web					#上传镜像

在这里插入图片描述

4. Docker 容器操作

4.1 容器的创建

就是将镜像加载到容器的过程

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

#基本格式:
docker create [选项] 镜像 镜像的启动命令

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

在这里插入图片描述

docker ps -a
#查看容器的运行状态

在这里插入图片描述

4.2 容器的启动

#基本格式:
docker start 容器的ID/名称
docker start suspicious_payne

docker ps -a

在这里插入图片描述

4.3 停止容器

#基本格式:
docker stop 容器的ID/名称
或
docker kill 容器名
#强停
docker stop suspicious_payne
docker ps -a

在这里插入图片描述

4.5 删除容器

#基本格式:
docker rm [-f] 容器ID/名称

-f 强制删除
#容器正在运行是无法删除的
docker stop suspicious_payne

docker rm suspicious_payne				
#删除已经终止状态的容器

在这里插入图片描述

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)		#批量清理后台停止的容器

4.6 容器的进入

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

#基本格式:
docker exec -it 容器ID/名称 /bin/bash

-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。
docker start sleepy_raman
#进入容器前,确保容器正在运行

docker exec -it sleepy_raman /bin/bash

在这里插入图片描述

4.7 复制到容器中

cp 容器名|容器ID:绝对路径  宿主机路径
或

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

在这里插入图片描述
在这里插入图片描述

4.8 从容器复制文件到主机

#基本路径
cp 宿主机路径  容器名|容器ID:绝对路径
docker cp  sleepy_raman:/opt/test.txt ~/abc123.txt

在这里插入图片描述

4.9 容器的导出和导入

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

可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

4.9.1 容器的导入

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

在这里插入图片描述
在这里插入图片描述

4.9.2 容器的导出

export -o 容器模板文件 容器名|容器ID
或
export 容器名|容器ID > 容器模板文件
docker export sleepy_raman > centos7.tar

在这里插入图片描述

4.10 创建并启动容器

可以直接执行 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 创建的容器
#基本格式
docker run -d [选项] 镜像名:标签 [容器启动命令]
              -i -t --name --rm
#-d 在前台运行容器
#示例
docker run -it --name s1 nginx:1.12
#在前台启动容器,后台运行容器,退出后容器直接关闭

在这里插入图片描述

docker run -itd --name s2 centos:7 /bin/bash
#创建容器并持续运行容器

在这里插入图片描述

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

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

相关文章

Unity之ShaderGraph如何实现无贴图水球效果

前言 我们今天来实现一个无贴图水球效果&#xff0c;如下图所示&#xff1a; 主要节点 UVSplit&#xff1a;可以获得UV在RGB三个颜色分别的分量 Remap&#xff1a;重映射节点 基于输入 In 值在输入In Min Max的 x 和 y 分量之间的线性插值&#xff0c;返回输入Out Min Max…

爬虫三大库

Requests库安装 Requests库的作用是请求网站获得网页数据 在pycharm中安装方式如下&#xff1a; 选择settings 选择Project Interpreter&#xff0c;单击号添加第三方库 BeautifulSoup库按同样方式安装。 Requests库 pycharm返回结果为<Response [200]>,说明请求网址成…

简单秒表设计仿真verilog跑表,源码/视频

名称&#xff1a;简单秒表设计仿真 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 秒表显示最低计时为10ms&#xff0c;最大为59:99&#xff0c;超出返回00&#xff1a;00 具有复位、启动、暂停三个按键 四个数码管分别显示4个时间数字。 演示…

了解 Elasticsearch 自动生成的文档 _id:重复是一个问题吗?

Elasticsearch 中自动生成的文档 ID 当你在未指定 ID 的情况下对文档建立索引时&#xff0c;Elasticsearch 会自动为该文档生成唯一的 ID。 该 ID 是 Base64 编码的 UUID&#xff0c;由多个部分组成&#xff0c;每个部分都有特定的用途。 ID 生成过程针对索引速度和存储效率进…

互联网Java工程师面试题·Java 总结篇·第九弹

目录 75、阐述 JDBC 操作数据库的步骤。 76、Statement 和 PreparedStatement 有什么区别&#xff1f;哪个性 能更好&#xff1f; 77、使用 JDBC 操作数据库时&#xff0c;如何提升读取数据的性能&#xff1f;如何提升更新数据的性能&#xff1f; 78、在进行数据库编程时&a…

git 查看本地秘钥

第一步&#xff1a; 1&#xff0c;打开终端或者命令行窗口&#xff0c;输入一下命令&#xff1a; cd ~/.ssh进入ssh目录 2&#xff0c;查看该目录下的所有文件&#xff0c;输入以下命令: ls -al该命令将显示ssh目录下的所有文件&#xff0c;包括秘钥文件和配置文件,如果不存…

100天掌握网络安全知识点!

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

C++ Primer 第十一章 关联容器 重点解读

1 map自定义排序 #include <map> #include <iostream> #include <functional> using namespace std; int main() {function<bool(pair<int, int>, pair<int, int>)> cmp [&](pair<int, int> p1, pair<int, int> p2) -&g…

设计模式-综合应用(一)

介绍 使用jQuery做一个模拟购物车的示例 用到的设计模式 工厂模式 单例模式装饰器模式 观察者模式状态模式 模板方法模式 代理模式 UML类图

leetcode - 319. Bulb Switcher

Description There are n bulbs that are initially off. You first turn on all the bulbs, then you turn off every second bulb. On the third round, you toggle every third bulb (turning on if it’s off or turning off if it’s on). For the ith round, you toggl…

Apollo的搭建

Apollo的搭建 1.环境准备 jdk : 1.8 mysql 5.6.5 2.下载 两种方式&#xff1a; a.下载源码自己编译&#xff08;需要修改源码的可以选择&#xff09; 源码&#xff1a;https://github.com/ctripcorp/apoll b.编译好的直接使用 地址&#xff1a;Releases apol…

人人开源前后端分离开源项目启动流程(超详细)

renren-security是一个轻量级的&#xff0c;前后端分离的Java快速开发平台&#xff0c;能快速开发项目并交付【接私活利器】采用SpringBoot、Shiro、MyBatis-Plus、Vue3、TypeScript、Element Plus、Vue Router、Pinia、Axios、Vite框架&#xff0c;开发的一套权限系统&#xf…

Vue2基础知识(一) 认识Vue

&#x1f48c; 所属专栏&#xff1a;【Vue2】&#x1f600; 作 者&#xff1a;长安不及十里&#x1f4bb;工作&#xff1a;目前从事电力行业开发&#x1f308;目标&#xff1a;全栈开发&#x1f680; 个人简介&#xff1a;一个正在努力学技术的Java工程师&#xff0c;专注基础和…

原创!—混合灰狼层次结构的自适应麻雀搜索算法GWHASSA

麻雀搜索算法&#xff08;SSA&#xff09;是薛建凯等人[1]提出的一种群体智能优化算法,是受麻雀觅食和躲避捕食者行为启发而设计出的算法。该算法于2020年首次提出&#xff0c;具有局部搜索能力强、调整参数少等特点&#xff0c;已成功应用于CT图像的现场检测、电池堆参数的优化…

分布式和微服务

问题分析&#xff1a; 简单来说&#xff0c;分布式是一组通过网络进行通信&#xff0c;并且为了完成共同的计算任务的计算机节点组 成的系统。 分布式系统的设计理念&#xff0c;其实是来自于小型机或者大型机的计算能力的瓶颈和成本的 增加。 在集中式系统里面&#xff0c;要…

FL Studio21最新中文破解进阶高级完整版安装下载教程

目前水果软件最版本是FL Studio21&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让你的音乐突破想象力的限制。喜欢音乐制作的小伙伴千万不要错过这个功能强大&#xff0c;安装便捷的音乐软件哦&#xff01;如…

ThreadLocal源码解密

1 背景 作为一只懒懒地程序员,其实我是不太爱看源码的,晦涩、深奥、难懂、耗费时间等等,就觉得不是我这种能力平平地小老百姓能吃得消的,但现实比人强,记得曾经我就被不懂原理的情况下乱用ThreadLocal给毒打了。 犹记得当时在一个JSF服务中的责任链的校验场景中需要在源…

使用vcpkg管理依赖第三库

文章目录 使用vcpkg管理依赖第三库vcpkg安装vcpkg经典模式使用从仓库列表搜索依赖项从某个基线版本的列表中查询某个依赖项信息安装依赖库 vcpkg清单模式的使用vcpkg清单模式的使用例子说明 使用vcpkg管理依赖第三库 vcpkg 有两种操作模式&#xff1a;经典模式和清单模式。 在…

36 机器学习(四):异常值检测|线性回归|逻辑回归|聚类算法|集成学习

文章目录 异常值检测箱线图z-score 保存模型 与 使用模型回归的性能评估线性回归正规方程的线性回归梯度下降的线性回归原理介绍L1 和 L2 正则化的介绍api介绍------LinearRegressionapi介绍------SGDRegressor 岭回归 和 Lasso 回归 逻辑回归基本使用原理介绍正向原理介绍损失…

深入理解JavaScript ES8的新特性

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…