logo
Home 战力冲刺 最全面版本

最全面版本

  • 2025-12-21 17:28:22

一、Docker的简介和安装先问Docker 是什么?Docker 是一个应用打包、分发、部署的工具。你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。

Docker通常用来做什么?应用分发、部署,方便传播给他人安装。特别是开源软件和提供私有部署的应用快速安装测试/学习软件,用完就丢(类似小程序),不把时间浪费在安装软件上。例如 Redis / MongoDB / ElasticSearch / ELK多个版本软件共存,不污染系统,例如 Python2、Python3,Redis4.0,Redis5.0Windows 上体验/学习各种 Linux 系统与虚拟机的对比功能

普通虚拟机

Docker

跨平台

通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行

支持的系统非常多,各类 windows 和 Linux 都支持

自动化

需要手动安装所有东西

一个命令就可以自动部署好所需环境

稳定性

稳定性一般,不同系统差异大

稳定性较好,不同系统都一样部署方式

性能

性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了

性能好,只虚拟软件所需运行环境,最大化减少没用的配置

几个概念理解再来看几个概念理解

打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包

分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装

部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。

镜像:可以理解为软件安装包,可以方便的进行传播和安装。

容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。

安装官网下载地址:https://dockerdocs.cn/get-docker/index.html

Linux 系统(以 CentOS 为例)卸载旧版本(若有):yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine安装依赖包:yum install -y yum-utils device-mapper-persistent-data lvm2配置 Docker 软件源:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装 Docker 引擎:yum install docker-ce docker-ce-cli containerd.io启动 Docker 并设置开机自启:systemctl start docker && systemctl enable docker验证安装:docker --version,输出版本信息即表示安装成功。Windows 系统(Windows 10 专业版 / 企业版)启用 “Hyper-V” 和 “容器” 功能:控制面板 → 程序 → 启用或关闭 Windows 功能,勾选对应选项后重启电脑。从 Docker 官网下载 Windows 版本安装包,双击运行并默认安装。安装完成后启动 Docker,右下角出现 Docker 图标即表示服务启动成功。验证安装:打开命令提示符(CMD),输入 docker --version,输出版本信息即可。安装完成后,启动Docker服务:

1.在Linux上,可以使用以下命令启动Docker服务:

代码语言:txt复制sudo service docker start2.在Windows或macOS上,可以在Docker桌面应用程序中启动Docker服务。

创建和运行容器安装完成后,您可以使用Docker命令行界面(CLI)来创建和运行容器。以下是创建和运行容器的步骤:

1.查找可用的镜像。您可以使用以下命令查找可用的镜像:

代码语言:txt复制docker search <镜像名称>2.拉取镜像。您可以使用以下命令从Docker Hub或第三方镜像仓库拉取所需的镜像:

代码语言:txt复制docker pull <镜像名称>3.运行容器。您可以使用以下命令运行一个容器:

代码语言:txt复制docker run -d <镜像名称> <命令>其中,-d选项表示在后台运行容器,<镜像名称>是您要使用的镜像名称,<命令>是容器启动时要执行的命令。例如,要运行一个基于Ubuntu的容器并执行echo命令,可以运行以下命令:

代码语言:txt复制docker run -d ubuntu echo "Hello, world!"查看正在运行的容器。您可以使用以下命令查看正在运行的容器列表:

代码语言:txt复制docker ps进入容器的终端。您可以使用以下命令进入容器的终端:

代码语言:txt复制docker exec -it <容器ID> /bin/bash其中,<容器ID>是容器的唯一标识符。进入终端后,您可以在容器内执行命令。例如,要在容器内执行ls命令,可以运行以下命令:

代码语言:txt复制docker exec -it <容器ID> ls常见报错wsl相关的报错:解决方式:

1.控制面板->程序->启用或关闭 windows 功能,开启 Windows 虚拟化和 Linux 子系统(WSL2)

2.命令行安装 Linux 内核:

代码语言:txt复制wsl.exe --install -d Ubuntu3.设置开机启动 Hypervisor

代码语言:txt复制bcdedit /set hypervisorlaunchtype auto二、Docker安装软件 Docker 安装的优点对比维度

直接安装的缺点

Docker 安装的优点

安装便捷性

安装麻烦,需处理各类依赖,易出现运行报错(如 WordPress、ELK 等)

一个命令即可完成安装,快速便捷

镜像资源

需自行寻找官方安装包,资源获取繁琐

拥有大量现成镜像,可直接拉取使用

系统兼容性

对 Windows 不友好,部分 Linux 专享软件无法运行

无系统兼容问题,Linux 专属软件可正常运行

多版本共存

不支持多版本软件共存,易产生环境冲突

支持软件多版本独立部署,互不干扰

系统性能影响

安装软件过多,占用系统资源,拖慢电脑速度

容器化隔离,用完可随时删除,不影响系统性能

跨平台一致性

不同系统 / 硬件的安装方式差异大,部署繁琐

只需安装 Docker,跨平台统一部署命令,适配所有环境

如何安装软件?这里我以安装redis为例:

进入 docekr官方镜像仓库查找 Redis

要访问 Docker Hub,可以直接在浏览器中访问 https://hub.docker.com/

查找 Redis

代码语言:txt复制docker search Redis拉取 Redis 镜像

代码语言:txt复制docker pull Redis使用命令运行:

