暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

docker入门篇

四阿哥胤禛 2019-05-18
336

导语

最近一直忙于项目工作,有一段时间没更新公众号了,经常在群里看到有人问一些关于容器相关的问题,今天我们来讲解一下容器技术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/


      点个“好看”支持一下鸭

      点鸭点鸭点鸭

                                                                                                             ↓↓↓

      文章转载自四阿哥胤禛,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论