Docker基础知识总结

文章目录

  • 1.Docker介绍
  • 2.Docker版本
  • 3.为什么要使用Docker
  • 4.Docker基础组件
    • 4.1 镜像(Images)
    • 4.2 容器(Container)和仓库(Repository)
  • 5.Docker安装
  • 6.Docker run
  • 7.Dockerfile
  • 8.Docker commit
  • 9.镜像发布到镜像仓库
  • 10.Docker常用命令
    • 10.1 Docker run常用参数
  • 11.传参
    • 11.1 Python
    • 11.2 SpringBoot
  • 12.容器网络:bridge
  • 13.容器网络:host
  • 14.Docker-compose

1.Docker介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言开发,遵从Apache2.0开源协议,依赖Linux内核的Cgroup和Namespace等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
目标:Build once,Run anywhere(一次封装,到处运行)
在这里插入图片描述

2.Docker版本

2017年的3月1号:Docker-CE(Docker社区版-免费)、Docker-EE(Docker企业版-付费),转向基于时间的 YY.MM 形式的版本控制方案
Docker CE有两种版本:
edge版本每月发布一次,主要面向那些喜欢尝试新功能的用户
stable版本每季度发布一次,适用于希望更加容易维护的用户(稳定版)
edge版本只能在当前月份获得安全和错误修复。而stable版本在初始发布后四个月内接收关键错误修复和安全问题的修补程序。这样,Docker CE用户就有一个月的窗口期来切换版本到更新的版本。举个例子,Docker CE 17.03会维护到17年07月;而Docker CE 17.03的下个稳定版本是CE 17.06,这样,6-7月这个时间窗口,用户就可以用来切换版本了。
Docker EE和stable版本的版本号保持一致,每个Docker EE版本都享受为期一年的支持与维护期,在此期间接受安全与关键修正。
总结:
Docker从17.03开始分为企业版与社区版,社区版并非阉割版,而是改了个名称;企业版则提供了一些收费的高级特性。
EE版本维护期1年;CE的stable版本三个月发布一次,维护期四个月;另外CE还有edge版,一个月发布一次。
在这里插入图片描述

3.为什么要使用Docker

Docker 跟传统的虚拟化方式相比具有众多优势:
更高效的利用系统资源:容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,对系统资源的利用率更高;

  1. 更快速的启动时间:容器应用直接运行于宿主机内核,无需启动完整的操作系统,可以做到秒级、甚至毫秒级启动时间;
  2. 一致的运行环境:镜像提供了完整的运行时环境,确保开发、测试、生产等运行环境一致性;
  3. 持续交付和部署:通过Dockerfile构建镜像,可以结合持续继承、持续交付、持续部署;
  4. 更轻松的迁移:Docker镜像确保运行环境一致性,使得服务迁移更加容易;
  5. 更轻松的维护和扩展:Docker使用分层镜像技术使得重复部分复用更为容易,维护更新、基于镜像继续扩展也变得简单;
对比项容器虚拟机
隔离性较弱的隔离强隔离
启动秒级分钟级
镜像大小一般为 MB一般为 GB
运行性能(裸机对比)接近原生(损耗小于2%)弱于(损耗15%左右)
镜像可移植性平台无关平台相关
密度单机上支持100~1000个单机上支持10~100个
安全性1.容器内的用户从普通用户权限升级为root权限,就直接具备了宿主机的root权限2.容器中没有硬件隔离,这使得容器容易收到攻击1.虚拟机租户root权限和主机的root虚拟机权限是分离的2.硬件隔离技术:防止虚拟机突破和彼此交互

4.Docker基础组件

镜像(Images): Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker容器,一个镜像可以创建很多容器。它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统。docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
容器(Container): 从面向对象角度Docker 利用容器(Container)独立运行一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
从镜像容器角度容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
仓库(Repository): 是集中存放镜像文件的场所。 类似于Maven仓库,存放各种jar包的地方;github仓库,存放各种项目代码的地方;Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
在这里插入图片描述

4.1 镜像(Images)

