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

Docker 容器化学习

文章目录

  • 前言
    • Docker架构
  • 1、 docker安装
  • 2、启动docker服务
  • 3、设置docker随机器一起启动
  • 4、docker体验
  • 5、docker常规命令
    • 5.1、容器操作
      • docker [run|start|stop|restart|kill|rm|pause|unpause]
      • docker [ps|inspect|exec|logs|export|import]
    • 5.2、镜像操作
      • docker images|rmi|tag|build|history|save|load]
        • history查看镜像组成:
        • 查看镜像文件
        • 查看镜像层文件
    • 5.3、镜像与容器总结
    • 5.4、仓库操作
    • 5.5、私有仓库使用
  • 6、容器创建详解
    • 6.1、交互式创建容器并进入:
    • 6.2、后台启动容器:
    • 6.3、进入已运行的容器
    • 6.4、绑定容器端口到主机
    • 6.5、挂载主机文件目录到容器内
    • 6.6、复制主机文件到容器内
  • 7、Docker卸载
    • 7.1、kill掉docker进程
    • 7.2、删除docker所在目录
    • 7.3、查询安装过的包
    • 7.4、删除安装的软件包
    • 7.5、查看卸载成功

前言

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
(背景),云计算兴起后,服务器硬件扩展非常便利,软件服务部署成为了瓶颈,docker趁势而兴。

为什么要用docker?

容器的启动可以在秒级实现,比传统的虚拟机方式要快得多
对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器
docker的出现,让开发/测试/线上的环境部署,更为便利。

与虚拟机做对比

特性容器虚拟机
启动秒级分钟级
硬盘占用MBGB
性能接近原生弱于
系统支持量单机支持上千容器一般几十个

优点:

  • 更快速的交付和部署
    对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
    开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
  • 更高效的虚拟化
    Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
  • 更轻松的迁移和扩展
    Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
  • 更简单的管理
    使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

Docker架构

在这里插入图片描述
在这里插入图片描述
容器和镜像的关系,就类似于类与对象的关系。
镜像之间也存在------层间继承关系
容器类似 镜像new的对象。

1、 docker安装

CentOS 7环境下,输入命令:

sudo yum install docker -y

安装的是默认版本,安装完后查看版本:

docker version

在这里插入图片描述
如果安装指定版本,则:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
sudo yum install docker-ce

2、启动docker服务

sudo service docker start

之后查看一下版本,可以看到客户端和服务端版本信息:
在这里插入图片描述

3、设置docker随机器一起启动

sudo chkconfig docker on

在这里插入图片描述

4、docker体验

运行 hello-world
在这里插入图片描述

5、docker常规命令

在这里插入图片描述

5.1、容器操作

docker [run|start|stop|restart|kill|rm|pause|unpause]

• run/create[镜像名]: 创建一个新的容器并运行一个命令
• start/stop/restart[容器名]:启动/停止/重启一个容器
• kill [容器名]: 直接杀掉容器,不给进程响应时间
• rm[容器名]:删除已经停止的容器
• pause/unpause[容器名]:暂停/恢复容器中的进程

tips:

docker run -d --name cont1
docker run dti --name cont2

docker [ps|inspect|exec|logs|export|import]

• ps:查看容器列表(默认查看正在运行的容器,-a查看所有容器)
• inspect[容器名]:查看容器配置元数据
• exec -it [容器名] /bin/bash:进入容器环境中交互操作
• logs --since=“2019-02-01” -f --tail=10 [容器名]:查看容器日志
• cp path1 [容器名]:path 容器与主机之间的数据拷贝
• export -o test.tar [容器名] / docker export [容器名]>test.tar : 文件系统作为一个tar归档文件
• import test.tar [镜像名:版本号]:导入归档文件,成为一个镜像

举个例子查看日志:
在这里插入图片描述

5.2、镜像操作

docker images|rmi|tag|build|history|save|load]

• images:列出本地镜像列表
• rmi [镜像名:版本]:删除镜像
• tag [镜像名:版本] [仓库]/[镜像名:版本]:标记本地镜像,将其归入某一仓库
• build -t [镜像名:版本] [path]:Dockerfile 创建镜像
• history [镜像名:版本]: 查看指定镜像的创建历史
• save -o xxx.tar [镜像名:版本] / save [镜像名:版本]>xxx.tar : 将镜像保存成 tar 归档文件
• load --input xx.tar / docker load<xxx.tar : 从归档文件加载镜像

