Docker 容器化学习

news2024/11/15 23:50:39

文章目录

  • 前言
    • 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 docker

kill -9 pid

7.2、删除docker所在目录

rm -rf /etc/docker

rm -rf /run/docker

rm -rf /var/lib/dockershim

rm -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.coloradmin.cn/o/838711.html

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

相关文章

AOF日志:宕机了,Redis如何避免数据丢失

当服务器宕机后&#xff0c;数据全部丢失&#xff1a;我们很容易想到的一个解决方案是从后端数据库恢复这些数据&#xff0c;但这种方式存在两个问题&#xff1a;一是&#xff0c;需要频繁访问数据库&#xff0c;会给数据库带来巨大的压力&#xff1b;二是&#xff0c;这些数据…

整数规划——第三章 全单模矩阵

整数规划——第三章 全单模矩阵 若线性规划问题的约束矩阵为全单模矩阵&#xff0c;则该问题可行域的顶点都是整数点&#xff0c;从而线性规划与整数规划的最优解相同。 3.1 全单模性与最优性 考虑线性整数规划问题&#xff1a; (IP) min ⁡ c T x , s . t . A x ≤ b , x …

19、springboot引用配置属性或引用生成文件的属性或引用随机值

引用配置属性或引用生成文件的属性或引用随机值 ★ 使用占位符引用其他配置属性&#xff1a; 配置文件中可用${}占位符引用已有的属性&#xff0c;被引用的属性可以是&#xff1a; - 已定义的属性。 - 来自其他配置源&#xff08;比如命令行的选项参数、环境变量、系统属性等…

JGJ79-2012建筑地基处理技术规范

为了在地基处理的设计和施工中贯执行国家的技术经济政策&#xff0c;做到安全适用、技术先进、经济合理、确保质量、保护环境&#xff0c;制定本规范。 本规范适用于建筑工程地基处理的设计、施工和质量检验。 地基处理除应满足工程设计要求外&#xff0c;尚应做到因地制宜就…

【数模】奇异值分解SVD和图形处理

介绍奇异值分解在图形压缩中的运用&#xff0c;并将简单介绍下Matlab对于图形和视频的处理 一、奇异值分解介绍 1.1 基本概念 奇异值分解(Singular Value Decomposition&#xff0c;以下简称SVD)是线性代数中一种重要的矩阵分解&#xff1a; U和V都是正交矩阵∑是奇异值矩阵&…

操作系统_内存管理

这里写目录标题 虚拟内存是什么为什么要有虚拟内存虚拟内存的实现方式1.分页查找过程页表的底层实现 2.分段段表的底层实现 3.段页式 分段和分页有什么区别什么是交换空间物理地址、逻辑地址、有效地址、线性地址、虚拟地址页面替换算法什么是缓冲区溢出 有什么危害malloc 是如…

Arthas协助MQ消费性能优化

背景 项目中使用AWS的SQS消息队列进行异步处理&#xff0c;QA通过压测发现单机TPS在23左右&#xff0c;目标性能在500TPS&#xff0c;所以需要对消费逻辑进行优化&#xff0c;提升消费速度。 目标 消费TPS从23提升到500 优化流程 优化的思路是先分析定位性能瓶颈&#xff…

如何加载模型YOLOv8 ONNXRuntime

YOLOv8 是 YOLO(You Only Look Once)目标检测系统的最新版本(v8)。YOLO 是一种实时、一次性目标检测系统,旨在在网络的单次前向传递中执行目标检测,使其快速高效。YOLOv8是之前YOLO模型的改进版本,具有更高的精度和更快的推理速度。 ONNX(开放神经网络交换)是一种表示…

算法练习--leetcode 数组

文章目录 爬楼梯问题裴波那契数列两数之和 [数组]合并两个有序数组移动零找到所有数组中消失的数字三数之和 爬楼梯问题 输入n阶楼梯&#xff0c;每次爬1或者2个台阶&#xff0c;有多少种方法可以爬到楼顶&#xff1f; 示例1&#xff1a;输入2&#xff0c; 输出2 一次爬2阶&a…

正点原子HAL库入门1~GPIO

