文章目录
一、 容器VS虚拟机
Docker将集装箱的思想运用到软件的打包上,为代码提供了一个基于容器的标准化运输系统,可以将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器,可以运行在几乎所有的操作系统上。
优势
- 开发方面:Docker可以使开发人员更加关注软件质量,而不是关注开发环境的兼容。
- 运维方面:Docker使软件的发布更加高效,Docker能够实现自动化的编译、打包、测试和部署。因为Docker在开发、测试和生产环境中都使用了相同的镜像,所以更新时不会出现不一致的问题
- Docker在容器和虚拟机方面的优势:
实现了容器和虚拟机的有效结合,使部署和管理应用变得更加灵活。
二、 Docker实战
Docker的架构
引擎的三大组件:Docker后天服务、Rest接口、交互式命令行界面
Docker客户端命令
镜像 image
- 查看本地镜像:docker images [OPTIONS] [REPOSITORY[:TAG]]
- 拉取镜像:docker image pull [OPTIONS] NAME [:TAG|@DIGEST]
- 运行镜像:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
- 创建镜像:
Docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Docker image build [OPTIONS] PATH | URL | - - 登录Docker Hub仓库:docker login [OPTIONS] [SERVER]
- 上传镜像到Docker Hub仓库:docker push [OPTIONS] NAME[:TAG]
容器 container
- 新建并启动容器:docker run [OPTIONS] NAME [COMMAND] [ARG…]
- 启动和运行容器:docker start [OPTIONS] CONTAINER [CONTAINER…]
- 获取容器的日志信息:docker logs [OPTIONS] CONTAINER
- 进入容器:docker attach [OPTIONS] CONTAINER
- 在运行的容器中执行命令:docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
- 停止容器:docker stop [OPTIONS] CONTAINER [CONTAINER…]
- 删除容器:docker rm [OPTIONS] CONTAINER [CONTAINER…]
磁盘卷 volume
- 创建磁盘卷:docker volume create [OPTIONS] [VOLUME]
- 显示磁盘卷的详细信息:docker volume inspect [OPTIONS] VOLUME [VOLUME…]
- 以列表显示磁盘卷:docker volume ls [OPTIONS]
- 删除未使用的磁盘卷:docker volume prune [OPTIONS]
- 删除磁盘卷:docker volume rm [OPTIONS] VOLUME [VOLUME…]
网络 network
- 创建网络:docker network create [OPTIONS] NETWORK
- 为容器添加网络:docker network connect [OPTIONS] NETWORK CONTAINER
- 将容器从网络上断开:docker network disconnect [OPTIONS] NETWORK CONTAINER
- 以列表显示网络:docker network ls [OPTIONS]
- 删除所有未使用的网络:docker network prune [OPTIONS]
- 删除网络:docker network rm NETWORK [NETWORK]
服务 service’
- 创建新服务:docker service create [OPTIONS] IMAGE [COMMAND] [ARG…]
- 列出所有服务:docker service ls [OPTIONS]
- 列出某个服务的所有任务:docker service ps [OPTIONS] SERVICE
- 删除服务:docker service rm SERVICE [SERVICE…]
- 扩展服务:docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS…]
- 更新服务:docker service update [OPTIONS] SERVICE
集群 swarm
- 集群的初始化:docker swarm init [OPTIONS]
- Token的查看和刷新:docker swarm join-token [OPTIONS] (worker|manager)
- 加入集群:docker swarm join [OPTIONS] HOST:PORT
- 退出集群:docker swarm leave [OPTIONS]
- 更新集群:docker swarm update [OPTIONS]
Docker Compose编排工具的使用
是一个用于定义和运行多个Docker应用程序的工具,我们可以在Compose文件中定义多个应用服务,然后使用一个简单的命令就能创建和启动所有服务。是很好的CI持续集成工具,能很方便地部署development、test和staging环境。
一般在开发环境、自动测试和线上生产环境中使用Compose
- Compose 常用命令:
编译、创建、启动和连接到容器的服务:
docker-compose up [OPTIONS] [–scale SERVICE=NUM…] [SERVICE…]
该命令整合了所有容器的输出,docker-compose up可以使容器后台运行
编译服务:docker-compose build [options] [–build-arg key = val…] [SERVICE]
停止服务:docker-compose down [OPTIONS]
删除服务:docker-compose rm [options] [SERVICE…]
对服务执行一次性命令:docker-compose run [options] [-v VOLUME…] [-p PORT…] [-e KEY=VAL…] SERVICE [COMMAND] [ARGS…]
eg: docker-compose run web bash
三、 容器化项目
Docker 为应用的程序的打包和运行提供了一种便捷的方式,使用Docker容器进行构建、运行、停止、启动、修改或者更新等操作都非常简单。容器化技术也可以让应用程序向云环境的部署变得更为高效,再加上容器本身已经包含应用程序运行所需的大部分依赖,所有运行容器的操作系统也能很好地瘦身,从而运行更快,占用的资源更少。
传统的应用部署:
传统的应用部署为直接将应用程序安装到宿主计算机的文件系统上,然后编写命令脚本来运行它。
- 缺点:需要安装与应用程序搭配的额外软件包,不同的版本还会有冲突
难以迁移应用程序
将应用程序部署在虚拟机上:
虚拟机位于宿主机之上,作为独立的系统运行,同时包含了自己的内核、文件系统
网络系统等。这样很好地将应用程序和宿主机的操作系统隔离开来,减少了资源、网络、端口等的冲突
- 缺点:耗费资源
启动时间和CPU的使用会比应用程序自身消耗的多很多
容器化部署应用:
容器化部署应用具有灵活、高效的使用资源,容器可以包含其所需的全部文件,如同在虚拟机上部署应用程序一样,可以拥有自己的配置文件和依赖库,还可以拥有自己的网络接口。因此,与在虚拟机上运行应用程序一样,容器化应用比直接安装的应用程序更容易迁移,而且因为应用程序所运行的每个容器均拥有独立的网络接口,所以也不会出现争用同一端口的问题。
容器在启动时间、磁盘空间占用和CPU处理能力方面更具有优势,因为它没有独立运行的操作系统,也没有包含运行整个操作系统所需的大量软件。它只包含了应用程序运行所需的软件,以及其他想随容器一起运行的工具和少量的描述容器的元数据。
容器的管理工具:
- Swarm:Docker的原生集群工具
- Kubernetes:Google开源的一套自动化容器管理平台,前身是Borg,用于容器的部署、自动化调度和集群管理。特性:容器的自动化部署、自动化扩展或者缩容、自动化应用及服务升级、容器成组、对外提供服务、支持负载均衡、服务的健康检查、自动重启
- Apache Mesos:AMPLab首先开发的一款开源集群管理软件,支持Hadoop、Elasticsearch、Spark、Storm和Kafka等应用架构。