
Docker 是一个应用打包、分发、部署的工具。你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
功能 | 普通虚拟机 | Docker |
|---|---|---|
跨平台 | 通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行 | 支持的系统非常多,各类 windows 和 Linux 都支持 |
自动化 | 需要手动安装所有东西 | 一个命令就可以自动部署好所需环境 |
稳定性 | 稳定性一般,不同系统差异大 | 稳定性较好,不同系统都一样部署方式 |
性能 | 性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了 | 性能好,只虚拟软件所需运行环境,最大化减少没用的配置 |
再来看几个概念理解
打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。
镜像:可以理解为软件安装包,可以方便的进行传播和安装。
容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。
官网下载地址:https://dockerdocs.cn/get-docker/index.html
安装完成后,启动Docker服务:
1.在Linux上,可以使用以下命令启动Docker服务:
sudo service docker start2.在Windows或macOS上,可以在Docker桌面应用程序中启动Docker服务。
安装完成后,您可以使用Docker命令行界面(CLI)来创建和运行容器。以下是创建和运行容器的步骤:
1.查找可用的镜像。您可以使用以下命令查找可用的镜像:
docker search <镜像名称>2.拉取镜像。您可以使用以下命令从Docker Hub或第三方镜像仓库拉取所需的镜像:
docker pull <镜像名称>3.运行容器。您可以使用以下命令运行一个容器:
docker run -d <镜像名称> <命令>其中,-d选项表示在后台运行容器,<镜像名称>是您要使用的镜像名称,<命令>是容器启动时要执行的命令。例如,要运行一个基于Ubuntu的容器并执行echo命令,可以运行以下命令:
docker run -d ubuntu echo "Hello, world!"查看正在运行的容器。您可以使用以下命令查看正在运行的容器列表:
docker ps进入容器的终端。您可以使用以下命令进入容器的终端:
docker exec -it <容器ID> /bin/bash其中,<容器ID>是容器的唯一标识符。进入终端后,您可以在容器内执行命令。例如,要在容器内执行ls命令,可以运行以下命令:
docker exec -it <容器ID> ls解决方式:
1.控制面板->程序->启用或关闭 windows 功能,开启 Windows 虚拟化和 Linux 子系统(WSL2)
2.命令行安装 Linux 内核:
wsl.exe --install -d Ubuntu3.设置开机启动 Hypervisor
bcdedit /set hypervisorlaunchtype auto对比维度 | 直接安装的缺点 | Docker 安装的优点 |
|---|---|---|
安装便捷性 | 安装麻烦,需处理各类依赖,易出现运行报错(如 WordPress、ELK 等) | 一个命令即可完成安装,快速便捷 |
镜像资源 | 需自行寻找官方安装包,资源获取繁琐 | 拥有大量现成镜像,可直接拉取使用 |
系统兼容性 | 对 Windows 不友好,部分 Linux 专享软件无法运行 | 无系统兼容问题,Linux 专属软件可正常运行 |
多版本共存 | 不支持多版本软件共存,易产生环境冲突 | 支持软件多版本独立部署,互不干扰 |
系统性能影响 | 安装软件过多,占用系统资源,拖慢电脑速度 | 容器化隔离,用完可随时删除,不影响系统性能 |
跨平台一致性 | 不同系统 / 硬件的安装方式差异大,部署繁琐 | 只需安装 Docker,跨平台统一部署命令,适配所有环境 |

