资讯详情

Docker大纲

**Docker **

  • Docker 概述

  • Docker 安装

  • Docker 命令

    --容器命令

    --镜像命令

    --操作命令

  • Docker 操作

  • Docker 容器数据卷

  • DockerFile

  • Docker 网络原理

  • Idea整合Docker

  • Docker Compose

  • Docker集群 --Swarm || Kuberneters

  • CI/CD jenkins

Docker 概述

产品-开发-运维

开发环境|生产环境 两套 应用环境,应用配置

本地可以操作程序 无法在线运行!版本更新后! 莫名其妙不能用!

环境配置很麻烦 该程序无法包装环境 同时在宿主机上运行多程序可能会导致端口冲突

遇到大型架构程序 环境配置特别麻烦 程序可以跨平台,环境不好!

传统模式:开发 -运维

现在:Devops CI/CD

美国成立于2010年dotCloud公司 目的做Pass型云计算服务!LXC与容器技术相关的虚拟机。他们定义了统一命名的技术 docker 。

docker刚出生的时候 ,没有引起业界的关注,生死关头 dotcloud将docker进行开源.

2013年 宣布docker开源!

越来越多的人的人发现了docker优点 起飞!

技术社区越来越大,每月更新一个版本! 至此docker全面宣布进入下一个时代!

虚拟化技术

  • 虚拟机:vm 庞大笨重 程序更新的最小单位也是分钟级

  • docker:轻量化 沙箱级

vm:linux centos原生镜像 docker:images 内核环境 只能提供内核运行的基本环境 阉割版 使用操作镜像 
  • Docker官网:https://www.docker.com/
  • 文档:https://docs.docker.com/

虚拟机技术 

  • 资源占用高
  • 冗余步骤多
  • 启动慢
容器化技术 

虚拟机系统不完整 阉割版 保留核心内容

  • 传统虚拟机模拟硬件,运行完整的操作系统 ,然后在此基础上安装和操作软件
  • 共享内核应用于容器中 资源 ,容器本身没有内核和内核ip,容器件自然隔离,各有自己的文件系统,互不影响

Devops(开发、运维)

--传统:一堆文件 照打照敲

--Docker : 一站式包装发布

--Images:Tag Update即可

--项目包装扩建 节点ABC拉取Run即可

--容器化后,开发和测试环境高度一致

--docker 内核级虚拟化,在同一台虚拟机上运行多个例子!将服务器性能压缩到极致

卸载旧版本 Linux

 sudo yum remove docker \                   docker-client \                   docker-client-latest \                   docker-common \                   docker-latest \                   docker-latest-logrotate \                   docker-logrotate \                   docker-engine 

环境准备

  • Win https://www.docker.com/products/docker-desktop Docker 桌面版 WSL2基于win的linux内核

  • Linux

    Docker -ce 社区版 -ee企业版

 $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo $ yum -y install docker-ce-18.06.1.ce-3.el7 $ systemctl enable docker && systemctl start docker $ docker --version 

设置镜像仓库

 sudo yum-config-manager \     --add-repo \     https://download.docker.com/linux/centos/docker-ce.repo 

Docker-Desktop镜像仓库配置

Docker Engine下 registry-mirrors:"https://registry.docker-cn.com" 逗号可以分开 

  1. 镜像 images

  2. 容器 container

  3. 仓储 Registry

  4. 客户端 Docker -client

  5. 守护进程 Docker Daemon

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCtDaOpe-1645761685492)(D:\桌面\iamges\docker.webp)]

  • Run流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APytLuzO-1645761685495)(C:\Users\LCY\AppData\Roaming\Typora\typora-user-images\image-20210923235402519.png)]

run命令发起->判断本地是否存在镜像->存在 run | | 不存在 ->远程下载到本地->run

  • 底层原理

docker 是一个client-server结构的系统 ,client发其请求后,server依据其命令执行 ,双方通过socket进行连接,docker的守护进程运行在宿主机上,由hosts守护进程进行监管

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nc4q7f3Q-1645761685496)(C:\Users\LCY\AppData\Roaming\Typora\typora-user-images\image-20210924000919410.png)]

  • Docker 为什么比虚拟机快?

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cmCh8YfA-1645761685498)(D:\桌面\iamges\src=http___img-blog.csdnimg.cn_img_convert_91868a37481f41dbc2b53a2303ce8fff.png&refer=http___img-blog.csdnimg.jpg)]

    1. 资源共享
    2. 资源隔离
    3. 秒级启动
    4. 网络隔离
    5. 弹性伸缩
    6. 硬件级分布式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhvllB6T-1645761685499)(D:\桌面\iamges\u=3428228214,452175879&fm=26&fmt=auto.webp)]

