导语
最近一直忙于项目工作,有一段时间没更新公众号了,经常在群里看到有人问一些关于容器相关的问题,今天我们来讲解一下容器技术Docker,本章作为新手入门篇,更多高级用法及实践请关注公众号,后续将持续更新容器技术相关文章。
Docker简介[1]
Docker是什么
•Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。•比如,你在本地用 Python 开发网站后台,开发测试完成后,就可以将 Python3 及其依赖包、Django 及其各种插件、Mysql、Nginx 等打包到一个容器中,然后部署到任意你想部署到的环境。换种说法,也就是软件带环境安装。•Docker 的主要目标是 “Build,Ship,and Run Any App,Anywhere” ,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的 APP 及其运行环境能够做到 “一次封装,到处运行”。•Linux 容器管理的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上,而 Docker 容器在任何操作系统都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机器上就可以一键部署,大大简化了操作。
Docker能做什么
•面向开发人员的 Docker
开发人员使用了 Docker,就不必安装和配置复杂的数据库,也无需在不兼容语言工具链版本之间切换时担心。应用容器化之后,其复杂性就被转移到能够轻松构建、共享和运行的容器中。当有新同事安排到新的代码库时,无需再费时费力地安装软件和解释设置过程。以 Dockerfile 文件形式发布的代码使用起来非常简单:首先安装 Docker 和编辑器,然后拉取作为 Docker 镜像打包在一起的依赖资源,短短数分钟,就能够构建和调试应用了。
•面向系统管理员的 Docker
Docker 简化了软件交付。既能顺利地开发和部署漏洞补丁与新功能,还能够实时扩展应用。Docker 是开发人员和 IT 运维团队的秘密武器。有了 Docker,他们能够自动并安全地构建、交付、测试和部署应用,顺利地进行移植。无需再阅读令人烦恼的 Wiki、自述文件、运行手册、便利贴等等陈旧冗余的信息。
•面向企业的 Docker
Docker 是现代应用平台的核心,是开发人员与 IT 运维、Linux 和 Windows 之间的纽带。Docker 既适用于云,也可以在本地部署;既支持传统架构,也支持微服务架构。使用 Docker 可以构建、连接、保护和调度容器,从开发到生产全程进行管理。Docker 以最优成本确保应用敏捷、支持云且安全,伴随企业踏上数字转型的征程。
容器 VS 虚拟机

•容器 是一个应用层抽象,用于将代码和依赖资源打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行。与虚拟机相比,容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动。
•虚拟机(VM) 是一个物理硬件层抽象,用于将一台服务器变成多台服务器。管理程序允许多个 VM 在一台机器上运行。每个 VM 都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且 VM 启动也十分缓慢
•容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高•容器和虚拟机共用,将容器和虚拟机配合使用,为应用的部署和管理提供极大的灵活性
Docker核心概念
•镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker 引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。我们可以在Docker Hub上看到各类的镜像,这些镜像都是基于底层系统的基础镜像(centos、ubuntu、alpha linux、debian 等等)来构建的。•容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的 Linux 系统环境(包括 root 权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker 引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker 在镜像的上层创建一个可写层,镜像本身不变,一个镜像可以创建多个容器•镜像仓库(Repository):镜像仓库是存放Docker镜像文件的地方。•镜像注册表(Registry):注册表是一个存储和内容传送系统,包含名为Docker的镜像,可以使用不同的标记版本。例如镜像distribution/registry, 标签有 2.0 和2.1。镜像注册表可以包含多个镜像仓库。使用docker push和pull命令与注册表进行交互。
Docker架构

Docker实践
•安装Docker
这里就不再描述各个系统上的Docker环境安装了,环境安装请参考:https://docs.docker.com/install/
•以部署一个mysql 5.7环境为例
第一步: 拉取镜像
docker pull mysql:5.7
第二步: 启动容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 -v data:/var/lib/mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
--name :指定容器名称
-e :指定环境变量MYSQL_ROOT_PASSWORD
-d :以后台方式启动
-p :配置宿主机器与虚拟机的端口映射
-v :持久化容器目录
执行完以上两步,数据库安装完成,可以通过数据库连接工具(例如 navicat)来连接数据库验证。
Docker命令[2]
| 命令 | 描述 |
| docker attach | 将本地标准输入,输出和错误流附加到正在运行的容器 |
| docker build | 从Dockerfile构建映像 |
| docker builder | 管理构建 |
| docker checkpoint | 管理检查站 |
| docker commit | 根据容器的更改创建新图像 |
| docker config | 管理Docker配置 |
| docker container | 管理容器 |
| docker cp | 在容器和本地文件系统之间复制文件/文件夹 |
| docker create | 创建一个新容器 |
| docker deploy | 部署一个新的stack或更新现有stack |
| docker diff | 检查容器文件系统上文件或目录的更改 |
| docker engine | 管理docker引擎 |
| docker events | 从服务器获取实时事件 |
| docker exec | 在正在运行的容器中运行命令 |
| docker export | 将容器的文件系统导出为tar压缩包 |
| docker history | 显示镜像的历史记录 |
| docker image | 管理镜像 |
| docker images | 查看镜像列表 |
| docker import | 从压缩包导入内容以创建文件系统映像 |
| docker info | 显示系统的信息 |
| docker inspect | 查看有关Docker对象的底层信息 |
| docker kill | 杀死一个或多个正在运行的容器 |
| docker load | 从tar压缩包或STDIN加载镜像 |
| docker login | 登录Docker Registry |
| docker logout | 登出Docker Registry |
| docker logs | 获取容器的日志 |
| docker manifest | 管理Docker镜像清单和清单列表 |
| docker network | 管理网络 |
| docker node | 管理Swarm节点 |
| docker pause | 暂停一个或多个容器中的所有进程 |
| docker plugin | 管理插件 |
| docker port | 列出端口映射或容器的特定映射 |
| docker ps | 查看容器列表 |
| docker pull | 从注册表中拉取镜像或存储库 |
| docker push | 将镜像或存储库推送到注册表 |
| docker rename | 重命名容器 |
| docker restart | 重新启动一个或多个容器 |
| docker rm | 删除一个或多个容器 |
| docker rmi | 删除一个或多个图像 |
| docker run | 在新容器中运行命令 |
| docker save | 将一个或多个镜像保存到tar存档(默认情况下流式传输到STDOUT) |
| docker search | 在Docker Hub中搜索图像 |
| docker secret | 管理Docker的密钥 |
| docker service | 管理服务 |
| docker stack | 管理Docker Stacks |
| docker start | 启动一个或多个已停止的容器 |
| docker stats | 显示容器资源使用情况统计信息的实时流 |
| docker stop | 停止一个或多个正在运行的容器 |
| docker swarm | 管理Swarm |
| docker system | 管理Docker |
| docker tag | 创建一个引用SOURCE_IMAGE的标记TARGET_IMAGE |
| docker top | 显示容器的运行进程 |
| docker trust | 管理对Docker镜像的trust |
| docker unpause | 取消暂停一个或多个容器中的所有进程 |
| docker update | 更新一个或多个容器的配置 |
| docker version | 显示Docker版本信息 |
| docker volume | 管理挂载卷 |
| docker wait | 阻塞直到一个或多个容器停止,然后打印退出代码 |
References
[1]
Docker简介: https://www.imooc.com/article/277119[2]
Docker命令: https://docs.docker.com/engine/reference/commandline/docker/
点个“好看”支持一下鸭
点鸭点鸭点鸭
↓↓↓




