一、应用部署的演化
1、最初的应用部署
部署一个应用;安装配置依赖的环境;运行应用程序。
出现的问题:
- 要部署多个应用,但是依赖有冲突;
- 某些应用自身的问题影响到别的应用等等需要隔离运行环境的场景。
2、使用虚拟机技术
支持部署多个应用;应用间互不影响;解决了不同应用间需要进行隔离的问题。
出现的问题:
-
每台虚拟机依旧需要准备应用所依赖的环境;
-
虚拟机资源消耗大,需要分配单独的内存与磁盘空间;
-
部署简单地应用也得安装完整的操作系统,资源浪费,启动停止速度慢;
3、使用容器技术
使用容器或者将容器与虚拟机配合使用的形式,为应用的部署和管理提供极大的灵活性。容器技术作为云原生的基石,其早在20年前就已诞生,近些年经历了飞速发展的黄金时期。而Docker容器作为容器家族的一员,目前占有极大地市场份额,是目前最流行的容器,而且它还将流行很长一段时间。
二、Docke简介
1、Docker是什么
Docker公司:
原名dotCloud,起初是一家Paas提供商,于2013年初开发出Docker相关技术及产品。 公司于2013年底改名为Docker Inc,目前是全球最大的Docker容器服务提供商。公司网站www.docker.com。
Docker开源项目:
Docker也用于指代开源Docker项目,该项目是基于Go语言实现的容器项目。目前已形成了由多个开源项目(Swarm、Moby等)围绕Docker容器的完整生态体系。
Docker引擎:
技术人员在谈到Docker时,一般是指Docker引擎。也可以简单地理解为一种运行在Linux、Windows上的软件,用于创建、编排和管理Docker容器。 Docker引擎主要有两个版本:企业版(EE)和社区版(CE)
2、为什么使用Docker
更快速的交付和部署:
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
更高效的资源利用:
运行Docker容器不需要额外的虚拟化管理程序,对系统资源的利用率更高,无论是应用执行速度,内存消耗以及文件存储速度,都要比传统虚拟机技术更高效。
更轻松的迁移和扩展:
由于Docker确保了执行环境的一致性,Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑等,同时支持主流的操作系统发行版本。这种兼容性可以让用户在不同的平台间轻松完成迁移
与虚拟机比较的优势:
| 优势 | |
|---|---|
| 资源消耗少 | Docker在操作系统级别进行虚拟化,Docker容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。 |
| 先进的设计理念 | Docker通过类似Git的设计理念来方便用户获取、分发和更新应用镜像、存储复用、增量更新 |
| 速度快 | Docker容器的启动停止可以在秒级实现,相较于传统的虚拟机方式(数分钟)要快很多。 |
三、Docker核心概念
Docker镜像:
镜像是Docker容器创建的基础,是一个只读的文件和文件夹的组合
Docker容器:
容器可以看作是镜像的运行实体,镜像是静态的只读文件,而容器运行着真正的应用进程
Docker仓库:
类似于代码仓库,镜像仓库用于存储和分发Docker镜像。镜像仓库有公有和私有两种类型
镜像、容器和仓库之间的关系
四、Docker安装
以下是Windows桌面版安装步骤
下载地址:www.docker.com/products/do…
下载完成后双击进入安装界面
点击OK,进入安装过程,等待安装完成
安装完成后,需要重启系统
运行docker desktop
首次运行需要安装WSL2升级。根据引导的链接网页步骤安装即可。完成后,使用CMD命令行窗口即可运行docker命令。
配置私有镜像仓库地址
五、Dockerfile
1、Dockerfile简介
什么是Dockerfile:
Dockerfile是一个文本格式的配置文件,其内容由若干指令和注释说明构成,用户可以使用Dockerfile开快速创建自定义的镜像
Dockerfile的基本结构:
一个典型的Dockerfile应当包含四个部分:基础镜像信息、维护者信息、镜像操作指令、容器启动指令
2、Dockerfile指令说明
配置指令
| 指令 | 说明 |
|---|---|
| ARG | 定义创建镜像过程中使用的变量 |
| FROM | 指定所创建镜像的基础镜像 |
| LABEL | 为生成的镜像添加元数据标签信息 |
| EXPOSE | 声明镜像内服务监听的端口 |
| ENV | 指定环境变量 |
| ENTRYPOINT | 指定镜像的默认入口命令 |
| VOLUME | 创建一个数据卷挂载点 |
| USER | 指定运行容器时的用户名或者UID |
| WORKDIR | 配置工作目录 |
| ONBUILD | 创建子镜像时指定自动执行的操作指令 |
| STOPSIGNAL | 指定退出的信号值 |
| HEALTHCHECK | 配置所启动容器如何进行健康检查 |
| SHELL | 指定默认的shell类型 |
操作指令
| 指令 | 说明 |
|---|---|
| RUN | 运行指定命令 |
| CMD | 启动容器时指定默认执行的命令 |
| ADD | 添加内容到镜像 |
| COPY | 复制内容到镜像 |
参考资料(Dockerfile详解):
六、Docker镜像制作
1、docker build命令
使用dockerfile制作镜像
docker build [参数选项] 镜像名:标签
demo:
docker build --no-cache -f mydemo_dockerfile -t mydemo_images:20211019
参数说明:
-
--no-cache:创建镜像的过程不使用缓存 -
-f:指定要使用的Dockerfile路径,不指定默认寻找当前目录下的Dockerfile -
-t:--tag的简写,构建镜像时为镜像指定名称和标签
PS:注意命令末尾有一个点号,这个点号的作用是指定镜像构建过程中的上下文环境的目录
参考资料:www.runoob.com/docker/dock…
2、docker images命令
列出本地镜像列表
docker images
列表展示信息说明:
参考资料:www.runoob.com/docker/dock…
七、Docker容器的操作
1、docker run命令
使用镜像生成并启动容器
docker run [参数选项] 镜像名:标签
demo:
docker run -p 8008:8080 -d --name mydemo_container mydemo_images:20211019
命令解释:
使用镜像`mydemo_images:20211019`运行一个名为`mydemo_container`的容器,并将该容器的`8080`端口映射到宿主机的`8008`端口
参数说明:
- -p:指定端口映射,格式为:主机(宿主)端口**:**容器端口
- -d:后台运行容器,并返回容器ID
- --name:为容器指定名称
- -v:挂载文件夹或者文件
参考资料: www.runoob.com/docker/dock…
2、docker ps命令
查看(运行中的)容器列表
docker ps
参数说明:
- -a:查看所有容器列表,包括未运行的
列表展示说明:

