01、Docker入门

news2025/1/20 13:30:58

目录

1、Docker是什么

2、Docker与虚拟化

3、Docker虚拟化的好处

好处一:应用部署方便

好处二:服务器同等配置,性能更优,利用率更高

4、核心概念

 5、CentOS7 安装docker(在线方式)

6、镜像

7、Docker容器

8、查看Docker容器内部信息

8.1 进入容器内部获取信息

8.2 在宿主机,执行docker exec命令

8.3 在宿主机,使用docker inspect命令


前置条件:需要掌握Linux及常用命令!!!下面是Docker思维导图

 

1、Docker是什么

Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs),它是完整的一套容器管理系统 
Docker提供了一组命令,让用户更加方便直接地使用容器技术,而无需要过多关心底层内核技术

注1:什么是容器
        一个容器就相当于一个虚拟机

注2:docker用途,目前有三大类
        1.提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
        2.提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容
        3.组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构

 

2、Docker与虚拟化

传统来看,虚拟化既可以通过硬件模拟来实现,也可以通过操作系统软件来实现 而容器技术则更为优雅,
它充分利用了操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化 因此,有人甚至把它称为
“新一代的虚拟化”技术,并将基于容器打造的云平台亲切地称为“容器云”毫无疑问, 
   Docker 正是众多容器技术中的佼佼者,是容器技术发展过程中耀眼的一抹亮色

 

:Docker和一个正常的虚拟机有何区别?
        当前,Docker内部使用的是Linux容器技术(LXC),这是运行在与它的宿主机器同样的操作系统上。
        这准许它可以和宿主机器共享许多系统资源。它也会使用AuFS作为文件系统,也为你管理网络。

3、Docker虚拟化的好处

好处一:应用部署方便

举个简单的例子,假设用户试图基于最常见的 LAMP (Linux+Apache+MySQL+PHP )组
合来构建网站 按照传统的做法,首先需要安装 Apache MySQL PHP 以及它们各自运行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追踪,意味着更多的时间代价和不可控的风险 可以想象,如果应用数目变多,事情会变得更加难以处理更为可怕的是, 旦需要服务器迁移(例如从阿里云迁移到腾讯云),往往需要对每个应用都进行重新部署和调试 这些琐碎而无趣的“体力活”,极大地降低了用户的工作效率究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致Docker 提供了一种更为聪明的方式,通过容器来打包应用、解藕应用和运行平台,这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台 这无疑将帮助我们节约大量的宝贵时间,并降低部署过程出现问题的风险 

好处二:服务器同等配置,性能更优,利用率更高

让我们假设你有一个容器镜像(image)容量是1GB,如果你想用一个完整的虚拟机来装载,你得需要容量的大小是1GB乘上你需要虚拟机的数量。但使用Linux容器虚拟化技术(LXC)和AuFS,你可以共享1GB容量,如果你需要1000个容器,假设他们都运行在同样的系统影像上,你仍然可以用稍微比1GB多一点的空间来给容器系统因此,借助经过全面调优的容器系统,你就可以在同一硬件上拥有数量比使用Xen虚拟机或KVM虚拟机多出四到六倍的服务器应用实例。

实际案例:以springcloud微服务为例
             7个服务-7台linux服务器
             7个服务-1台linux服务器-docker-7个镜像

4、核心概念

Docker大部分的操作都围绕着它的三大核心概念: 镜像、容器和仓库(本章只用到镜像/容器,仓库在后面介绍)

注册服务器 -> 仓库(CentOS/RedHat) -> 镜像 -> 容器(一台虚拟机)

4.1.镜像

Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板
例如,一个镜像可以包含一个基本的操作系统环境(例如:CentOS7),可以把它称为一个 CentOS7 镜像

4.2.容器

1.Docker 容器类似于一个轻量级的沙箱, Docker利用容器来运行和隔离应用  
2.容器是从镜像创建的应用运行实例 它可以启动、开始、停止 删除,而这些容器都是彼此相互隔离、互不可见的
3.可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子

4.3.仓库

Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。

 注1:Docker 仓库和仓库注册服务器( Registry)的区别
          分际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库 每个仓库集中存放某一类镜像,
          例如存放 CentOS 操作系统镜像的仓库,其中可能了很多不同版本的镜像,它则被称CentOS仓库

 5、CentOS7 安装docker(在线方式)

:Docker支持运行CentOS版本:CentOS 7.X

CentOS的安装我也发了资源包

