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

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

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

相关文章

数据结构--图的遍历 DFS

数据结构–图的遍历 DFS 树的深度优先遍历 //树的先根遍历 void PreOrder(TreeNode *R) {if(R ! NULL){visit(R); //访问根节点while(R还有下一个子树T)PreOrder(T);//先根遍历下一棵子树} }图的深度优先遍历 bool visited [MAX_VERTEX_NUM]; //访问标记数组 void DFS(Grap…

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT 2

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨&#xff0c;在1995年出版的《未来之路》一书中&#xff0c;提及“物物互联”。1998年麻省理工学院提出&#xff0c;当时被称作EPC系统的物联网构想。2005年11月&#xff0c;国际电信联盟发布《ITU互联网…

医学影像PACS系统源码:多功能服务器和阅片系统

PACS系统是以最新的IT技术为基础&#xff0c;遵循医疗卫生行业IHE/DICOM3.0和HL7标准&#xff0c;开发的多功能服务器和阅片系统。通过简单高性能的阅片功能&#xff0c;支持繁忙时的影像诊断业务&#xff0c;拥有保存影像的院内Web传输及离线影像等功能&#xff0c;同时具有备…

DP(背包模型)

01背包问题 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&…

VMware Linux Centos 配置网络并设置为静态ip

在root用户下进行以下操作 1. 查看子网ip和网关 &#xff08;1&#xff09;进入虚拟网络编辑器 &#xff08;2&#xff09;进入NAT设置 &#xff08;3&#xff09;记录子网IP和子网掩码 2. 修改网络配置文件 &#xff08;1&#xff09;cd到网络配置文件路径下 [rootlo…

GB28181智慧可视化指挥控制系统之执法记录仪设计探讨

什么是智慧可视化指挥控制系统&#xff1f; 智慧可视化指挥控制平台通过4G/5G网络、WIFI实时传输视音频数据至指挥中心&#xff0c;特别是在有突发情况时&#xff0c;可以指定一台执法仪为现场视频监控器&#xff0c;实时传输当前画面到指挥中心&#xff0c;指挥中心工作人员可…

sentinel组件

目录 定义 4.加SentinelResource,blockHander是超过阈值之后执行的函数 5.设置阈值 6.springboot集成sentinel 定义 1.sentinel知道当前流量大小&#xff0c;在浏览器和后端之间加sentinel控制流量&#xff0c;避免大批量的瞬时请求都达到服务上&#xff0c;将服务压垮 2.…

LeetCode 热题 100 JavaScript--108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 提示&#xff1a; 1 < nums.length < 104 -104 < n…

一百四十六、Xmanager——Xmanager5连接Xshell7并控制服务器桌面

一、目的 由于kettle安装在Linux上&#xff0c;Xshell启动后需要Xmanager。而Xmanager7版本受限、没有免费版&#xff0c;所以就用Xmanager5去连接Xshell7 二、Xmanager5安装包来源 &#xff08;一&#xff09;注册码 注册码&#xff1a;101210-450789-147200 &#xff08…

FasterTransformer :transformer类模型的三种结构

Transformer是一种基于注意力机制的深度神经网络结构&#xff0c;常用于文本生成、机器翻译等NLP任务。目前常用的Transformer类模型架构主要有三种: 结构例子–仅编码器&#xff08;EncoderOnly&#xff09;bert,T5输入为一整个句子仅解码器&#xff08;DecoderOnly&#xff…

常微分方程建模R包ecode(二)——绘制相速矢量场

本节中我们考虑一个更为复杂的常微分方程模型&#xff0c; d X C d t ν ( X A Y A ) − β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ) ⋅ X C , ( 1 ) d Y C d t β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ρ ) ⋅ Y C , ( 2 ) d X A d t g ⋅ X C − β ⋅ X A ⋅ ( Y C Y A …

决策树的划分依据之:信息增益率

在上面的介绍中&#xff0c;我们有意忽略了"编号"这一列.若把"编号"也作为一个候选划分属性&#xff0c;则根据信息增益公式可计算出它的信息增益为 0.9182&#xff0c;远大于其他候选划分属性。 计算每个属性的信息熵过程中,我们发现,该属性的值为0, 也就…

selenium官网文档阅读总结(day 2)

1.selenium元素定位方法 1.1selenium命令 当我们使用chormdriver打开网页后&#xff0c;接下来就要用python操作元素&#xff0c;模拟用户会作出的操作&#xff0c;这些操作元素的方法就是命令。比如 (1) click&#xff1a;点击&#xff08;按钮&#xff0c;单选框&#xff…

【Java】UWB高精度工业人员安全定位系统源码

基于VueSpring boot前后端分离架构开发的一套UWB技术高精度定位系统源码。 UWB高精度人员定位系统提供实时定位、电子围栏、轨迹回放等基础功能以及各种拓展功能,用户可根据实际需要任意选择搭配拓展功能。该系统简易部署&#xff0c;方便使用&#xff0c;实时响应。UWB高精度定…

skywalking全链路追踪

文章目录 一、介绍二、全链路追踪1. 测试1 - 正常请求2. 测试2 - 异常请求 三、过滤非业务请求链路1. 链路忽略插件2. 配置3. 测试 一、介绍 在上一篇文章skywalking安装教程中我们介绍了skywalking的作用以及如何将其集成到我们的微服务项目中。本篇文章我们介绍在微服务架构…

张量Tensor 深度学习

1 张量的定义 张量tensor理论是数学的一个分支学科&#xff0c;在力学中有重要的应用。张量这一术语源于力学&#xff0c;最初是用来表示弹性介质中各点应力状态的&#xff0c;后来张量理论发展成为力学和物理学的一个有力数学工具。 张量&#xff08;Tensor&#xff09;是一个…

基于总线加锁和缓存锁(CPU实现原子操作的两种方式)

总线锁 总线锁就是使用处理器提供的一个LOCK#信号&#xff0c;当一个处理器在总线上输出此信号时&#xff0c;其他处理器的请求将被阻塞住&#xff0c;那么该处理器可以独占共享内存。 CPU和内存之间的通信被锁&#xff01;&#xff01; 如果多个处理器同时对共享变量进行读写…

解决一个Sqoop抽数慢的问题,yarn的ATSv2嵌入式HBASE崩溃引起

新搭建的一个Hadoop环境&#xff0c;用Sqoop批量抽数的时候发现特别慢&#xff0c;我们正常情况下是一个表一分钟左右&#xff0c;批量抽十几个表&#xff0c;也就是10分钟的样子&#xff0c;结果发现用了2个小时&#xff1a; 查看yarn日志 发现有如下情况&#xff1a; 主要有两…

【java安全】原生反序列化利用链JDK7u21

文章目录 【java安全】原生反序列化利用链JDK7u21前言原理equalsImpl()如何调用equalsImpl()&#xff1f;HashSet通过反序列化间接执行equals()方法如何使hash相等&#xff1f; 思路整理POCGadget为什么在HashSet#add()前要将HashMap的value设为其他值&#xff1f; 【java安全】…

C++二叉搜索树剖析

目录 &#x1f347;二叉搜索树概念&#x1f348;二叉搜索树查找&#x1f349;二叉搜索树的插入&#x1f34a;二叉搜索树的删除&#x1f34d;二叉搜索树的查找、插入、删除实现&#x1f34b;二叉搜索树的应用&#x1f96d;二叉搜索树的性能分析&#x1f353;总结 &#x1f347;二…