参考资料: www.runoob.com/docker/dock…
3、docker logs命令
查看指定容器的日志
docker logs [参数选项] 容器ID
参数说明:
- --tail:仅列出最新的N条日志。示例:--tail=10 列出最新的10条日志
参考资料: www.runoob.com/docker/dock…
4、docker exec 命令
进入指定容器
docker exec [参数选项] 容器ID COMMAND [ARG...]
demo示例:
docker exec -it 875f4ff0e597 /bin/bash
PS:退出容器可以使用命令exit或者快捷键:先Ctrl+P再Ctrl+Q。两种方式都可以退出并保持容器的运行
参考资料: www.runoob.com/docker/dock…
5、docker start/stop/restart 命令
启动/停止/重启 一个或者多个容器
docker start/stop/restart 容器ID1 容器ID2 容器ID3
参考资料: www.runoob.com/docker/dock…
6、docker rm命令
删除一个或多个容器
docker rm [参数选项] 容器ID1 容器ID2...
参数说明:
- -f:强制删除(运行中的)容器,不加该参数删除运行时的容器会提示错误
- -l : 移除容器间的网络连接,而非容器本身。
- -v : 删除与容器关联的卷。
参考资料: www.runoob.com/docker/dock…
7、docker rmi命令
删除本地一个或多个镜像
docker rmi [参数选项] 镜像ID1 镜像ID2...
参数说明:
- -f:强制删除
- --no-prune : 不移除该镜像的过程镜像,默认移除;
参考资料: www.runoob.com/docker/dock…
Docker命令大全: www.runoob.com/docker/dock…