5.1.内核版本信息检查

 $ uname -r

5.2 卸载可能存在的旧版本

   $ yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

注:旧版本的docker叫做docker或者docker-engine,如果有安装,先卸载其以及其依赖,新版本的docker叫做docker-ce

   docker-ce(社区版,免费)
   docker-ee(专业版,收费)

5.3 安装必要的系统工具

 $ yum install -y yum-utils device-mapper-persistent-data lvm2

注:安装依赖软件(yum-utils提供yum-config-manager包,用来管理yum配置文件;lv2和device-mapper-persistent-data为dockerdevicemapper存储设备的必须依赖)

5.4 添加docker-ce安装源

$ yum-config-manager --add-repo 

https://download.docker.com/linux/centos/docker-ce.repo

默认开启的是stable稳定版仓库,如果想要安装test测试版或者是边缘版本可使用如下命令开启相关模式,关闭的话只需要将--enable参数换成--disable(可选)

$ yum-config-manager --enable docker-ce-edge
$ yum-config-manager --enable docker-ce-test

5.5 更新yum缓存

$ yum makecache fast

5.6 安装docker-CE

$ yum -y install docker-ce

注:
   1)默认安装的是最新版本的稳定版
   2)查看版本列表请使用如下命令:
   
   $ yum list docker-ce --showduplicates | sort -r

   3)如果要安装特定版本的docker-CE请使用如下命令格式:
  
   $ yum install docker-ce-<VERSION STRING>

5.7 验证

     5.7.1 查看docker服务是否启动

     $ systemctl status docker   //查看运行状态

     5.7.2 启停服务

     $ systemctl start docker    //启动
     $ systemctl stop docker     //停止
     $ systemclt restart docker  //重启

     5.7.2 运行第一个容器(经典的hello world)

     $ docker run hello-world

     输入以上命令后,窗口有输出,表示docker安装成功

注:查看docker的版本,第二个命令是详细查看
         docker --version 或 docker info

6、镜像

Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,使用自定义的镜像仓库

6.1 配置加速器
     国内从Docker Hub下载镜像速度很慢,我们可以配置阿里云专属加速器来解决

    6.1.1 浏览器访问并登陆阿里云(淘宝或支付宝帐号登陆也可以)
       https://www.aliyun.com/
   
     6.1.2 登陆后,进入阿里云“控制台”,搜索“容器镜像服务”,然后点击菜单:“镜像中心”-->“镜像加速器”最后,将容器右边的“加速器地址”复制下来即可
       https://7tamylwv.mirror.aliyuncs.com(这里是我的加速器地址)

     6.1.3 设置容器镜像服务的密码(可选)
       容器镜像服务(Container Registry)提供多地域镜像托管能力,稳定的国内外镜像构建服务,便捷的镜像授权功能,方便用户进行镜像全生命周期管理。在开通流程中,您需要设置独立于账号密码的Registry登录密码,便于镜像的上传、下载。
       注1:此步骤为可选,如果需要使用阿里云来管理你的镜像 ,此步骤必须设置

     6.1.4 修改docker相关配置
       $ mkdir -p /etc/docker
       添加下面内容(地址替换成上面的加速器地址):
       $ tee /etc/docker/daemon.json <<-'EOF'
       {
           "registry-mirrors": ["我的阿里云专属加速器地址"]
       }
       EOF
       注:在这里可以先将registry-mirrors换成自己的阿里云专属加速器地址后,在复制到工具里面去执行(方便)

     6.1.5 重新加载daemon
       $ systemctl daemon-reload

     6.1.6 重启docker
       $ systemctl restart docker 

6.2 搜索镜像

$ docker search 镜像名称
例如:docker search mysql

 6.3 下载镜像

$ docker pull 镜像名

     例如, 获取一个 centos 系统的基础镜像可以使用如下的命令
     ## 未指定版本一般会使用latest(最新的)版本
     $ docker pull centos
     ## 或者直接指定版本
     $ docker pull centos:版本号

6.4 查看宿主机上的镜像

$ docker images

     注1:查看image位置
          ## /var/lib/docker为docker默认安装目录
          cd /var/lib/docker/containers 
          ls

6.5 删除镜像

$ docker rmi 镜像ID/标签
     例如:
     $ docker rmi 2ca708c1c9cc
     $ docker rmi centos:latest 或 docker rmi centos:版本号

     注1:如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像。或者强制删除镜像
          $ docker rmi -f centos:版本号 
          -f, -force: 强制删除镜像, 即使有容器依赖它
          注意, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,先删除依赖该镜像的所有容器, 再来删除镜像

