千家信息网

云原生技术之Docker入门

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,1. 为什么需要容器?下图是一个比较传统的软件架构:cdn.xitu.io/2019/9/4/16cfb4bb0a18c6fe?w=527&h=299&f=png&s=6986">做过java的同学可
千家信息网最后更新 2026年11月03日云原生技术之Docker入门

1. 为什么需要容器?

下图是一个比较传统的软件架构:

cdn.xitu.io/2019/9/4/16cfb4bb0a18c6fe?w=527&h=299&f=png&s=6986">

做过java的同学可能对上图的架构方式比较了解,我们通常会将一个应用程序生成一个war包,放到一个tomcat容器当中并在一台虚拟机(VM)中启动运行,然后配置nginx的负载均衡策略,将来自用户的请求转发到某个tomcat应用上,这种基于主机或虚拟机部署的应用会存在以下几个问题:

可移植性差

需要事先安装应用所需要的运行环境,比如java应用所需要的jdk或者jre,如果需要重新部署一个应用,就需要重新初始化环境再安装应用,过程繁琐; 另外如果一个应用需要jdk7的运行环境另外一个应用需要jdk8,那在一台主机上就很难满足;

可维护性差

如果tomcat应用本身或者所在的虚拟机操作系统出现问题时,则需要人工干预,比如配置nginx转发规则、执行重启操作等;

可扩展性差

应用的负载有高有低,不够稳定,当前应用负载大的时候,我们需要增加应用的数量,当应用负载降低的时候,我们需要降低应用的数量;

无法资源隔离

如果一台虚拟机部署多个应用,不同的应用或者进程之间会相互影响;

...

我们接下来就来看一下我们是如何一步步的解决这些问题的。

首先是容器化,我们选择的方案是Docker。

Docker将应用程序与该程序的依赖,打包成一个容器镜像,运行这个文件就会生成虚拟容器。程序在这个虚拟容器里运行,就好像运行在真实的物理机上,并且每个容器之间资源互相隔离而且都有自己的文件系统,这样容器之间进程不会相互影响,可以通过下图来进行对比基于虚拟机和基于容器部署应用的区别:

2. Docker介绍

2.1 Docker架构

Docker是客户端-服务器架构的应用,主要由以下部分组成:

服务端是一个名为dockerd守护进程,用来监听REST API请求并管理Docker对象,比如镜像、容器、存储卷及网络等。

命令行客户端(CLI),也就是我们平常在控制台输入的docker命令行,通过调用REST API进行控制Docker daemon或者同其进行集成。

镜像仓库(Docker Registries),镜像仓库用来存储Docker镜像。

以下是Docker的架构示意图:

2.2 Docker对象

IMAGES

镜像一般是通过指令创建的只读文件,用来生成容器。一般一个镜像是基于另外一个镜像并添加一些额外的指令创建的,可以通过一个名为Dockerfile的文件来生成一个镜像,在Dockerfile中的每一行指令会生成一层(layer)。当Dockerfile有改动需要重新生成镜像时,只需要重新生成改变的那些层就可以,这样就可以使得镜像文件更加轻量、快速构建。

CONTAINERS

容器是通过镜像文件生成的运行实例。可以通过REST API或者docker client进行创建、启动、停止、移动或者删除一个容器。

SERVICE

用来管理和扩展多个容器,需要同docker swarm一起工作

2.3 底层技术

Docker采用go语言编写,并且使用了Linux内核中的几个特性来实现其功能,主要有如下:

Namespaces

Docker通过Namespaces来提供隔离的工作空间(Workspace),当你运行一个容器的时候,Docker为这个容器创建了数个不同类型的Namespaces,主要有以下类型:

pid namespace:提供进程隔离功能

net namespace:管理网络接口

ipc namespace:内部资源访问控制 (IPC:Inter Process Communication)

mnt namespace:管理文件系统挂载

uts namespace: 内核隔离以及版本识别(UTS:Unix Timesharing System)

CGroups(Control Groups)

Docker通过CGroup来限定容器只能使用特定的资源。举例来讲,Docker可以限制某个容器只能使用多少cpu及内存资源。

UnionFS(Union File System)

一种文件系统类型,可以运行在其他文件系统上,通过创建不同的层来使得容器文件系统更加轻量和快速。还有其他几种类似的文件系统,包括AUFS、btrfs、vfs和DeviceMapper。

3. Docker的安装部署

以下命令是在Centos7上的命令,其他操作系统会存在一些差异

yum install docker:通过yum下载docker相关的依赖systemctl enable docker: 开机运行systemctl start docker: 启动docker服务

执行完上述操作,docker服务已经在运行了,可以通过执行 docker version 和 docker info 命令查看docker的版本以及相关的信息。

4. Docker的使用

4.1 Dockerfile文件

我们之前有提到Docker可以将应用程序打包成一个镜像,那么如何生成镜像文件呢?这就需要用到Dockerfile文件。它是一个文本文件,用来配置镜像,Docker根据该文件生成二进制的镜像文件。以下是一个Dockerfile文件示例:

# 该镜像文件继承官方的nginx镜像,冒号表示标签,这里标签是latest,表示最新的版本FROM nginx:latest# 将_book目录下的文件copy至镜像文件的/var/www/public目录COPY _book /var/www/public/COPY  nginx_app.conf/etc/nginx/conf.d/ nginx_app.conf# 将容器的8080端口暴露出来,允许外部连接这个端口EXPOSE 8080# 容器启动后执行 nginx -g daemon off 命令CMD ["nginx", "-g", "daemon off;"]

4.2 创建镜像文件

有了Dockerfile文件以后,就可以用docker build命令创建镜像文件了。

docker build -t zcloud-document:0.0.1.docker image ls

如果运行成功,就可以看到新生成的镜像文件zcloud-document了。

4.3 生成容器

# 生成容器docker run -p 8080:8080 -it zcloud-document:0.0.1docker ps# 重新生成一个新的镜像标签,并指向原来的镜像docker tag zcloud-document:0.0.1 10.0.0.183:5000/zcloud/zcloud-document:0.0.1# 推送到私有镜像仓库docker push 10.0.0.183:5000/zcloud/zcloud-document:0.0.1

关于Docker其他的一些操作命令,大家可以自行查阅,网上介绍的文章也比较多,参考文章:Docker 入门教程(https://docs.docker.com/get-started/)


文件 镜像 容器 应用 生成 运行 命令 系统 架构 程序 资源 隔离 可以通过 进程 服务 管理 不同 之间 仓库 应用程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州万易互联网科技有限公司 互联网科技网 山东特亿宝互联网科技有限公司 蓝思科技飞鸽互联网 期待互联网科技 万易互联网科技有限公司 凡科互联网科技 互联网科技公司有哪些 阿里巴巴算科技企业还是互联网 重庆威客帮互联网科技 晓花互联网科技有限公司网址 坤平互联网科技 乌苏新华互联网科技做什么的 图游互联网科技 福建互联网展示科技馆设计 广州智享互联网科技 互联网时代高科技布局 北京瑞云互联网科技有限公司 知域互联网科技有限公司官网 互联网科技快速发展优美句子 互联网电商科技 美国互联网科技巨头监管 金融科技 互联网金融 互联网医疗科技 互联网养老 桔豆科技 四个字互联网科技公司取名 互联网科技革命什么开始 佛山市翊博互联网络科技有限公司 上海钢联属于互联网科技股吗 互联网科技职业技能培训学校
0