
后来我推荐他试试Docker,两周后他跑过来跟我说:“哥,这玩意儿也太香了!现在我把项目打包成容器,不管是本地、测试还是生产环境,一键运行,再也不用跟运维掰扯环境问题了。” 其实Docker没那么玄乎,今天我就把这套“零基础也能上手”的实操方法分享给你,不用懂太多底层原理,跟着步骤做,你也能从“容器小白”变成“部署高手”。
Docker基础:从安装到核心操作全流程
不同系统的Docker安装指南(附避坑技巧)
很多人卡在第一步——安装。其实Docker对主流系统支持都很好,但不同系统的安装细节有点区别,我整理了一份表格,你可以对着操作:
系统类型 | 安装命令 | 关键配置 | 常见问题 |
---|---|---|---|
Windows 10/11专业版 | 官网下载Docker Desktop安装包,双击下一步 | 启用Hyper-V和容器功能 | WSL 2未安装:在PowerShell中运行wsl install |
Mac | 官网下载Docker Desktop for Mac,拖到应用文件夹 | 芯片适配:M1/M2选Apple Silicon版 | 内存不足:偏好设置→Resources调大内存( 至少4GB) |
Linux(Ubuntu) | sudo apt-get install docker-ce docker-ce-cli containerd.io | 添加用户到docker组:sudo usermod -aG docker $USER | 权限报错:重启终端或注销重登录 |
我踩过的坑
:去年帮一个朋友在Linux服务器上装Docker,他直接用apt install docker装了,结果启动容器一直报错“no space left on device”。后来发现他装的是旧版本docker.io,不是官方推荐的docker-ce,镜像存储路径默认在系统盘,而系统盘只剩5GB空间了。你安装时一定要注意,Linux系统 用Docker官方源(” rel=”nofollow”),别用系统自带的旧版本,不然后面麻烦不断。
装好Docker后,第一件事是配置镜像加速。国内直接拉取Docker Hub的镜像会很慢,我一般用阿里云的镜像加速器(需要注册阿里云账号,在容器镜像服务里获取专属加速地址)。配置方法很简单,Windows/Mac在Docker Desktop的设置里填加速地址,Linux创建/etc/docker/daemon.json
文件,写入:
{
"registry-mirrors": ["https://你的加速地址.mirror.aliyuncs.com"]
}
保存后重启Docker(sudo systemctl restart docker),这样拉取镜像速度能快10倍以上。
接下来是核心操作,你只要记住三个“老朋友”:镜像(Image)、容器(Container)、仓库(Repository)。我喜欢把镜像比作“食谱”,容器是“按食谱做出来的菜”,仓库就是“食谱大全”。你可以从仓库下载别人的“食谱”(拉取镜像),也可以自己写“食谱”(制作镜像),然后用“食谱”做出无数份“菜”(启动容器)。
最常用的命令
(这些我贴在桌面便利贴上,前两周每天都要查):
docker pull [镜像名]:[标签]
,比如拉取最新版Nginx:docker pull nginx:latest
docker images
docker run -d -p 8080:80 name mynginx nginx
,这里-d
是后台运行,-p
是端口映射(把容器的80端口映射到主机的8080端口),name
给容器起个名字 docker ps
,加-a
能看所有容器(包括停止的) docker stop mynginx
、docker rm mynginx
新手必知
:容器删除后,里面的数据也会跟着删!如果你要保存数据,一定要用“数据卷”(Volume)。比如启动MySQL时,我会用docker run -d -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 name mymysql mysql
,这里-v mysql-data:/var/lib/mysql
就是把容器的/var/lib/mysql
目录挂载到名为mysql-data
的数据卷,就算删了容器,数据还在数据卷里。
微服务部署实战:用Docker Compose编排多容器应用
如果你开发的是微服务项目,比如一个Web应用需要搭配数据库、Redis、消息队列,总不能一个个手动启动容器吧?这时候Docker Compose就派上用场了。它相当于一个“容器管家”,你写个配置文件(docker-compose.yml),告诉它要启动哪些容器、容器之间怎么连接、需要什么环境变量,然后一句docker-compose up -d
就能把整个服务栈跑起来。
我上个月做的一个小项目,用的是“Spring Boot后端 + Vue前端 + MySQL数据库 + Redis缓存”,四个服务用Docker Compose一键部署,比之前手动配Nginx反向代理、改数据库连接地址快多了。下面我带你写一个简单的docker-compose.yml,你跟着做一遍就明白了:
version: '3'
services:
web: # Web服务
image: nginx:latest
ports:
"80:80"
volumes:
./html:/usr/share/nginx/html # 挂载本地html目录到容器
depends_on:
db # 依赖db服务,会先启动db再启动web
db: # 数据库服务
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD=123456 # 数据库密码
MYSQL_DATABASE=testdb # 自动创建数据库
volumes:
mysql-data:/var/lib/mysql # 数据卷持久化数据
volumes:
mysql-data: # 定义数据卷
这个配置文件定义了两个服务:web(Nginx)和db(MySQL)。depends_on
确保db先启动,volumes
挂载本地文件和数据卷,ports
映射端口。你把这个文件保存到本地,在文件所在目录执行docker-compose up -d
,Docker Compose就会自动拉取镜像、创建网络、启动容器,整个过程不到1分钟。
服务间通信
:你可能会问,web服务怎么连接db服务?Docker Compose会自动创建一个网络,容器之间可以用服务名互相访问。比如在Nginx的配置文件里,数据库连接地址可以写db:3306
(服务名:端口),不用记IP地址,特别方便。 我 的技巧:写docker-compose.yml时,最好给每个服务加上restart: always
,这样容器挂了会自动重启;环境变量多的话,用.env
文件存(比如把数据库密码写在.env里,配置文件里用${MYSQL_PASSWORD}
引用),别直接写在yml里,安全又好维护。
如果你想自己制作镜像,需要写Dockerfile。比如你有个Node.js项目,Dockerfile可以这么写:
FROM node:16 # 基础镜像
WORKDIR /app # 工作目录
COPY package*.json ./ # 复制依赖文件
RUN npm install # 安装依赖
COPY . . # 复制项目文件
EXPOSE 3000 # 暴露端口
CMD ["node", "app.js"] # 启动命令
然后执行docker build -t mynodeapp .
就能生成镜像。我之前帮一个前端同事把他的React项目做成镜像,他惊讶地说:“原来不用配Node环境,直接启动容器就能跑?” 是的,这就是Docker的魅力——把应用和依赖“打包”成一个独立的“快递箱”,扔到任何支持Docker的环境都能开箱即用。
现在你可以试试:找个自己的小项目,按照上面的步骤用Docker跑起来,遇到问题别慌,Docker的错误提示通常很友好,比如“port is already allocated”就是端口被占用了,换个端口或者停掉占用的服务就行。如果实在解决不了,欢迎在评论区告诉我你的操作步骤和报错信息,我看到会回复。
对了,Docker官方有个“Docker Hub”(” rel=”nofollow”),里面有几百万个现成的镜像,你要找什么服务(Redis、MongoDB、Elasticsearch)直接搜,基本都能找到官方镜像,记得看“Pulls”数,优先选下载量大的,靠谱!
你按这些步骤操作时,有没有发现Docker其实没那么难?最开始我也觉得这是运维的活儿,不敢碰,后来逼着自己用了两周,现在开发新项目第一反应就是“这个用Docker怎么部署”。技术这东西,别怕,动手试试就会了。
说实话,零基础学Docker,官方文档真得好好啃啃,但你可能会觉得纯文字有点枯燥——我当时就是这样,对着Docker官网的“Get Started”看了半小时,脑子里全是“镜像层”“联合文件系统”这些词,越看越晕。后来我发现个小技巧:先快速过一遍官方文档(” rel=”nofollow”)的目录,知道大概有哪些核心概念,不用死磕细节,然后去找配套的视频教程跟着操作。B站上“尚硅谷Docker教程”和“狂神说Docker”都挺适合新手,老师会一步步演示安装、拉镜像、启动容器,你跟着敲命令,边做边理解,比干看文档快多了。我记得有次跟着视频学“数据卷挂载”,老师用“给容器配个‘外挂硬盘’”来比喻,一下子就懂了——原来数据卷就是让容器里的数据“住”到主机上,就算容器删了,数据还在,这种生活化的解释特别好记。
等你对基础操作有点感觉了,推荐看看《Docker实战》这本书,里面全是实战案例,比如怎么用Docker部署Java项目、怎么优化镜像大小,每个例子都有详细步骤,不像有些技术书光讲理论。我去年带的一个实习生,看完这本书第三章,就自己把他的Spring Boot小项目打包成了Docker镜像,还跑来跟我炫耀“现在部署只需要一条命令,比之前配Tomcat快10倍”。不过光看书还不够,一定要动手做自己的项目——哪怕是个简单的个人博客,用Docker跑起来Nginx+MySQL,过程中肯定会遇到问题:比如Nginx启动后访问不了,可能是端口没映射对;MySQL连不上,说不定是密码环境变量没设对。这时候别慌,去Docker Hub(” rel=”nofollow”)搜对应的镜像文档,比如你用MySQL,直接搜“mysql”,官方镜像页面里会写清楚启动命令、环境变量、数据卷挂载方法,甚至常见问题都有解答。要是还解决不了,Stack Overflow上搜报错信息,十有八九能找到类似问题,我之前遇到“容器启动后立即退出”的问题,就是在上面看到“得加交互参数或后台运行”的答案,一下子就解决了。
安装Docker时电脑配置有什么要求?
Docker对配置要求不高,主流电脑基本都能满足。Windows系统需要Windows 10 64位专业版/企业版(支持Hyper-V)或Windows 10家庭版配合WSL 2;Mac需要macOS 10.15+(Catalina及以上),M1/M2芯片需下载Apple Silicon版Docker Desktop;Linux系统推荐Ubuntu 18.04+、CentOS 7+等,内存 至少4GB(运行多个容器时 8GB+),硬盘预留10GB以上空间存放镜像和容器。
Docker镜像和容器有什么区别?
可以简单理解:镜像(Image)是“只读模板”,包含运行应用所需的代码、依赖、配置等,比如“Nginx镜像”“MySQL镜像”,相当于“食谱”;容器(Container)是镜像的“运行实例”,是动态的、可操作的,相当于“按食谱做出的菜”。一个镜像可以创建多个容器,容器删除后不影响镜像,镜像修改后需要重新创建容器才能生效。
删除容器后,里面的数据会丢失吗?如何避免?
默认情况下会丢失。因为容器本身是临时的,删除容器时,容器内的文件系统也会被删除。避免数据丢失的方法是使用“数据卷(Volume)”或“绑定挂载”:数据卷是Docker管理的持久化存储,通过-v 卷名:容器内路径挂载(如docker run -v mysql-data:/var/lib/mysql mysql);绑定挂载是将主机本地目录直接挂载到容器,通过-v 主机路径:容器内路径(如docker run -v /home/data:/app/data nginx),两种方式都能让数据独立于容器存在。
什么时候需要用Docker Compose?和直接用docker run有什么区别?
当你需要同时运行多个关联容器(比如Web服务+数据库+缓存)时,推荐用Docker Compose。直接用docker run需要手动执行多条命令,设置端口映射、网络连接、依赖顺序等,容易出错;而Docker Compose通过一个docker-compose.yml文件定义所有容器的配置(镜像、端口、 volumes、依赖关系等),执行docker-compose up -d就能一键启动所有服务,还支持docker-compose down一键停止并清理,适合本地开发、测试环境或简单的多容器部署场景。
零基础学Docker,除了这篇教程,还有哪些推荐的学习资源?
推荐从官方文档和实操结合学习:Docker官方文档(https://docs.docker.com/get-started/)有清晰的入门指南;B站“尚硅谷Docker教程”“狂神说Docker”等视频教程(适合喜欢看视频学习的同学);书籍方面,《Docker实战》《Docker容器与容器云》适合系统学习;另外可以多动手实践,比如用Docker部署自己的小项目(如个人博客、Demo应用),遇到问题查Docker Hub镜像文档(https://hub.docker.com/)或Stack Overflow,实战中进步最快。