7、Docker容器

容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态

如何理解:类->实例,镜像->容器

7.1 启动、停止、重启容器命令

     $ docker start 容器ID或name
     $ docker stop 容器ID或name
     $ docker restart 容器ID或name 

7.2 查看当前运行的容器

$ docker ps

7.3 查看所有容器

$ docker ps -a

7.4 删除容器

$ docker rm 容器ID/容器NAME

     注1:主要支持的选项包括
          -f, --force=false 是否强行终止并删除一个运行中的容器
          -1, --link=false :删除容器的连接 ,但保留容器;
          -v, --volumes=false :删除容器挂载的数据卷
     注2:删除容器,还可以参考附录三,可根据条件删除

7.5 创建容器(重点)

$ docker create -it centos:latest 
$ docker create -it --name tomcat01 centos:latest

    注1:命令说明
          create:关键字
          centos:latest:即镜像名字:版本(或镜像ID),将使用指定镜像创建容器。另外,Docker会检查本地是否存在指定的镜像,
                         不存在就从公有仓库下载
          -it:是两个参数,-i:interactive容器具有交互功能,-t:容器将提供伪终端
          --name:指定生成的容器的名字,允许空,如果不指定会自动生成

     注2:此时,通过如下命令,可以查看到刚刚创建的容器
          $ docker ps - a
     注3:create命令新建的容器处于停止状态,可以使用start命令来启动它
          $ docker start 容器ID
     注4:docker容器状态可参考“images/docker容器状态转换图.png”(重点~~~重点~~~重点~~~)

 

7.6 启动容器(重点)

    $ docker start 容器ID/name
     
     注2:docker ps 查看已启动容器,注意:此时容器状态为UP

7.7 进入容器(重点)

    $ docker exec -it 容器ID/容器NAME /bin/bash
     ## 简写
     $ docker exec -it 容器ID/容器NAME bash

7.8 创建\启动\进入容器(run=create+start)

     ## 新建->启动->进入容器
     $ docker run -it centos:latest /bin/bash

     ## 指定了端口号
     $ docker run -it -p 7001:8001 centos:latest /bin/bash 

     ## 使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口     
     $ docker run -it -P --name tomcat03 centos:latest /bin/bash

     ## 此命令没有进入容器,可以之后再进入

     更多的时候,需要让 Docker 容器在后台以守护态( Daemonized )形式运行 此时,可以通过添加-d参数来实现:
     $ docker run -it -d --name webapp centos:latest 
     $ docker exec -it webapp /bin/bash  

     参数说明:
     -p:端口映射,格式为:主机(宿主)端口:容器端口
     -P: 注意是大写P,使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口
     -d:后台运行模式
     --name:容器的名字

7.9 退出容器

退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】
如果不想继续运行:按【ctrl+d】或输入exit

7.10 宿主机和docker容器之间复制文件

$ docker cp 宿主机绝对路径  

容器id:路径

8、查看Docker容器内部信息

8.1 进入容器内部获取信息

docker exec -it 容器ID/容器NAME /bin/bash
如果此时已进入容器内部,可分别执行hostname、ip addr、env这三个命令可以获取相关信息
     hostname
     ip addr
     env

8.2 在宿主机,执行docker exec命令

     获取容器的hostname:docker exec 容器ID/容器NAME hostname
     获取容器ip地址:docker exec 容器ID/容器NAME ip addr
     获取容器环境变量:docker exec 容器ID/容器NAME env

8.3 在宿主机,使用docker inspect命令

推荐使用docker inspect来获取信息,这个命令会返回一个json字符串,里面以key-value的格式准备了该容器相关的信息,内容十分丰富,可以一次性取得全部内容,也可以返回指定key对应的信息

docker inspect 容器ID/容器NAME

如果我们只对其中的一些感兴趣,例如hostname、ip地址、环境变量,该如何查看呢
查看数据所在节点,根据节点位置编写命令,例如:
hostname位于Config.Hostname这个节点位置,所以执行命令docker inspect -f {{.Config.Hostname}} tomcat001即可获取到hostname  

附录一:英文
Registry: 登录;域名注册局;注册局;注册表项;注册机构
pull:拉

附录二:如何卸载原先安装的 docker
1.移除docker:
  $ yum remove docker-ce