Docker镜像在服务器存储和运行时,作为Linux的一个文件系统
Docker镜像默认使用Overlay2文件系统(还支持AUFS、Btrfs、Device mapper、OverlayFS、ZFS等联合文件系统),具有以下特点:
分层(Layer): 一个镜像可以多个中间层组成,多个镜像可以共享同一中间层,也可以通过在镜像添加多一层来生成一个新的镜像(一个平台多个组件如果使用相同的基础镜像,可以大大减少存储空间占用量并提高镜像拉取效率)
只读(read-only): 镜像在构建完成之后,便不可以再修改
写时复制: docker 镜像使用了写时复制(copy-on-write)的策略,多个同镜像的容器之间共享镜像只读层,容器内文件发生变化时,把变化的文件内容复制到可读写层,大大减少了多容器下对磁盘空间的占用
在这里插入图片描述

4.2 容器(Container)和仓库(Repository)

**容器(Container):**一种特殊的被隔离的进程

  1. Docker封装LXC技术实现容器管理(从 0.9 版本开始使用 libcontainer 替代了LXC)
  2. 当Docker通过镜像创建一个容器时,就是将镜像定义好的用户空间作为独立隔离的进程运行在宿主机的Linux内核之上。
  3. 基于Namespace和Cgroups技术实现容器进程间隔离
    a. Namespace:实现资源隔离,包括进程、网络、挂载点等
    b. Cgroups :用来限制容器使用的资源配额,包括CPU、内存、磁盘等

仓库(Repository): 是集中存放镜像文件的场所

  1. 支持镜像拉取、存储、推送等服务
  2. 公共仓库:一般是指Docker Hub
  3. 私有仓库 :Docker官方提供了registry这个镜像,可以用于搭建私有仓库服务,产品比如Harbor

在这里插入图片描述

5.Docker安装

