Docker

本文介绍了Docker的基本概念,包括其作为开源容器引擎的角色、核心组成部分(客户端、守护进程、镜像和容器)、主要优势(标准化、轻量级、隔离和DevOps友好),并与虚拟机进行了对比,阐述了Docker在软件开发和部署中的广泛应用。
摘要由CSDN通过智能技术生成

一,Docker基础

1,Docker 是什么

Docker是一款开源的应用容器引擎,由Docker Inc.公司开发,自推出以来迅速成为云计算领域中的关键技术之一。Docker利用Linux的内核特性如cgroups(Control Groups)和namespaces实现了资源隔离与限制,可以在同一主机系统上轻松地创建和管理多个容器实例,每个容器都像是一个轻量级的、独立运行的虚拟环境。

2,Docker 的核心组成部分

  1. Docker Client(客户端):用户通过Docker CLI(命令行界面)与Docker守护进程交互,发送构建、运行、停止容器等相关命令。

  2. Docker Daemon(守护进程):在宿主机上持续运行的后台服务,负责接收客户端命令,管理容器、镜像和网络等核心组件。

  3. Docker Image(镜像):一种分层结构的只读模板,包含了运行应用程序所需的所有依赖文件和配置信息。用户可以根据基础镜像创建新的定制镜像,或者从Docker Hub这样的镜像仓库拉取现成的镜像。

  4. Docker Container(容器):基于镜像运行的可执行实例,容器之间相互隔离,各自拥有独立的文件系统、网络空间以及其他资源,可以快速启动、停止和迁移。

3,Docker的主要优势和特点

  • 标准化和可移植性:容器化的应用可以在任何支持Docker的环境中运行,因为所有的依赖都被包含在镜像之中,大大简化了部署流程。

  • 轻量级虚拟化:相比传统的虚拟机技术,容器占用的资源更少,启动更快,因此可以更高效地利用硬件资源。

  • 资源隔离与安全性:通过内核提供的隔离机制,确保容器间互不影响,提供一定的安全保障。

  • DevOps友好:Docker促进了持续集成和持续部署(CI/CD)实践,有助于实现敏捷开发和运维自动化。

  • 容器编排:虽然Docker本身提供了容器的生命周期管理,但在大规模集群环境下,常常结合Kubernetes、Docker Swarm等容器编排工具来管理大量容器的调度、网络和服务发现等复杂需求。

综上所述,Docker已经成为现代软件开发、交付和部署流程中不可或缺的一部分,极大地提升了应用的构建、测试、分发和运行效率。

二.Docker与Virtual Machine区别

Docker与Virtual Machine(虚拟机)的主要区别在于它们的架构、资源使用、隔离程度以及启动和运行效率等方面:

  1. 架构和资源使用:

  2. Docker:基于容器技术,它不运行完整的操作系统,而是利用宿主机的操作系统内核,并通过命名空间(Namespace)、控制组(Cgroups)等内核特性进行隔离,使得不同的容器共享同一内核,但拥有独立的用户空间。因此,Docker容器相比虚拟机更加轻量级,启动更快,占用存储空间和内存较少。

  3. Virtual Machine:每个虚拟机运行在其自身的Guest OS(客户操作系统)之上,这个Guest OS位于一个名为Hypervisor(虚拟机管理程序)的底层软件之上,该软件模拟出一套完整的硬件环境供Guest OS使用。这意味着每个虚拟机都需要一个完整的操作系统副本,资源消耗较大,启动时间较长,存储和内存占用较多。

  4. 隔离程度:

  5. Docker:容器之间的隔离不如虚拟机彻底,尤其是在安全性和稳定性方面。容器共享内核,如果一个容器出现了内核漏洞或故障,可能影响到同一主机上的其他容器。

  6. Virtual Machine:虚拟机提供了较高的隔离级别,因为每个虚拟机都有独立的操作系统,即便一个虚拟机受到攻击或崩溃,也不会直接影响到其他虚拟机。

  7. 启动和运行效率:

  8. Docker:由于容器不需要加载和运行整个操作系统,所以能够实现秒级启动,运行时性能损失较小,接近于直接在宿主机上运行应用。

  9. Virtual Machine:虚拟机需要启动整个操作系统,包括内核引导和系统初始化等步骤,启动时间一般为分钟级别,运行时性能虽经过优化但仍低于直接在物理机上运行。

  10. 应用场景和灵活性:

  11. Docker:非常适合于服务部署、微服务架构、持续集成/持续部署(CI/CD)等场景,容器易于复制和移动,确保在不同环境下的部署一致性。

  12. Virtual Machine:适合于需要更高隔离度的场景,例如测试不同操作系统版本的应用、隔离不兼容的服务,以及硬件兼容性要求较高的传统应用。

  13. 管理和编排:

  14. Docker:具备良好的容器编排能力,通过Docker Compose、Kubernetes等工具可以轻松管理和调度大量容器。

  15. Virtual Machine:早期的虚拟机管理相对独立,但现在也有诸如VMware vSphere、OpenStack等平台支持大规模虚拟机的管理和编排。