2.删除Docker安装目录
  $ rm -rf /var/lib/docker

3.验证是否删除成功
  docker info 
  bash: /usr/bin/docker: No such file or directory

  我们可以看到已经无法找到 docker 安装目录,证明 卸载成功 

附录三:关于删除容器
方法一:
#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,
$ sudo docker ps -a|grep Exited|awk '{print $1}'
#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器
$ sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`
方法二: 
#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
$ sudo docker rm $(sudo docker ps -a -q)

方法三:
#根据容器的状态,删除Exited状态的容器
$ sudo docker rm $(sudo docker ps -qf status=exited)

方法四:
#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
$ sudo docker container prune  (推荐)

附录四:docker常用命令(不断补充中)
1.docker查看容器的cpu占用率
  docker stats

以上就是今天的分享!!!

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

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

相关文章

typescript 八叉树的简单实现

查了一些文章&#xff0c;准备自己用typescript写一个简单的八叉树场景管理。 所谓的简单&#xff0c;就是所有元素都是边长为1的立方体。 元素类和树节点类 //元素类&#xff0c;因为都是边长为1的立方体&#xff0c;所以就用cube命名 export class CubeData {public reado…

由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开

一、问题描述 在使用Windows的远程桌面工具连接WindowsServer2016服务器时&#xff0c;无法连接到服务器&#xff0c;并且提示【由于没有远程桌面授权服务器可以提供许可证&#xff0c;远程回来连接已经断开。请跟服务器管理员联系】。 二、解决办法 2.0、前提 Windows Serv…

黑胶歌曲没权限,看我python大展神通,一分钟一个歌单

前言 大家早好、午好、晚好吖 ❤ ~ 人之初&#xff0c;喜白嫖。 大家都喜欢白嫖&#xff0c;我也喜欢&#xff0c;那么今天就来试试怎么白嫖抑云~ 一、需要的准备 1、环境 Python3.6以上 pycharm2019以上 2、模块 requests # 发送请求模块 第三方模块 exec js # 调用JS的…

CocosCreater 教程(下)

1.物理系统 1.1 2D刚体 刚体是组成物理世界的基本对象。 1.2 2D 碰撞组件 目前引擎支持三种不同的碰撞组件&#xff1a; 盒碰撞组件&#xff08;BoxCollider2D&#xff09;、圆形碰撞组件&#xff08;CircleCollider2D&#xff09; 和 多边形碰撞组件&#xff08;PolygonCo…

Java中的抽象类和接口

java中的抽象类和接口抽象类什么是抽象类&#xff1f;抽象的使用场景抽象类的案例抽象类的特征、注意事项小结抽象类的应用知识&#xff1a;模版方法模式接口接口概述、特点接口的基本使用&#xff1a;被实现接口与接口的关系&#xff1a;多继承JDK8开始接口新增方法接口的注意…

AtCoder Beginner Contest 277 F. Sorting a Matrix(拓扑排序+虚点)

题目 n*m(2<n,m<1e6,n*m<1e6)的矩阵&#xff0c; 第i行第j列元素a[i][j](0<a[i][j]<n*m) 对于值为0的元素&#xff0c;你可以将其赋值为任意正整数&#xff0c; 不同位置的0元素&#xff0c;可以被赋值成不同的正整数 然后&#xff0c;你可以执行以下操作若…

firefly3399 移植linux5.15.80 - 2022-11-27

需要注意的是&#xff0c;虚拟机需要足够的硬盘空间&#xff0c;不小于15GB&#xff01;&#xff01; 一、内核源码下载 国内镜像地址 git clone https://kernel.source.codeaurora.cn/pub/scm/linux/kernel/git/stable/linux.git/ 基本达到了带宽的最大值。 国外地址&#…

Android使用AudioTrack播放WAV音频文件

目录 1、wav文件格式 2、wav文件解析 3、wav文件播放 QA&#xff1a; 开始播放wav的时候使用了系统的播放器mediaplayer进行播放&#xff0c;但是无奈mediaplayer支持的实在不好。 好些年前自己做过pcm播放使用的是audiotrack&#xff0c;参考&#xff1a;CSDN 其实两者之…

php 进程池设计与实现,phper必学!

php 进程池设计与实现phper 为什么要学习进程池池的概念为什么要有进程池?动态创建进程缺点进程池的优点选择子进程为新任务服务的方式进程池模型服务端客户端结语phper 为什么要学习进程池 在php开发过程中经常使用的 php-fpm 使用的进程模型就是进程池&#xff0c;学习进程…

如何基于FSM有限状态机实现Enemies AI

文章目录&#x1f35f; Preface&#x1f355; 巡逻状态&#x1f37f; 寻路状态&#x1f32d; 攻击状态&#x1f357; 完整代码&#x1f35f; Preface 本文简单介绍如何基于FSM有限状态机实现Enemies AI&#xff0c;首先定义敌人的AI逻辑&#xff1a;默认状态下Enemy为巡逻状态…

刷爆力扣之等价多米诺骨牌对的数量

刷爆力扣之等价多米诺骨牌对的数量 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&…

使用 nlohmann 解析 json 文件

使用 nlohmann 解析 json 文件nlohmann/json的配置json基本数据结构json文件的读取、构造与输出C对象与nlohmann::json对象的转换C对象转换成nlohmann::json对象nlohmann::json对象转换成C对象序列化反序列化序列化nlohmann 是德国工程师&#xff0c;以其名字为工程名的 nlohm…

springboot项目的打包发布部署,jar和war的区别

简介&#xff1a; 1.Spring Boot使用了内嵌容器&#xff0c;因此它的部署方式也变得非常简单灵活&#xff0c;可以将Spring Boot项目打包成JAR包来独立运行&#xff0c;也可以打包成WAR包部署到Tomcat容器中运行&#xff0c;如果涉及大规模的部署&#xff0c;Jenkins成为最佳选…

【HCIP-Datacom】 IS-IS基础 ISIS动态路由协议配置(ISIS思维导图在底部)

目录 ISIS配置方法&#xff1a; 路由计算&#xff1a; ATT置位条件&#xff1a; 路由渗透&#xff1a; ISIS的认证&#xff1a; ISIS配置命令&#xff1a; ISIS的开销类型&#xff1a; ISIS配置方法&#xff1a; 进入ISIS进程 isis 1 //创建isis进程 设置实体名 network-entit…

.NET 升级发布后,IIS出现了System.IO.DirectoryNotFoundException

最近计划升级项目到.NET6, 在使用Release发布后发现IIS不能发现wwwroot目录,什么错误? 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:无尽的折腾后,终于又回到了起点,工控,我来了 !1 发布的一…

《统计学习方法》 第十六章 主成分分析PCA

主成分分析(PCA) 假设xxx为mmm 维随机变量&#xff0c;其均值为μ\muμ&#xff0c;协方差矩阵为Σ\SigmaΣ 考虑由mmm维随机变量xxx到mmm维随机变量yyy的线性变换 yiαiTx∑k1mαkixk,i1,2,⋯,my _ { i } \alpha _ { i } ^ { T } x \sum _ { k 1 } ^ { m } \alpha _ { k …

计算点在线上的投影坐标

如题 计算点到线上的垂点&#xff0c;首先明确&#xff1a; 该线段必须给出确切的起始点和终点&#xff0c; 而不是一个向量&#xff0c;因为一个向量并不能代表一个线段。 所以参数列表如下&#xff1a; Vector3 VerticalPoint(Vector3 point, Vector3 lStart, Vector3 lEnd…

【论文翻译】增强复制状态机的两阶段提交协议

Enhancing Two Phase-Commit Protocol for Replicated State Machines Halit Uyanık and Tolga Ovatman Department of Computer Engineering Istanbul Technical University 34469 Istanbul, Turkey Email目录1 介绍2 设计和实现2.1 事件类型2.2 在状态机上执行事件2.3 具有优…

8、常用基本命令(重要)

文章目录8、常用基本命令&#xff08;重要&#xff09;8.1 帮助命令8.1.1 man 获得帮助信息8.1.2 help 获得 shell 内置命令的帮助信息8.1.3 常用快捷键8.2 文件目录类8.2.1 pwd 显示当前工作目录的绝对路径8.2.2 ls 列出目录的内容8.2.3 cd 切换目录8.2.4 mkdir 创建一个新的目…

Linux驱动入门

一、驱动简介 Linux的驱动在本质上就是一种软件程序&#xff0c;上层软件可以在不了解硬件特性的情况下&#xff0c;通过驱动提供的接口&#xff0c;和计算机硬件进行通信。 系统调用是内核和应用程序之间的接口&#xff0c;而驱动程序是内核和硬件之间的接口。它为应用程序屏蔽…