Docker网络模式 配置 说明
host模式 –net=host 容器和宿主机共享Network namespace。
container模式 –net=container:NAME_or_ID 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。
none模式 –net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
bridge模式 –net=bridge (默认为该模式)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZpdUHoN-1645761685501)(D:\桌面\iamges\src=http___img.meiyoubug.com_blog_697113_201609_697113-20160921211323293-119309106.jpg&refer=http___img.meiyoubug.jpg)]

  • host模式 共享主机网络 容器没有自己的IP
  • container模式 指定与某个容器进行网络共享 也没有自己的IP 网卡 而是选择与指定的容器进行网卡,端口范围的共享
  • none模式 啥都没有
  • bridge模式 默认且最常见的模式 桥接网络模式 将容器端口映射进宿主机网卡 并写进iptables规则里 目前咱们纯docker环境运行的容器为此模式 较安全,省事; 缺点 牺牲网络性能

docker -v  #版本信息
docker info  #基本信息
docker -help #帮助 

帮助文档地址:https://docs.docker.com/engine/reference

docker images #查看本地所有镜像

REPOSITORY          TAG             IMAGE ID       CREATED        SIZE
docker/desktop-kubernetes   kubernetes-v1.21.2-cni-v0.8.5-critools-v1.17.0-debian   a502c6d66bd7   3 months ago   299MB

# REPOSITORY 镜像名称
# TAG 镜像标签
# IMAGE ID 镜像ID
# CREATED 镜像创建时间
# SIZE 镜像大小

#可选项
Options:
  -a  :显示所有镜像信息;
  -f  :显示满足条件的镜像;
    --format :指定返回值的模板文件;
    --no-trunc :显示完整的镜像信息;
  -q  :只显示镜像ID。
  
docker rmi 镜像Id #删除镜像

docker pull 镜像名称:Tag #拉取镜像
#如果不写Tag 默认拉取Latest版本 建议每次拉取加上Tag养成好习惯
docker push 镜像名称:Tag #推送镜像
#镜像名称为仓储地址/命名空间 如果docker识别到这个地址 则会开始推送 否则报错 例如我们的阿里云仓储
#规则为 仓储地址/命名空间/镜像名称:Tag 注意推送时权限问题 默认情况下 安装docker后登录一次仓储即可 若中中途卸载,则需要重新登录

docket Tag 当前镜像名称:tag  更改后镜像名称:Tag  #更改镜像名称

docker build [OPTIONS] PATH | URL | - #build为关键命令 提供n多option可选参数 重点!!!
#可选项 关键内容联合dockerfile中会有讲解
#--build-arg=[] :设置镜像创建时的变量;
#--cpu-shares :设置 cpu 使用权重;
#--cpu-period :限制 CPU CFS周期;
#--cpu-quota :限制 CPU CFS配额;
#--cpuset-cpus :指定使用的CPU id;
#--cpuset-mems :指定使用的内存 id;
#--disable-content-trust :忽略校验,默认开启;
#-f :指定要使用的Dockerfile路径;
#--force-rm :设置镜像过程中删除中间容器;
#--isolation :使用容器隔离技术;
#--label=[] :设置镜像使用的元数据;
#-m :设置内存最大值;
#--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
#--no-cache :创建镜像的过程不使用缓存;
#--pull :尝试去更新镜像的新版本;
#--quiet, -q :安静模式,成功后只输出镜像 ID;
#--rm :设置镜像成功后删除中间容器;
#--shm-size :设置/dev/shm的大小,默认值是64M;
#--ulimit :Ulimit配置。
#--squash :将 Dockerfile 中所有的操作压缩为一层。
#--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
#--network: 默认 default。在构建期间设置RUN指令的网络模式

#例子 docker build -t 镜像名称:v1 . 
# docker build -f /path/to/a/Dockerfile 镜像名称:v1 .