history查看镜像组成:

docker history hello-world
在这里插入图片描述
显示镜像hello-world分三层,其中两个空层。

查看镜像文件

镜像存放在imagedb里;一般在image/pverlay2/imagedb/content/sha256下
在这里插入图片描述
打开一个镜像文件查看其内容:

cat f09fe80eb0e75e97b04b9dfb065ac3fda37a8fac0161f42fca1e6fe4d0977c80

{"architecture": "amd64","config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/hello"],"ArgsEscaped": true,"Image": "sha256:a6d1aaad8ca65655449a26146699fe9d61240071f6992975be7e720f1cd42440","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": null},"container": "8e2caa5a514bb6d8b4f2a2553e9067498d261a0fd83a96aeaaf303943dff6ff9","container_config": {"Hostname": "8e2caa5a514b","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/sh", "-c", "#(nop) ", "CMD [\"/hello\"]"],"ArgsEscaped": true,"Image": "sha256:a6d1aaad8ca65655449a26146699fe9d61240071f6992975be7e720f1cd42440","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {}},"created": "2019-01-01T01:29:27.650294696Z","docker_version": "18.06.1-ce","history": [{"created": "2019-01-01T01:29:27.416803627Z","created_by": "/bin/sh -c #(nop) COPY file:f77490f70ce51da25bd21bfc30cb5e1a24b2b65eb37d4af0c327ddc24f0986a6 in / "}, {"created": "2019-01-01T01:29:27.650294696Z","created_by": "/bin/sh -c #(nop)  CMD [\"/hello\"]","empty_layer": true}],"os": "linux","rootfs": {"type": "layers","diff_ids": ["sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3"]}
}

在这里插入图片描述

查看镜像层文件

层文件在layerdb里

ll /var/lib/docker/image/overlay2/layerdb/sha256

在这里插入图片描述
镜像层文件内结构:
在这里插入图片描述

5.3、镜像与容器总结

一个镜像就是一层层的layer层文件,盖楼而成,上层文件叠于下层文件上,若上层文件有与下层文件重复的,则覆盖掉下层文件重复的部分,如下图:
在这里插入图片描述
---------初始挂载时读写层为空。
---------当需要修改镜像内的某个文件时,只对处于最上方的读写层进行了变动,不复写下层已有文件系统的内容,已有文件在只读层中的原始版本仍然存在,但会被读写层中的新版本文件所隐藏,当 docker commit 这个修改过的容器文件系统为一个新的镜像时,保存的内容仅为最上层读写文件系统中被更新过的文件。
---------联合挂载是用于将多个镜像层的文件系统挂载到一个挂载点来实现一个统一文件系统视图的途径,是下层存储驱动(aufs、overlay等) 实现分层合并的方式。

5.4、仓库操作

官方仓库:http://hub.docker.com
在这里插入图片描述
一般拉取镜像前我们先查看有哪些版本,如拉取mysql时:

docker search MySQL

(ps: 这里我出现问题访问网络失败,no route to host 参见:no route to host)

在这里插入图片描述
这里带 OK 标识的表示 是 Docker官方的镜像~
但是又看不到具体有哪些版本,使用如下命令,指定版本查看,没有则结果为空:

docker search MySQL:5.7

在这里插入图片描述

比如拉取 MySQL 镜像:

docker pull MySQL

但是该指令默认拉取最新版本,拉取指定版本使用如下指令:

docker pull MySQL:5.7

删除镜像使用指令:

docker image rm MySQL:5.7

5.5、私有仓库使用

使用registry镜像创建私有仓库

下载registry镜像:

docker pull registry    -- 可配置加速器加速下载

在这里插入图片描述
启动:

docker run -d --name reg -p 5000:5000 registry

设置http传输:

systemctl daemon-reload | systemctl restart docker

在这里插入图片描述

docker tag hello-world http://192.168.102.2:5000/hello-world
docker push http://192.168.102.2:5000/hello-world

查询

curl http://192.168.102.2:5000/v2/_catalog  |  http://192.168.102.2:5000/v2/hello-world/tags/list

6、容器创建详解

在这里插入图片描述

6.1、交互式创建容器并进入:

在这里插入图片描述

