Docker入门教程第一部分,介绍和配置Docker环境

本系列教程内容包括:

  1. 配置您的Docker环境(本文)。
  2. 构建镜像并作为一个容器运行
  3. 在您的开发机器上安装并使用Kubernates环境
  4. 在您的开发机器上安装并使用Swarm环境
  5. 将您定制的应用在Docker Hub上共享

Docker相关概念:

Docker是一个供开发人员和系统管理员使用容器来构建共享和运行应用程序的平台。使用容器部署应用程序称为容器化。容器并不新鲜,但它使得部署应用程序非常简单的做法却是进几年才流行起来的。

容器化越来越受欢迎,因为容器化有以下的优点:

  • 灵活性:即使是最复杂的应用程序也可以被封装。
  • 轻量级:容器利用并共享主机内核,使得对系统资源的利用比虚拟机更高效。
  • 可移植性:您可以在本地构建、部署到云,并在任何地方运行。
  • 低耦合:容器具有很高的自给自足性和封装性,可让您在不破坏其他容器的情况下进行替换或升级。
  • 可伸缩性:您可以增加并跨在数据中心自动分发容器副本。
  • 安全性:容器将积极的约束和隔离应用于进程,而无需用户方面的任何配置。

容器图示

镜像和容器

从根本上说,一个容器不过是一个正在运行的进程,并对其应用了一些附加的封装功能,以使其与主机和其他容器隔离。 容器隔离的最重要方面之一是每个容器都与自己的私有文件系统进行交互。 该文件系统由Docker镜像提供。 镜像包括运行应用程序所需的所有内容——代码或二进制文件,运行时,依赖项以及所需的任何其他文件系统对象。

容器和虚拟机

容器在Linux上原生地运行,并与其他容器共享主机的内核。 它运行一个独立的进程,不占用任何其他比可执行文件更多的内存,从而使其轻量级。

容器图示

相比之下,虚拟机(VM)运行一个成熟的“guest”操作系统,通过管理程序对主机资源进行虚拟访问。 通常,VM会产生大量开销,超出了应用程序逻辑所需的开销。

容器图示

安装Docker Desktop

开始开发容器化应用程序的最佳方法是使用OSX或Windows的Docker Desktop。 Docker Desktop可让您轻松地在本地开发计算机上设置Kubernetes或Swarm,因此您可以立即使用正在开发应用程序的编排的所有功能,而无需任何集群。 请遵循适合您的操作系统的安装指令:

启用Kubernetes

Docker Desktop将为您快速轻松地设置Kubernetes。 请遵循适用于您的操作系统的设置和验证指令:

OSX

  1. 安装Docker Desktop之后,您应该在菜单栏中看到一个Docker图标。 单击它,然后浏览首选项...-> Kubernetes。

  2. 选中标记为启用Kubernetes的复选框,然后单击应用。 Docker Desktop将自动为您设置Kubernetes。 单击菜单栏中的Docker图标,然后在“Kubernetes is Running”旁边看到绿灯,您将知道一切都已成功完成。

  3. 为了确认Kubernetes已启动并正在运行,请创建一个名为pod.yaml的文本文件,其内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: demo
spec:
  containers:
  - name: testpod
    image: alpine:3.5
    command: ["ping", "8.8.8.8"]

这描述了带有单个容器的容器,将简单的ping隔离到8.8.8.8。

  1. 在终端中,导航到创建pod.yaml的位置并创建您的pod:
kubectl apply -f pod.yaml
  1. 检查您的Pod是否已启动并正在运行:
kubectl get pods

您应该看到类似以下内容:

NAME      READY     STATUS    RESTARTS   AGE
demo      1/1       Running   0          4s
  1. 检查您是否获得了ping操作所需的日志:
kubectl logs demo

您应该看到一个健康的ping过程的输出:

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=37 time=21.393 ms
64 bytes from 8.8.8.8: seq=1 ttl=37 time=15.320 ms
64 bytes from 8.8.8.8: seq=2 ttl=37 time=11.111 ms
...
  1. 最后,删除测试pod:
kubectl delete -f pod.yaml