1.卸载旧版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
2.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置yum源(推荐使用国内的 )
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
# 更新yum软件包索引
yum makecache fast
4.查询repo包含的Docker版本
yum list docker-ce --showduplicates | sort –r
5. 安装最新版本(不指定版本,默认安装最新的版本)
yum install docker-ce docker-ce-cli containerd.io
# 或者指定版本安装
yum install docker-ce-18.06.3.ce docker-ce-cli-18.06.3.ce containerd.io
6.设置阿里云镜像加速(选择)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF’
{"registry-mirrors": ["https://*******.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker# 测试
docker version
docker run hello-world# 卸载:
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

6.Docker run

docker run hello-world

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

7.Dockerfile

Dockerfile编写要求:

  1. Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,或同级父目录的子目录
  2. Dockerfile中相对路径默认都是Dockerfile所在的目录
  3. Dockerfile中一定要惜字如金,能写到一行的指令,一定要写到一行,原因是分层构建,联合挂载这个特性
  4. Dockerfile中每一条指令被视为一层
  5. Dockerfile中指明大写(约定俗成)

在这里插入图片描述
在这里插入图片描述
docker build -f dockerfile_xxx -t image_name:image_tag –no-cache .
-f, --file:指定 Dockerfile 路径
-t, --tag:指定构建的镜像名和 tag
–no-cache:构建镜像时不使用缓存
.:表示当前目录,即 Dockerfile 所在目录

8.Docker commit

Docker commit 提交容器副本使之成为一个新的镜像:
语法:docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
例如:
docker run -itd --name test1 test1:5.8 /bin/bash # 查看容器ID: a404c6c174a2
docker exec -it test1 /bin/bash
yum install nginx -y
docker commit a404c6c174a2 test2:5.9
Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。新镜像是从 base 镜像一层一层叠加生成的,每安装一个软件,就在现有镜像的基础上增加一层
在这里插入图片描述
在这里插入图片描述

9.镜像发布到镜像仓库

官方Docker Hub地址:https://hub.docker.com/ 、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。
1.配置daemon.json,重启docker
{
“registry-mirrors”:[“https://3laho3y3.mirror.aliyuncs.com”],
“insecure-registries”:[“192.168.40.20:8090"]
}
2.登录Harbor,需要输入用户名和密码
[root@manager ~]# docker login 192.168.40.20:8090
3.对镜像打tag
docker tag nginx 192.168.40.20:8090/nginx/nginx:v1.14.1
4.推送镜像到仓库
docker push 192.168.40.20:8090/nginx/nginx:v1.14.1
在这里插入图片描述

10.Docker常用命令

在这里插入图片描述

10.1 Docker run常用参数

在这里插入图片描述

11.传参

11.1 Python

docker run –itd test1:5.8 python3 test.py test
docker run –itd test2:5.8 python3 test.py --cluster-version=333 –image=555 test –dashboard-user=admin –dashboard-password=123456

11.2 SpringBoot

SpringBoot项目在启动项目时传递参数
方式1:java -Dxxx=xx zzz=zzz xxx.jar
方式2:java xxx.jar --xxx=xxx --zzz=zzz

编写Dockerfile
FROM java:8
MAINTAINER zc
ADD testDocker-1.0-SNAPSHOT.jar /testDocker-1.0-SNAPSHOT.jar
ENTRYPOINT [“sh”,“-c”,“java ${JAVA_OPTS} -jar /testDocker-1.0-SNAPSHOT.jar ${JAVA_OPTS2}”]

运行
docker run
-e “JAVA_OPTS2=–test=11111112222”
-e “JAVA_OPTS=-Dtest2=qqqqqq”
–name qqq -p 7777:9999 -d testdocker:v1

12.容器网络:bridge

在这里插入图片描述

13.容器网络:host

在这里插入图片描述

14.Docker-compose

Docker-Compose是Docker官方的开源项目,可以管理多个 Docker 容器组成一个应用,
负责实现对Docker容器集群的快速编排
需要定义一个 YAML 格式的配置文件 docker-compose.yml,写好多个容器之间的调用关系。
然后,只要一个命令,就能同时启动/关闭这些容器
Docker-Compose 解决了容器与容器之间如何管理编排的问题。# 安装
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose –version# 核心
一文件:docker-compose.yaml
两要素:
服务(Service):一个个应用容器实例,比如mysql容器、nginx容器或者redis容器
工程(Project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。# 三步骤
编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务
最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

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

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

相关文章

肖sir__linux讲解vim命令(3.1)

vim 命令 一、 vi/vim 编辑器共分为三种模式&#xff1a; 格式 &#xff1a;vim 文件名 命令模式&#xff08;Command mode&#xff09;&#xff0c;“ESC”或ctrlc键 输入模式&#xff08;Insert mode&#xff09; 底线命令模式&#xff08;Last line mode&#xff09; …

亚马逊运营一定要用动/静态住宅IP代理吗?

作为全球最大的电商平台之一&#xff0c;亚马逊已经成为许多商家的首选销售平台。而代理IP作为近几天互联网的热门工具&#xff0c;在跨境电商界也起着非常强大的作用。那么在亚马逊运营中&#xff0c;适合动态住宅代理还是静态住宅代理呢&#xff1f;下面我们一起来探索&#…

猫罐头牌子哪个好一点?精选5款口碑好的猫罐头推荐!

猫罐头牌子哪个好一点&#xff1f;选择猫罐头是十分重要的事情&#xff0c;千万不能将就。因为&#xff0c;好的猫罐头不仅可以营养丰富&#xff0c;水分充足&#xff0c;适口性好&#xff0c;还能易吸收。而一旦选择错误&#xff0c;不仅无法达到上述效果&#xff0c;还可能产…

代码随想录算法训练营第28天|93.复原IP地址 78.子集 90.子集II

JAVA代码编写 93 .复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&…

申银万国期货通过ZStack Cube信创超融合一体机打造金融信创平台

信创是数字中国建设的重要组成部分&#xff0c;也是数字经济发展的关键推动力量。作为云基础软件企业&#xff0c;云轴科技ZStack产品矩阵全面覆盖数据中心云基础设施&#xff0c;ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级&#xff0c;是其中唯一兼容四种…

基于单片机仓库温湿度监测报警系统仿真设计

**单片机设计介绍&#xff0c;基于单片机仓库温湿度监测报警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的仓库温湿度监测报警系统可以被设计成能够实时监测仓库内的温度和湿度&#xff0c;并根据预设…

ssm青少年航天知识科普网站-计算机毕设 附源码59487

青少年航天知识科普网站 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&am…

嵌入式Linux学习(1)——经典CAN介绍(上)

目录 一. CAN与ISO-OSI Model 二. CAN通信 2.1 接线方式 2.1.1 闭环网络 2.1.2 开环网络 2.2 收发流程 2.2.1 发送 2.2.2 接收 三. CAN BUS访问与仲裁 3.1 “线与”机制​ 3.2 仲裁机制 REF CAN&#xff08;Controller Area Network&#xff09;总线协议是由 BOSC…

路线规划问题

文章目录 1、问题描述2、节点类设置3、设置节点之间的关系4、路线规划5、完整类6、结果7、优化 1、问题描述 如下图&#xff0c;存在A~F六个地点&#xff0c;已知所有地点的相关关系&#xff08;每个地点能到达的下一节点名称以及对应的路程&#xff09;&#xff1b; 计算某个…

OpenStack-train版安装之环境准备

环境准备 环境介绍VMware配置WMware虚拟机最低配置WMware添加网卡WMware添加硬盘 基础环境安装修改各节点的主机名修改各节点的hosts文件修改各节点的内核参数关闭各节点的防火墙和selinux安装NPT&#xff08;时间同步&#xff09;安装OpenStack基础服务包 CentOS升级内核 环境…

手把手设计C语言版循环队列(力扣622:设计循环队列)

文章目录 前言描述分析力扣AC代码 力扣&#xff1a; 622.设计循环队列 前言 队列会出现“假溢出”现象&#xff0c;即队列的空间有限&#xff0c;队列是在头和尾进行操作的&#xff0c;当元素个数已经达到最大个数时&#xff0c;队尾已经在空间的最后面了&#xff0c;但是对头…

枚举 小蓝的漆房

题目 思路 核心思想是枚举 首先利用set记录每一种颜色 然后依次从set取出一种颜色作为targetColor&#xff0c;遍历房子 如果当前房子的颜色和targetColor不相同&#xff0c;就以当前房子为起点&#xff0c;往后长度为k的区间都涂成targetColor&#xff0c;并且需要的天数递增…

【云原生-Kurbernetes篇】HPA 与 Rancher管理工具

文章目录 一、Pod的自动伸缩1.1 HPA1.1.1 简介1.1.2 HPA的实现原理1.1.3 相关命令 1.2 VPA1.2.1 简介1.2.2 VPA的组件1.2.3 VPA工作原理 1.3 metrics-server简介 二、 HPA的部署与测试2.1 部署metrics-serverStep1 编写metrics-server的配置清单文件Step2 部署Step3 测试kubect…

Flink Operator 使用指南 之 Flink Operator安装

介绍 Flink Kubernetes Operator 充当控制平面来管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的Native Kubernetes 集成已经允许用户在运行的 Kubernetes(k8s) 集群上直接部署 Flink 应用程序,但自定义资源和Operator Pattern 也已成为 Kubernetes 原生部署体…

Mrakdown Nice:格式

标题 缩进 删除线 斜体 加粗

动手学深度学习(三)---Softmax回归

文章目录 一、理论知识 softmax回归 一、理论知识 回归估计一个连续值分类预测一个离散类别 回归单连续数值输出自然区间R跟真实值的区别作为损失 分类通常多个输出输出i是预测为第i类的置信度 一般我们使用交叉熵用来衡量两个概率的区别 将它作为损失 其梯度是真实概率和…

同一台电脑访问gitee多个仓库代码

在开发上我们经常遇到&#xff0c;需要跟别人共享代码&#xff0c;特别是跟有些客户联合开发的情况下&#xff0c;有很多个客户。有些git仓库是客户建立的&#xff0c;比如有两个客户A和分布建了gitA和gitB两个代码仓库。我们在支持这两个客户的时候可能是同一个工程师&#xf…

【机器学习】033_反向传播

一、计算图、反向传播原理 1. 回顾前向传播 例&#xff1a;假设现在有一个神经网络&#xff0c;其仅有一个输出层和一个神经单元 定义 定义 &#xff0c;即激活函数对激活值不再做具体处理 定义平方损失函数 &#xff0c;计算a的值与真实值的差距 此时&#xff0c;通过计算…

2023年亚太杯数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 最短时…

LeetCode算法题解(动态规划)|LeetCoed62. 不同路径、LeetCode63. 不同路径 II

一、LeetCoed62. 不同路径 题目链接&#xff1a;62. 不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下…