VM技术和容器技术对比

面对上述几个问题,docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后一个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。

三.Docker应用

- Docker在各种场景中都有广泛的应用,包括开发环境搭建、持续集成和部署、微服务架构等。

- Docker可以提供一致的开发和测试环境,简化了开发者之间的协作和应用的部署。

- 在CI/CD中,Docker可以用于构建和打包应用程序,以及自动化测试和部署。

- 在微服务架构中,Docker可以帮助实现服务的隔离、部署和扩展。

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

二,Docker 常用命令

1,常用命令

下载
    yum install docker


启动
    systemctl start docker


关闭
    systemctl stop docker


重启
    systemctl restart docker


docker设置随服务启动而自启动
    systemctl enable docker


查看docker 运行状态
    systemctl status docker


查看docker 版本号信息
    docker version
    docker info

dockers 帮助命令

docker --help

不知道参数的时候可以这样

docker pull --help

镜像命令

查看镜像列表

docker images

搜索镜像
    docker search 镜像名


搜索 STARS >9000的 mysql 镜像
    docker search --filter=STARS=9000 mysql 


拉取镜像 
    docker pull 镜像名 
    docker pull 镜像名:tag


运行镜像 
    docker run 镜像名
    docker run 镜像名:Tag


删除镜像
    docker image rm 镜像名称/镜像ID
删除一个 (-f 强制删除)
    docker rmi -f 镜像名/镜像ID
删除多个 其镜像ID或镜像用用空格隔开即可 
    docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID
    docker rmi -f $(docker images -aq)

下载mysql镜像

docker run -p 3306:3306 --name long_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

3,容器命令

删除所有的容器
docker rm -f $(docker ps -aq)

查看正在运行容器列表
    docker ps
查看所有容器 -----包含正在运行 和已停止的
    docker ps -a
运行一个容器
            -it 表示 与容器进行交互式启动
             -d 表示可后台运行容器 (守护式运行)  

(补充注意:不加-d 默认是交互模式,不是守护模式,所有ctrl +c 退出之后就会消失)
            --name 给要运行的容器 起的名字  
            /bin/bash  交互路径
    docker run -it --name 要取的别名 镜像名:Tag /bin/bash 
停止容器
    docker stop 容器名/容器ID
删除容器
    #删除一个容器
        docker rm -f 容器名/容器ID
    #删除多个容器 空格隔开要删除的容器名或容器ID
        docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
    #删除全部容器
        docker rm -f $(docker ps -aq)
容器端口与服务器端口映射
    -p 宿主机端口:容器端口 (注意是小写的p)

-P (注意是大写P) ? 为什么它知道容器的端口?


进入容器
    docker exec -it 容器名/容器ID /bin/bash
    #进入 前面的 nginx容器   
    docker exec -it nginx01 /bin/bash
退出容器
    直接退出 exit
停止容器
    docker stop 容器ID/容器名
重启容器
    docker restart 容器ID/容器名
启动容器
    docker start 容器ID/容器名
kill 容器
    docker kill 容器ID/容器名
查看容器日志
    docker logs -f --tail=要查看末尾多少行 默认all 容器ID

  • 41
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值