探索者F407ZGT6(V3) 理论基础 IO端口基本结构 F4/F7/H7系列的IO端口 F1在输出模式&#xff0c;禁止使用内部上下拉 F4/F7/H7在输出模式&#xff0c;可以使用内部上下拉不同系列IO翻转速度不同 F1系列的IO端口 施密特触发器&#xff1a;将非标准方波&#xff0c;整形为方波 当…

WebRTC 之音视频同步

在网络视频会议中&#xff0c; 我们常会遇到音视频不同步的问题&#xff0c; 我们有一个专有名词 lip-sync 唇同步来描述这类问题&#xff0c;当我们看到人的嘴唇动作与听到的声音对不上的时候&#xff0c;不同步的问题就出现了 而在线会议中&#xff0c; 听见清晰的声音是优先…

pygame贪吃蛇游戏

pygame贪吃蛇游戏 贪吃蛇游戏通过enter键启动&#xff0c;贪吃蛇通过WSAD进行上下左右移动&#xff0c;每次在游戏区域中随机生成一个食物&#xff0c;每次吃完食物后&#xff0c;蛇变长并且获得积分&#xff1b;按空格键暂停。 贪吃蛇 import random, sys, time, pygame from …

SQL 表别名 和 列别名

列表名 列表名之后 order by 可以用别名 也可以用原名&#xff0c; where 中不能用别名的 SQL语句执行顺序&#xff1a; from–>where–>group by -->having — >select --> order 第一步&#xff1a;from语句&#xff0c;选择要操作的表。 第二步&#xff1…

SolidWorks 3D Interconnect介绍

目前市面上有的三维设计软件有很多&#xff0c;如UG、Pro/E、CATIA等&#xff0c;而且每个三维设计软件都会生成自己文件格式。由于产品设计的原因&#xff0c;我们避免不了的会需要去使用不同三维设计软件的文件&#xff0c;这对于工程师来说其实是一件比较麻烦的事。 为什么…

性能测试JMeter学习笔记(脚本增强和命令行操作)

HTTP的Cookie管理器 在根节点下&#xff0c;添加“HTTP Cookie管理器”&#xff08;注意是根节点&#xff09; Cookie管理器作用&#xff1a;只要响应里有Cookie&#xff0c;就自动存进Cookie管理器&#xff0c;而后在后续的请求中&#xff0c;自动携带cookie JMeter脚本增强…

奥威BI系统:零编程建模、开发报表,提升决策速度

奥威BI是一款非常实用的、易用、高效的商业智能工具&#xff0c;可以帮助企业快速获取数据、分析数据、展示数据。值得特别注意的一点是奥威BI系统支持零编程建模、开发报表&#xff0c;是一款人人都能用的大数据分析系统&#xff0c;有助于全面提升企业的数据分析挖掘效率&…

教资学习笔记总结

科目一 科目二 第一章 教育基础知识和基本原理 第一节 教育的认识 1.教育的概念 教育的词源&#xff1a;教育一词最早出现于《孟子尽心上》&#xff1a;“得天下英才而教育之”许慎在《说文解字》中最早解释教育&#xff1a;“教&#xff0c;上所施&#xff0c;下所效也”…

DNS部署与安全详解(上)

文章目录 一、DNS二、域名组成1. 域名组成概述2. 域名组成 三、监听端口四、DNS解析种类1. 按照查询方式分类&#xff1a;2. 按照查询内容分类&#xff1a; 五、DNS服务器搭建过程1. 先确保服务器的IP地址是固定的2. 安装DNS软件 一、DNS DNS全称Domain Name Service&#xff0…

组合总和——力扣39

文章目录 题目描述回溯题目描述 回溯 class Solution {public:vector<vector<

Qt--动态链接库的创建和使用

写在前面 在Qt的实际开发中&#xff0c;免不了使用和创建动态链接库&#xff0c;因此熟悉Qt中动态链接库的创建和使用对后续的库开发或使用是非常用必要的。 在之前的文章https://blog.csdn.net/SNAKEpc12138/article/details/126189926?spm1001.2014.3001.5501中已经对导入…