这里我以安装redis为例:
进入 docekr官方镜像仓库查找 Redis
要访问 Docker Hub,可以直接在浏览器中访问 https://hub.docker.com/
查找 Redis
docker search Redis拉取 Redis 镜像
docker pull Redis使用命令运行:
docker run -d -p 6379:6379 --name redis redis:latest到这里就可以成功运行了
给大家一些相关命令可以参考
新建专属目录存放 Dockerfile 和所需文件,避免文件混乱
mkdir -p /my-docker/nginx-custom && cd /my-docker/nginx-customDockerfile 是镜像构建的 “说明书”,定义基础镜像、操作指令、启动命令等,在构建目录下创建Dockerfile文件:
# 1. 指定基础镜像(必填,推荐官方镜像)
FROM nginx:alpine # 轻量级Alpine版本的Nginx,减少镜像体积
# 2. 维护者信息(可选)
MAINTAINER dev@example.com
# 3. 执行镜像内操作:复制自定义文件到容器指定目录
COPY index.html /usr/share/nginx/html/ # 替换Nginx默认首页
# 4. 暴露端口(可选,仅声明,不实际映射)
EXPOSE 80
# 5. 启动容器时执行的命令(可选,若基础镜像已有可省略)
CMD ["nginx", "-g", "daemon off;"]参考文档:Dockerfile参考文档
部分指令说明:
指令 | 作用 |
|---|---|
FROM | 指定基础镜像(如 Ubuntu、CentOS、Nginx 等),所有镜像必须基于基础镜像构建 |
COPY/ADD | 将宿主机文件复制到镜像内(ADD 支持自动解压压缩包) |
RUN | 构建镜像时执行的命令(如安装软件、创建目录,多行用 && 拼接减少分层) |
WORKDIR | 指定后续指令的工作目录,避免使用 cd 命令 |
ENV | 设置环境变量(如 ENV PATH /usr/local/bin:$PATH) |
EXPOSE | 声明容器运行时暴露的端口(仅文档作用,运行时需用 -p 映射) |
CMD/ENTRYPOINT | 容器启动时执行的命令(CMD 可被运行命令覆盖,ENTRYPOINT 不可覆盖) |
使用docker build命令,基于 Dockerfile 构建镜像,格式如下:
docker build -t [镜像名称]:[标签] [Dockerfile所在目录]比如:
docker build -t mytest:v1 .终端会逐行执行 Dockerfile 指令,输出每一步的构建日志,最后显示Successfully built [镜像ID]则构建成功。
我们可以通过docker images查看已构建的镜像
运行我们上面的mytest
docker run -p 8080:8080 --name test-hello mytest:v1-p 映射容器内端口到宿主机 --name 容器名字 -d 后台运行
如果没有问题,我们也可以将镜像推送到仓库
docker push yourusername/mytest:v1当然你得先登录到你的Docker 仓库。
很多人在使用的时候通常会遇到这样的问题:
比如:使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新build和run;容器里面产生的数据,例如 错误打印,log日志文件,数据库备份文件,容器删除后就丢失了等等。
那么我们就可以对目录进行挂载来解决这些问题。
比如我下面这样写:
docker run -p 8080:8080 --name test-hello -v E:/code:/app -d mytest:v1首先Docker官方提供了一个 镜像库,里面包含了大量镜像,基本各种软件所需依赖都有,要什么直接上去搜索。那么我们也可以把自己 build 出来的镜像上传到 docker 提供的镜像库中,方便我们传播和使用。
首先我们注册一个账号:
这里就不详细说了,大家自行注册就好。
注册完毕后然后
命令行登录账号:
docker login -u username新建一个tag,注意这里的名字必须跟你注册账号一样
docker tag mytest:v1 username/mytest:v1推送我们的镜像:
docker push username/mytest:v1进行部署
docker run -dp 8080:8080 username/mytest:v1当我们的应用需要多个服务(如 Web 服务 + 数据库)时,Docker Compose 可通过配置文件一键启动所有服务,避免手动逐个启动容器。
我们来看下具体怎么做:
curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose,并添加执行权限:chmod +x /usr/local/bin/docker-compose
version: '3'
services:
web:
image: myflaskapp:v1.0
ports:
- "5000:5000"
depends_on:
- db # 依赖数据库服务
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: flaskdb
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql # 数据持久化
volumes:
mysql-data: # 定义数据卷docker-compose up -d(在 docker-compose.yml 所在目录执行)
docker-compose down(如需保留数据,添加 -v 参数可删除数据卷)
容器默认的存储是临时的,容器删除后数据会丢失,常用的持久化方案有两种:
Docker 默认提供三种网络模式:
最后绘制一份思维导图,帮助大家进行理解

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。