docker run -it --name centos centos /bin/bash(前台进程)
---- exit退出也关闭容器; Ctrl+P+Q退出不关闭容器
在这里插入图片描述

6.2、后台启动容器:

在这里插入图片描述
docker run -d --name nginx nginx

6.3、进入已运行的容器

docker exec -it nginx /bin/bash

查看容器的元数据:

docker inspect nginx

6.4、绑定容器端口到主机

docker run -d -p 8080:80 --name nginx nginx:latest

6.5、挂载主机文件目录到容器内

docker run -dit -v /root/peter_dir/:/pdir --name cent centos

6.6、复制主机文件到容器内

docker cp anaconda-ks.cfg cent:/var

7、Docker卸载

7.1、kill掉docker进程

ps -ef|grep dockerkill -9 pid

7.2、删除docker所在目录

rm -rf /etc/dockerrm -rf /run/dockerrm -rf /var/lib/dockershimrm -rf /var/lib/docker

7.3、查询安装过的包

yum list installed | grep docker

docker-engine.x86_64                 17.03.0.ce-1.el7.centos         @dockerrepo

7.4、删除安装的软件包

yum -y remove xxx 

7.5、查看卸载成功

docker version

相关文章:

Docker 容器化学习

文章目录 前言Docker架构 1、 docker安装2、启动docker服务3、设置docker随机器一起启动4、docker体验5、docker常规命令5.1、容器操作docker [run|start|stop|restart|kill|rm|pause|unpause]docker [ps|inspect|exec|logs|export|import] 5.2、镜像操作docker images|rmi|tag…...

springboot第34集:ES 搜索,nginx

#用search after解决深分页性能问题 #第一页 GET /bank/_search {"size": 10,"sort": [{"account_number": {"order": "asc"}}] }#第二页 GET /bank/_search {"size": 10,"sort": [{"account_numb…...

微信小程序中的分包使用介绍

一、分包的好处 可以优化小程序首次启动的下载时间 在多团队共同开发时可以更好的解耦协作 主包&#xff1a;放置默认启动页面/TabBar 页面&#xff0c;公共资源/JS 脚本 分包&#xff1a;根据开发者的配置进行划分 限制&#xff1a;所有分包大小不超过 20M&#xff0c;单…...

【云原生】K8S二进制搭建二:部署CNI网络组件

目录 一、K8S提供三大接口1.1容器运行时接口CRI1.2云原生网络接口CNI1.3云原生存储接口CSI 二、Flannel网络插件2.1K8S中Pod网络通信2.2Overlay Network2.3VXLAN2.4Flannel 三、Flannel udp 模式的工作原理3.1ETCD 之 Flannel 提供说明 四、vxlan 模式4.1Flannel vxlan 模式的工…...

【iOS】—— 离屏渲染

文章目录 离屏渲染UIView和CALayer关系GPU屏幕渲染有两种方式:产生离屏渲染的原因&#xff1a;既然离屏渲染这么耗性能,为什么有这套机制呢?什么情况会离屏渲染&#xff1f;既然离屏渲染这么不好&#xff0c;为什么我们还要强制开启呢&#xff1f;如何避免离屏渲染&#xff1f…...

基于人工智能的中医图像分类系统设计与实现

华佗AI 《支持中医,永远传承古老文化》 本存储库包含一个针对中药的人工智能图像分类系统。该项目的目标是通过输入图像准确识别和分类各种中草药和成分。 个人授权许可证 版权所有 2023至2050特此授予任何获得华佗AI应用程序(以下简称“软件”)副本的人免费许可,可根据以…...

spring security + oauth2 使用RedisTokenStore 以json格式存储

1.项目架构 2.自己对 TokenStore 的 redis实现 package com.enterprise.auth.config;import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis…...

css position: sticky;实现上下粘性布局,中间区域滚动

sticky主要解决的问题 1、使用absolute和fixed中间区域需要定义高度2、使用absolute和fixed底部需要写padding-bottom 避免列表被遮挡住一部分&#xff08;底部是浮窗的时候&#xff0c;需要动态的现实隐藏&#xff09; <!DOCTYPE html> <html lang"en"&…...

解密HTTP代理爬虫中的IP代理选择与管理策略

在当今数据驱动的世界中&#xff0c;HTTP代理爬虫作为一项重要的数据采集工具&#xff0c;其成功与否往往取决于IP代理的选择与管理策略。作为一家专业的HTTP代理产品供应商&#xff0c;我们深知IP代理在数据采集中的重要性。在本文中&#xff0c;我们将分享一些关于HTTP代理爬…...