docker run 镜像Id #运行一个镜像实例
#可选项
# -d 后台运行
# --name= 定义容器名称
# -p 以映射的方式将容器端口映射到宿主机上
# -i: 交互式操作
# -t: 终端
# 进入容器终端后 ctrl+D退出
# -e 添加环境变量
# -v 数据持久化 规则为 -v 指定路径:容器路径
# --rm:容器退出时自动清理容器内部的文件系统
# -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts
docker ps #获取当前所有运行中的容器
# -l 最后一次创建的容器
# -a 获取所有容器
docker -it 容器id/名称 bash	  #进入此容器
docker start 容器Id/name     #运行指定容器
docker stop  容器Id/name     #停止指定容器
docke人 restart 容器Id/name  #重启指定容器
docker rm 容器Id/name        #删除指定容器
docker kill 容器Id/name      #立即杀死该容器并抛弃该进程
# 删除所有docker容器
docker rm  $(docker container ls -a -q) 
# 删除所有docker镜像
docker rmi  $(docker image ls -a -q)
#注意删除时候容器必须为stop状态 可选择的操作在删除前stop /kill


docker run -d --name=test -p 1000:80 镜像Id/name #以后台方式运行镜像 网络模式为桥接 本地1000桥接到容器内80端口 容器名称为test
docker network create -d bridge test-net #新建容器网络 
# -d:参数指定 Docker 网络类型,有 bridge、overlay
docker run -itd --name test1 --network test-net 镜像Id/name #指定刚才新建的容器网络
docker run -d --net=host 镜像Id/name #host模式运行
docker run -d --net=none  镜像Id/name #none模式运行
docker run -d --net=bridge   镜像Id/name #bridge 可以不设定 默认模式下为此设置 在不填写--net参数情况下
docker run -d --net=镜像Id/name  镜像Id/name #container模式运行

仓库 顾名思义存储docker镜像的仓库

例如 本地的images输出 为本地仓库

测试环境咱们在使用的阿里云云仓库 天翼云仓储 华为云仓储 官方dockerhub 仓库等等 所有在云环境可以被获取到的镜像实例都可以称之为仓储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nq3kTYj5-1645761685503)(C:\Users\LCY\AppData\Roaming\Typora\typora-user-images\image-20210924014153448.png)]

典型情况为上述图

Dockerfile是什么?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

是一个清单文件 ,类似与go语言的mod ,c#的csproj ,k8s的yaml

构建一个镜像的原型模板!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2N3tcBaX-1645761685505)(D:\桌面\iamges\src=http___img2020.cnblogs.com_blog_821814_202101_821814-20210109102912082-1978951306.png&refer=http___img2020.cnblogs.jpg)]

  • Form :全文关键 指定依赖基础镜像 例如webapi dockerfile中form的.net5运行时环境 也可以form一个外来镜像或者本地镜像 总之这个镜像是你本清单文件的底层依赖

  • Run :可以指定运行一个powershell 命令或者linux命令 这条指令只在本次构建途中有效

  • Add :可以将本地文件或者远程文件在构建途中copy到镜像内

  • Copy:真正意义上的copy

  • User 指定启动的用户

  • ENTRYPOINT: 启动命令 格式可为 谁在什么下启动了什么 详见dockerfile参考讲解

  • cmd :cmd为上条参数提供默认的环境变量

  • env: 指定环境变量 业务程序脚本里存在 可参照

  • Arg: 外部变量 可以传入

  • Expose :指定容器端口

  • Lable:定于元数据 key:value 形式

  • Workdir :先决条件 指定当下所有操作下的资源归属路径

    详见业务程序根路径Docker文件夹下文件 及build.sh 帮助理解

为什么要使用容器编排? 解决什么问题?

指定运行一个powershell 命令或者linux命令 这条指令只在本次构建途中有效

  • Add :可以将本地文件或者远程文件在构建途中copy到镜像内

  • Copy:真正意义上的copy

  • User 指定启动的用户

  • ENTRYPOINT: 启动命令 格式可为 谁在什么下启动了什么 详见dockerfile参考讲解

  • cmd :cmd为上条参数提供默认的环境变量

  • env: 指定环境变量 业务程序脚本里存在 可参照

  • Arg: 外部变量 可以传入

  • Expose :指定容器端口

  • Lable:定于元数据 key:value 形式

  • Workdir :先决条件 指定当下所有操作下的资源归属路径

    详见业务程序根路径Docker文件夹下文件 及build.sh 帮助理解

为什么要使用容器编排? 解决什么问题?

标签: sp2841a502角度传感器a502高精度电位计角度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台