代码语言:txt复制docker run -d -p 6379:6379 --name redis redis:latest到这里就可以成功运行了

其他相关命令参考给大家一些相关命令可以参考

docker ps 查看当前运行中的容器docker images 查看镜像列表docker rm container-id 删除指定 id 的容器docker rmi image-id 删除指定 id 的镜像docker volume ls 查看 volume 列表docker network ls 查看网络列表docker stop/start container-id 停止/启动指定 id 的容器三、创建自己的镜像1.创建自己的目录新建专属目录存放 Dockerfile 和所需文件,避免文件混乱

代码语言:txt复制mkdir -p /my-docker/nginx-custom && cd /my-docker/nginx-custom2.编写 DockerfileDockerfile 是镜像构建的 “说明书”,定义基础镜像、操作指令、启动命令等,在构建目录下创建Dockerfile文件:

代码语言:txt复制# 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 不可覆盖)

3.构建 Docker 镜像使用docker build命令,基于 Dockerfile 构建镜像,格式如下:

代码语言:txt复制docker build -t [镜像名称]:[标签] [Dockerfile所在目录]比如:

代码语言:txt复制docker build -t mytest:v1 .终端会逐行执行 Dockerfile 指令,输出每一步的构建日志,最后显示Successfully built [镜像ID]则构建成功。

我们可以通过docker images查看已构建的镜像

4.测试运行 Docker 镜像运行我们上面的mytest

代码语言:txt复制docker run -p 8080:8080 --name test-hello mytest:v1-p 映射容器内端口到宿主机 --name 容器名字 -d 后台运行

如果没有问题,我们也可以将镜像推送到仓库

代码语言:txt复制docker push yourusername/mytest:v1当然你得先登录到你的Docker 仓库。

四、进行目录挂载很多人在使用的时候通常会遇到这样的问题:

比如:使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新build和run;容器里面产生的数据,例如 错误打印,log日志文件,数据库备份文件,容器删除后就丢失了等等。

那么我们就可以对目录进行挂载来解决这些问题。

常用挂载方式bind mount 直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上volume 由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上tmpfs mount 适合存储临时文件,存宿主机内存中。不可多容器共享。比如我下面这样写:

代码语言:txt复制docker run -p 8080:8080 --name test-hello -v E:/code:/app -d mytest:v1五、发布和部署首先Docker官方提供了一个 镜像库,里面包含了大量镜像,基本各种软件所需依赖都有,要什么直接上去搜索。那么我们也可以把自己 build 出来的镜像上传到 docker 提供的镜像库中,方便我们传播和使用。

首先我们注册一个账号:

这里就不详细说了,大家自行注册就好。

注册完毕后然后

命令行登录账号:

代码语言:txt复制docker login -u username新建一个tag,注意这里的名字必须跟你注册账号一样

代码语言:txt复制 docker tag mytest:v1 username/mytest:v1推送我们的镜像:

代码语言:txt复制docker push username/mytest:v1进行部署

代码语言:txt复制 docker run -dp 8080:8080 username/mytest:v1六、Docker Compose管理多容器应用当我们的应用需要多个服务(如 Web 服务 + 数据库)时,Docker Compose 可通过配置文件一键启动所有服务,避免手动逐个启动容器。

我们来看下具体怎么做:

1.安装 Docker Compose(Linux 系统):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

2.编写 docker-compose.yml 文件:代码语言:txt复制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: # 定义数据卷

3.启动所有服务:docker-compose up -d(在 docker-compose.yml 所在目录执行)

4.停止所有服务:docker-compose down(如需保留数据,添加 -v 参数可删除数据卷)

七、Docker 进阶技巧 镜像优化:减小体积 + 提升构建速度采用多阶段构建:仅在构建阶段安装依赖,最终镜像只保留运行所需文件,大幅减小体积。使用轻量级基础镜像:如 alpine 版本(体积仅几 MB),替代完整版操作系统镜像。合理排序 Dockerfile 指令:将频繁变动的文件(如应用代码)放在最后,利用镜像缓存提升构建速度。数据持久化:避免容器删除导致数据丢失容器默认的存储是临时的,容器删除后数据会丢失,常用的持久化方案有两种:

数据卷(Volumes):Docker 管理的宿主机文件系统,生命周期独立于容器,是推荐方案。绑定挂载(Bind Mounts):直接挂载宿主机的任意目录到容器,灵活性高,但需手动管理目录权限。网络配置:实现容器间通信Docker 默认提供三种网络模式:

桥接模式(bridge):默认模式,容器通过 Docker 网桥与宿主机通信,容器间可通过容器名或 IP 访问。主机模式(host):容器直接使用宿主机的网络,无端口映射开销,但网络隔离性差。自定义网络:通过 docker network create 创建自定义网络,容器加入后可通过容器名直接通信,稳定性更高。Docker常见问题排查容器启动失败:通过 docker logs 容器ID 查看日志,大概率是端口占用、配置错误或依赖缺失。镜像拉取缓慢:配置国内镜像加速器,或使用私有仓库。容器间无法通信:检查是否在同一网络,自定义网络需确保容器已加入该网络。数据丢失:确认是否使用了数据卷或绑定挂载,避免直接依赖容器内临时存储。最后绘制一份思维导图,帮助大家进行理解

Previous Post
周易江湖
Copyright © 2088 战力飙升活动特区 - 专属特权限时解锁 All Rights Reserved.
友情链接