再也不踩坑的kubernetes实战指南
上QQ阅读APP看书,第一时间看更新

2.1 Docker基础

2.1.1 Docker介绍

Docker是一个开源的软件项目,在Linux操作系统上,Docker提供了一个额外的软件抽象层及操作系统层虚拟化的自动管理机制。Docker运行名为“Container(容器)”的软件包,容器之间彼此隔离,并捆绑了自己的应用程序、工具、库和配置文件。所有容器都由单个操作系统内核运行,因此比虚拟机更轻量级。

Docker利用Linux资源分离机制,例如cgroups及Linux Namespace来创建相互独立的容器(Container),可以在单个Linux实体下运行,避免了启动一个虚拟机造成的额外负担。Linux核心对Namespace(命名空间)的支持完全隔离了不同Namespace下的应用程序的“视野”(即作用范围),包括进程树、网络、用户ID与挂载的文件系统等,而核心cgroups则提供了资源隔离,包括CPU、存储器、Block I/O与网络。

2.1.2 Docker基本命令

本节介绍Docker的一些常用命令,这些命令有助于读者排查和解决集群中的问题。

查看Docker版本。包括Docker版本号、API版本号、Git Commit、Go版本号等。

显示Docker信息:

查询镜像。OFFICIAL为OK的是官方镜像,默认搜索的是hub.docker.com。

拉取/下载镜像。默认是hub.docker.com(docker.io)上面的镜像,如果拉取公司内部的镜像或者其他仓库上的镜像,需要在镜像前面加上仓库的URL,如:

    docker pull harbor.xxx.net/frontend:v1

拉取公网上的Nginx镜像:

推送镜像。把本地的镜像推送到公网仓库中,或者公司内部的仓库中。

默认登录和推送的是公网的镜像,如果需要推送到公司仓库或者其他仓库,只需要在镜像前面使用tag并加上URL即可:

前台启动一个容器:

    [root@DockerTestServer ~]# docker run -ti nginx bash
    root@23bc7ccabb09:/#

后台启动:

    [root@DockerTestServer ~]# docker run -tid nginx bash
    1bcf5154d5c3a57d92a6796f526eac2cefd962aaca9cf4098689bfe830bb9e5e

端口映射。可以将本机的端口映射到容器的端口,比如将本机的1111端口映射到容器的80端口:

    [root@DockerTestServer ~]# docker run -ti -p 1111:80 nginx bash
    root@cd676d572188:/#

挂载卷。可以将本机的目录挂载到容器的指定目录,比如将hosts文件挂载到容器的hosts:

查看当前正在运行的容器:

查看所有容器,包括已经退出的:

    [root@K8S-master01 K8S-ha-install]# docker ps -a

查看正在运行的容器(即显示出容器的ID):

查看所有容器的ID,包括已经退出的:

进入到一个后台运行的容器(即之前用-d命令参数来指定后台运行方式的容器):

拷贝文件。双向拷贝,可以将本机的文件拷贝到容器,反之亦然:

删除已经退出的容器:

删除本机镜像。比如删除REPOSITORY为none的镜像:

镜像打标签(tag)。用于区分不同版本的镜像:

使用dockerbuild通过Dockerfile制作镜像。注意最后的一个点(.),表示使用当前目录的Dockerfile:

    dockerbuild-t image_name:image_tag .

上述演示的都是Docker常用的基本命令,已可以满足日常需求,如果读者想要深入了解,可以参考Docker的相关资料。

2.1.3 Dockerfile的编写

Dockerfile是用来快速创建自定义镜像的一种文本格式的配置文件,在持续集成和持续部署时,需要使用Dockerfile生成相关应用程序的镜像,然后推送到公司内部仓库中,再通过部署策略把镜像部署到Kubernetes中。

通过Dockerfile提供的命令可以构建Dockerfile文件,Dockerfile的常用命令如下:

以下简单演示每个命令的使用方法。

使用RUN创建一个用户:

使用ENV定义环境变量并用CMD执行命令:

执行构建并启动测试:

使用ADD添加一个压缩包,使用WORKDIR改变工作目录:

使用COPY拷贝指定目录下的所有文件到容器,不包括本级目录。

此时只会拷贝webroot下的所有文件,不会将webroot拷贝过去:

设置启动容器的用户,在生产环境中一般不建议使用root启动容器,所以可以根据公司业务场景自定义启动容器的用户:

使用Volume创建容器可挂载点:

挂载Web目录到/data,注意,对于宿主机路径,要写绝对路径:

    docker run -ti --rm -v `pwd`/web:/data centos:volume bash