WINDOWS

  1. 安装Docker Desktop之后,您应该在系统托盘中看到一个Docker图标。 右键单击它,然后导航到Settings -> Kubernetes

  2. 选中标记为启用Kubernetes的复选框,然后单击Apply。 Docker Desktop将自动为您设置Kubernetes。 请注意,这会花费大量时间(20分钟)。 右键单击菜单栏中的Docker图标,单击Settings,然后在“Kubernetes is Running”旁边看到绿灯,就可以知道一切都已成功完成。

  3. 为了确认Kubernetes已启动并正在运行,请创建一个名为pod.yaml的文本文件,其内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: demo
spec:
  containers:
  - name: testpod
    image: alpine:3.5
    command: ["ping", "8.8.8.8"]

这描述了带有单个容器的pod,包含一个简单的ping 8.8.8.8的命令。

  1. 在powershell中,导航到创建pod.yaml所在的位置并创建pod:
kubectl apply -f pod.yaml
  1. 检查您的Pod是否已启动并正在运行:
kubectl get pods

您应该看到类似以下内容:

NAME      READY     STATUS    RESTARTS   AGE
demo      1/1       Running   0          4s
  1. 检查您是否获得了预期的ping操作的日志:
kubectl logs demo

您应该看到一个健康的ping操作的输出:

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=37 time=21.393 ms
64 bytes from 8.8.8.8: seq=1 ttl=37 time=15.320 ms
64 bytes from 8.8.8.8: seq=2 ttl=37 time=11.111 ms
  1. 最后,删除测试pod:
kubectl delete -f pod.yaml

启用Docker Swarm

Docker Desktop主要在Docker Engine上运行,它具有运行Swarm所需的一切内置功能。请按照适用于您的操作系统的设置和验证指令进行操作:

OSX

  1. 打开一个终端,并初始化Docker Swarm模式:
docker swarm init

如果一切顺利,您应该看到类似以下的消息:

Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  1. 运行一个简单的Docker服务,该服务使用基于alpine的文件系统,并包含一个ping 8.8.8.8的命令:
docker service create --name demo alpine:3.5 ping 8.8.8.8
  1. 检查您的服务是否创建了一个正在运行的容器:
docker service ps demo

您应该看到类似以下内容:

NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
463j2s3y4b5o        demo.1              alpine:3.5          docker-desktop      Running             Running 8 seconds ago
  1. 检查您是否获得,预期的ping操作的日志:
docker service logs demo

您应该看到一个健康的ping操作的输出:

demo.1.463j2s3y4b5o@docker-desktop    | PING 8.8.8.8 (8.8.8.8): 56 data bytes
demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=0 ttl=37 time=13.005 ms
demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=1 ttl=37 time=13.847 ms
demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=2 ttl=37 time=41.296 ms
...
  1. 最后,删除测试服务:
docker service rm demo

WINDOWS

  1. 打开Powershell,然后初始化Docker Swarm模式:
docker swarm init

如果一切顺利,您应该看到类似以下的消息:

Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  1. 运行一个简单的Docker服务,该服务使用基于alpine的文件系统,并包含一个ping 8.8.8.8的命令:
docker service create --name demo alpine:3.5 ping 8.8.8.8
  1. 检查您的服务是否创建了一个正在运行的容器:
docker service ps demo

您应该看到类似以下内容:

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
463j2s3y4b5o        demo.1              alpine:3.5          docker-desktop      Running             Running 8 seconds ago
  1. 检查您是否获得预期的ping操作的输出:
docker service logs demo

您应该看到一个健康的ping操作的输出:

demo.1.463j2s3y4b5o@docker-desktop    | PING 8.8.8.8 (8.8.8.8): 56 data bytes
demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=0 ttl=37 time=13.005 ms
demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=1 ttl=37 time=13.847 ms
demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=2 ttl=37 time=41.296 ms
...
  1. 最后,删除测试服务:
docker service rm demo

结论

至此,您已经在开发机器上安装了Docker Desktop,并确认可以在Kuberentes和Swarm中运行简单的容器化工作负载。 在下一节中,我们将开始开发我们的第一个容器化应用程序。