pytorch入门

详细安装教程和环境配置可以看&#xff1a;Python深度学习&#xff1a;安装Anaconda、PyTorch&#xff08;GPU版&#xff09;库与PyCharm_哔哩哔哩_bilibili 跟学课程&#xff1a;B站我是土堆 pytorch中两个实用函数&#xff1a; dir()&#xff1a;打开 help():说明书…...

Redis | 主从模式

Redis | 主从模式 1. 简介 Redis主从模式&#xff08;Replication&#xff09;是Redis提供的一种数据备份和高可用性解决方案。通过主从复制&#xff0c;可以将一个Redis服务器的数据复制到其他多个从服务器&#xff0c;从而实现数据的备份和读写分离&#xff0c;提高系统的性…...

C# Blazor 学习笔记(8):row/col布局开发

文章目录 前言相关文章代码row和col组件B_rowB_col结构 使用 前言 可能是我用的element ui和 uView这种第三方组件用的太多了。我上来就希望能使用这些组件。但是目前Blazor目前的生态其实并不完善&#xff0c;所以很多组件要我们自己写。 我们对组件的要求是 我们在组件化一共…...

金融供应链智能合约 -- 智能合约实例

前提 Ownable:监管者合约,有一个函数能转让监管者。 SupplyChainFin:供应链金融合约,银行、公司信息上链&#xff0c;公司和银行之间的转账。 发票&#xff1a;记录者交易双方和交易金额等的一种记录数据。如:我在超市买了一瓶水,超市给我开了一张发票。 Ownable // SPDX-…...

论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读

论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读 论文概况论文主要贡献Background & Motivation方法论单行为图神经网络&#xff08;Behavior-aware GNN&#xff09;多行为对比学习元对比编码模型训练 实验部分论文总结 论文概况 今…...

K8S 部署 RocketMQ

文章目录 添加模板部署本地访问 集群使用 kubesphere 作为工具 添加模板 添加 helm 模板 helm repo add rocketmq-repo https://helm-charts.itboon.top/rocketmq helm repo update rocketmq-repo编写 value.yaml 文件 配置主从节点的个数&#xff0c;例子为单节点 broker:…...

[Docker]入门之docker-compose

一&#xff0c;Docker-compose简介 1&#xff0c;Docker-compose简介 Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是工程&#xff08;project&#xff09;&#xff0c…...

SAP ABAP中使用函数ALSM_EXCEL_TO_INTERNAL_TABLE读取EXCEL中不同的SHEET数据

SAP提供了标准的读取EXCEL的函数&#xff08;ALSM_EXCEL_TO_INTERNAL_TABLE&#xff09;&#xff0c;但是此标准函数无法满足对同一EXCEL 进行不同SHEET的数据读取&#xff0c;一下方法就是教你如何通过修改程序来实现ALSM_EXCEL_TO_INTERNAL_TABLE读取多个SHEET&#xff1b; …...

Rust 编程小技巧摘选(6)

目录 Rust 编程小技巧(6) 1. 打印字符串 2. 重复打印字串 3. 自定义函数 4. 遍历动态数组 5. 遍历二维数组 6. 同时遍历索引和值 7. 迭代器方法的区别 8. for_each() 用法 9. 分离奇数和偶数 10. 判断素数&#xff08;质数&#xff09; Rust 编程小技巧(6) 1. 打印…...

如何保证Redis缓存和数据库的一致性问题

熟练掌握Redis缓存技术&#xff1f; 那么请问Redis缓存中有几种读写策略&#xff0c;又是如何保证与数据库的一致性问题 今天来聊一聊常用的三种缓存读写策略 Cache Aside Pattern Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式&#xff0c;比较适合读请求比…...

【数据分析入门】人工智能、数据分析和深度学习是什么关系?如何快速入门 Python Pandas?

目录 一、前言二、数据分析和深度学习的区别三、人工智能四、深度学习五、Pandas六、Pandas数据结构6.1 Series - 序列6.2 DataFrame - 数据框 七、输入、输出7.1 读取/写入CSV7.2 读取/写入Excel7.3 读取和写入 SQL 查询及数据库表 八、调用帮助九、选择(这里可以参考上一篇文…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...