Docker - Introduction & QuickStart

Docker - 概述

Docker包括了一个命令行程序、一个后台守护进程、以及一组远程服务。它解决了常见的软件问题,并且简化了安装、运行、发布和删除程序。这一切的实现是通过使用一项 UNIX 技术,称之为容器。

容器与虚拟机:

容器:

容器是应用程序层的一个抽象,将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为孤立进程运行。容器占用的空间少于虚拟机(容器图像的大小通常为几十MB),并且几乎立即启动。

虚拟机:

虚拟机(VM)是将一台服务器变成多台服务器的物理硬件的抽象。管理程序允许多台虚拟机在单台机器上运行。每个VM都包含一个操作系统的完整副本,一个或多个应用程序,必需的二进制文件和库 - 占用数十GB。 VM也可能启动缓慢。

Docker - 版本

Docker有两个版本:Community Edition(CE)社区版Enterprise Edition(EE)企业版

社区版适合希望开始使用Docker并尝试使用基于容器的应用程序的开发人员和小型团队。

Docker CE有两个更新通道,稳定优势

  • 稳定给你每一个季度的可靠的更新
  • Edge每个月都会为您提供新功能

企业版(EE)专为企业级开发人员和IT团队而设计,他们在大规模生产中构建,发布和运行关键业务应用程序。

Reference:https://docs.docker.com/engine/installation/

Docker - 特点

  • Docker能够通过容器提供更小的操作系统占用空间,从而缩小开发规模。
  • 有了容器,跨不同部门的团队(如开发人员,质量保证人员和操作人员)可以更轻松地跨应用程序进行无缝工作。
  • 您可以在任何物理和虚拟机,甚至是云上的任何位置部署Docker容器。
  • 由于Docker容器非常轻便,所以它们非常容易扩展。

Docker - 组件

Docker有以下组件:

  • Docker for Mac - 它允许在Mac OS上运行Docker容器。
  • Docker for Linux - 它允许在Linux操作系统上运行Docker容器。
  • Docker for Windows - 它允许在Windows操作系统上运行Docker容器。
  • Docker Engine - 用于构建Docker镜像和创建Docker容器。
  • Docker Hub - 这是用来托管各种Docker镜像的注册表。
  • Docker Compose - 用于定义使用多个Docker容器的应用程序。

Docker - 应用场景

Docker提供了轻量级的虚拟化,几乎没有其他任何额外开销。其次,相比于虚拟机,我们可以在同一台机器上创建更多数量的容器。Docker 另外一个特点是启动和停止都能在几秒钟完成。

  • 简化配置:同一个Docker的配置可以在不同的环境中使用,这样降低了硬件要求和应用环境之间耦合度。

  • 代码管理:Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。

  • 隔离应用:有很多种原因会让你选择在一个机器上运行不同的应用,这时候隔离应用会非常有用

  • 整合服务器:通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本

  • 调试能力:Docker 提供了许多的工具,这些工具不一定针对容器,却适用于容器

  • 多租户环境:Docker 在多租户的环境中可以避免关键应用的重写

  • 快速部署:传统的部署模式是安装->配置->运行,Docker的部署模式是:复制->运行

Docker - 安装配置

由于 Docker 的局限性,Docker 只能运行在64位的系统中。

1
[root@localhost ~]# getconf LONG_BIT

CentOS安装Docker :

系统要求:

要安装Docker CE,您需要维护版本的CentOS 7。不支持或测试归档版本。 必须启用centos-extras存储库。此存储库默认情况下处于启用状态,但如果您已禁用该存储库,则需要重新启用该存储库。

卸载旧版本:

老版本的Docker被称为dockerdocker-engine。如果安装了这些,请卸载它们以及相关的依赖项。

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# $ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

如果yum报告说没有安装这些软件包,那也没关系。

/var/lib/docker/包括图像,容器,卷和网络的内容将被保留。Docker CE包现在被称为docker-ce

安装Docker CE:

yum 安装:
安装所需的包:
1
2
3
[root@localhost ~]# sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
添加yum库:
1
2
[root@localhost ~]# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# sudo yum makecache fast
安装最新版docker-ce:
1
[root@localhost ~]# yum install docker-ce
查看版本:
1
2
[root@localhost ~]# docker -v                                                                                                                          
Docker version 18.03.1-ce, build 9ee9f40
shell安装:

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS系统上可以使用这套脚本安装:

1
2
[root@localhost ~]# curl -fsSL get.docker.com -o get-docker.sh
[root@localhost ~]# sh get-docker.sh --mirror Aliyun

或者使用 wget:

1
[root@localhost ~]# wget -qO- https://get.docker.com/ | sh

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 edge 版本安装在系统中。

其他安装方式请参考官网所提供的文档:

Reference:https://docs.docker.com/engine/installation/linux/docker-ce/centos/#prerequisites

配置加速服务:

因为国内访问 Docker Hub 较慢, 可以使用腾讯云提供的国内镜像源, 加速访问 Docker Hub

1
2
3
[root@localhost ~]# echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# service docker restart

Docker - Hello World

在安装好 Docker 之后,可以再命令行终端中输入:

1
[root@localhost ~]# docker run hello-world

之后,Docker被激活,开始下载各种组件,并最终打印出Hello from Docker!,在这个过程成 Docker依照流程做了如下事情:

docker runDocker 在本机寻找镜像Docker在 DockerHub 上寻找该镜像是否安装?Docker下载该镜像DockerHub是是否存在?在本机中安装此镜像Docker 创建了一个新的容器并启动改该程序容器运行起来了

当第二次执行docker run hello-world的时候,Docker 会检查是否安装了hello-world 这个镜像,如果已经安装,Docker 会创建一个新的容器并启动该程序。

Docker - 简单操作:

指令 参数
docker build 通过dockerfile生成镜像
docker images 查看当前本地有哪些docker镜像
docker pull 下载镜像
docker run 通过docker镜像生成docker容器(docker help run 查看run命令)
docker ps 查看正在up运行中的docker镜像,docker ps -a 查看所有的
docker exec 进入容器
docker attach 进入容器
docker rm 删除容器,-f 强制删除,up状态的也可以删除
docker rmi 删除images,通过image的id来指定删除谁
docker start 启动一个容器
docker stop 停止提一个容器
docker tag 给镜像打标签(docker tag imageid name:tag)
docker status 在宿主机查看docker使用cpu、内存、网络、io情况
docker logs 查看容器的日志

更多命令参看 https://docs.docker.com/engine/reference/commandline/docker/

可以参考每一个镜像的文档https://hub.docker.com/

参考资料:

Docker Get Started:https://docs.docker.com/get-started/

8 Ways to Use Docker in the Real World:http://blog.flux7.com/blogs/docker