别再跟我说不会用Docker了,看完这篇还学不会你来找我!
摘要:Docker这东西吧,看着挺唬人,其实用起来也就那么回事。我刚开始也觉得麻烦,后来发现真香了。这篇文章记录了我从安装到实际使用的全过程,没啥高大上的理论,就是手把手教你怎么用。
目录

Docker到底是干啥的
说实话,我刚开始接触Docker的时候也挺懵的,这玩意儿到底有啥用?不就是个容器嘛,搞得跟多高大上似的。
用了一段时间后我发现,Docker其实就是解决这个问题的:你在自己电脑上开发得好好的,一到服务器上就跑不起来。为啥?环境不一样啊!Python版本不对、依赖包冲突、配置文件不对……这些破事儿谁遇到谁头大。
Docker的思路很简单:我把你的应用连同它需要的所有环境一起打包,就像一个集装箱一样。不管你在哪台机器上跑,只要装了Docker,就能运行。
我用Docker主要干这几件事:
- 本地开发环境:比如我想测试个MySQL,不用在自己电脑上装,直接拉个镜像就跑
- 部署应用:打包好应用,扔到服务器上就能用
- 隔离服务:每个服务跑在自己的容器里,互不干扰
- 快速搭建环境:新人入职,一条命令就能把开发环境搭好
就这么简单。
安装配置一步到位
Windows/Mac 安装
如果你用的是Windows或者Mac,那恭喜你,安装超级简单。
步骤:
- 访问 https://www.docker.com/products/docker-desktop
- 下载对应系统的版本
- 双击安装,一路下一步
- 安装完重启电脑
- 打开Docker Desktop,看到小鲸鱼图标就成功了
整个过程跟装普通软件没啥区别,5分钟搞定。
Linux 安装

Linux用户稍微麻烦点,但也不难。我以Ubuntu为例:
# 更新包管理器
sudo apt update
# 安装Docker
sudo apt install docker.io
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
重要提示: 如果你不想每次都输sudo,可以把自己加到docker用户组:
sudo usermod -aG docker $USER
然后注销重新登录就行。
验证安装
装好后,跑个测试命令看看:
docker run hello-world
如果看到"Hello from Docker!"的欢迎信息,说明安装成功了。
我第一次看到这个的时候还挺激动的,虽然就一行字,但意味着我的Docker能正常工作了。
核心概念快速理解

在开始用之前,你得搞清楚几个基本概念。别怕,我尽量说得通俗点。
镜像(Image)vs 容器(Container)

这个最容易搞混。
镜像就像是安装包或者模板。比如你想装个MySQL,你得先下载MySQL的安装包对吧?这个安装包就是镜像。
容器是镜像运行起来的实例。就像你安装了MySQL后,运行的那个MySQL服务就是容器。
关系:
- 一个镜像可以运行多个容器
- 容器是镜像的可运行实例
- 镜像是只读的,容器是可读写的
类比:
- 镜像 = 菜谱
- 容器 = 按菜谱做出来的菜
Dockerfile
Dockerfile就是个脚本文件,告诉Docker怎么构建你的镜像。
比如你想打包一个Python应用,Dockerfile大概长这样:
# 基于Python 3.9镜像
FROM python:3.9
# 设置工作目录
WORKDIR /app
# 复制代码
COPY . /app
# 安装依赖
RUN pip install -r requirements.txt
# 启动命令
CMD ["python", "app.py"]
就这么简单,每行干一件事,一看就懂。
Docker Compose
如果你要跑多个容器(比如Web应用+数据库),一个个启动太麻烦了。Docker Compose就是用来管理多个容器的。
你写一个docker-compose.yml文件,定义好所有服务,然后一条命令就能全部启动。
实操演示:从零开始
好了,理论说得够多了,来点实际的。
实战一:跑个Nginx网站
咱们先从最简单的开始——用Docker跑个Nginx网站。
步骤1:拉取镜像
docker pull nginx
这个命令会从Docker Hub(镜像仓库)下载Nginx镜像。第一次可能需要等会儿,取决于你网速。
步骤2:运行容器
docker run -d -p 8080:80 --name my-nginx nginx
让我解释下这串命令:
-d:后台运行(不占终端)-p 8080:80:把容器的80端口映射到本机的8080端口--name my-nginx:给容器起个名字nginx:使用的镜像
步骤3:访问测试
打开浏览器,访问 http://localhost:8080
如果看到Nginx的欢迎页面,恭喜你,成功了!
我第一次看到自己用Docker跑起来的网站时,还挺有成就感的。虽然就是个默认页面,但意味着我搞定了。
常用命令:
# 查看运行中的容器
docker ps
# 停止容器
docker stop my-nginx
# 启动容器
docker start my-nginx
# 删除容器
docker rm my-nginx
# 查看日志
docker logs my-nginx
实战二:打包自己的应用

光跑别人的镜像有啥意思,咱们来打包自己的应用。
假设你有个简单的Python Flask应用:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
步骤1:创建Dockerfile
在项目根目录创建Dockerfile(注意没后缀):
FROM python:3.9-slim
WORKDIR /app
COPY app.py .
RUN pip install flask
EXPOSE 5000
CMD ["python", "app.py"]
步骤2:构建镜像
docker build -t my-flask-app .
-t my-flask-app:给镜像起个名字.:表示当前目录
构建过程会花点时间,Docker会:
- 下载Python基础镜像
- 复制你的代码
- 安装依赖
- 打包成镜像
步骤3:运行容器
docker run -p 5000:5000 my-flask-app
访问 http://localhost:5000,就能看到"Hello, Docker!"了。
我当时的感受:
当我第一次把自己写的应用打包成Docker镜像,然后在另一台电脑上跑起来的时候,真的觉得这玩意儿挺牛的。不用配环境,不用装依赖,一条命令就能跑,太爽了。
实战三:用Docker Compose跑多服务应用

实际项目中,你肯定不止跑一个服务。比如你有Web应用+数据库+Redis,这时候Docker Compose就派上用场了。
场景: 跑个WordPress博客
步骤1:创建docker-compose.yml
version: '3'
services:
# MySQL数据库
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
- db_data:/var/lib/mysql
# WordPress
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
volumes:
db_data:
看着有点长?其实挺简单的:
- 定义了两个服务:db(数据库)和wordpress
- 配置了环境变量
- 设置了端口映射
- 创建了数据卷(持久化数据)
步骤2:启动服务
docker-compose up -d
就这么一条命令,Docker会自动:
- 下载MySQL和WordPress镜像
- 创建容器
- 配置网络
- 启动所有服务
步骤3:访问WordPress
打开浏览器访问 http://localhost:8080
就能看到WordPress的安装页面了,按提示一步步配置就行。
停止服务:
docker-compose down
我当时的体验:
以前搭WordPress,我得:
- 装Apache/Nginx
- 装MySQL
- 装PHP
- 配置各种东西
- 下载WordPress
- 配置文件
- 创建数据库
……
现在用Docker Compose,一条命令搞定。而且以后要迁移,直接把整个目录拷走就行,环境都在容器里。
实战四:数据持久化
有个问题你肯定会遇到:容器删了,数据也没了。
比如你在容器里创建了数据库,结果一不小心把容器删了,数据全没了。咋办?
解决方案:数据卷(Volume)
数据卷就是把你宿主机(你的电脑)的目录挂载到容器里,这样数据就持久化了。
示例:
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root123 \
-v /my/own/datadir:/var/lib/mysql \
mysql:8.0
这里的-v /my/own/datadir:/var/lib/mysql就是:
- 把本机的
/my/own/datadir目录 - 挂载到容器的
/var/lib/mysql目录
这样即使容器删了,数据还在本机的目录里。
我的血泪教训:
刚开始用Docker的时候,我没注意数据持久化,结果一不小心删了容器,数据库全没了。从那以后,我所有重要的服务都用数据卷。
常见问题和解决方案
用Docker这段时间,我遇到了不少坑,总结一下,希望能帮到你。
问题一:权限问题
现象: 运行Docker命令提示权限不足
解决:
# 把自己加到docker组
sudo usermod -aG docker $USER
# 注销重新登录
或者每次命令前加sudo。
问题二:端口被占用
现象: 启动容器提示端口已被占用
解决:
# 查看谁占用了端口
sudo lsof -i :8080
# 杀掉进程
sudo kill -9 <PID>
# 或者换个端口
docker run -p 8081:80 nginx
问题三:容器启动失败
现象: 容器启动后立即退出
解决:
# 查看日志
docker logs <容器名>
# 进入容器调试
docker run -it <镜像名> /bin/bash
一般日志里会告诉你为啥失败。
问题四:磁盘空间不足
现象: Docker占用了太多磁盘空间
解决:
# 清理未使用的资源
docker system prune -a
# 查看磁盘占用
docker system df
警告: prune -a会删除所有未运行的容器和未使用的镜像,谨慎使用。
问题五:网络连接问题
现象: 容器之间无法通信
解决:
# 创建自定义网络
docker network create mynet
# 启动容器时指定网络
docker run --network=mynet --name=app1 myapp
docker run --network=mynet --name=app2 myapp2
# 现在app1可以通过app2的名字访问app2
问题六:镜像下载慢
现象: pull镜像速度很慢(国内常见)
解决: 配置国内镜像源
编辑/etc/docker/daemon.json:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
然后重启Docker:
sudo systemctl restart docker
一些使用建议
用了一段时间Docker,总结几点心得:
给新手的建议
- 别怕犯错:容器删了就删了,重新拉镜像就行,不会搞坏系统
- 从简单开始:先跑个Nginx、MySQL试试水,别一上来就搞复杂的
- 多看日志:出问题了先看
docker logs,一般能找到原因 - 学会搜索:99%的问题网上都有答案,善用Google和Stack Overflow
最佳实践
- 使用官方镜像:尽量用官方或知名镜像,安全第一
- 定期清理:不用的镜像、容器及时删除,省空间
- 数据持久化:重要数据一定用volume
- 版本控制:镜像指定版本号,别用latest(比如用
nginx:1.21而不是nginx) - 文档化:把你的Dockerfile和docker-compose.yml写清楚,方便别人(和未来的自己)
学习资源
- 官方文档:docs.docker.com(英文,但很全)
- Docker Hub:hub.docker.com(找镜像的地方)
- Play with Docker:labs.play-with-docker.com(在线练习环境)
总结
Docker这东西吧,刚开始学觉得挺麻烦的,概念多、命令多。但用熟了之后你会发现,真香!
我最看重的几点:
✅ 环境一致性:开发、测试、生产环境完全一样
✅ 快速部署:一条命令就能部署应用
✅ 资源隔离:每个服务跑在自己的容器里,互不干扰
✅ 易于迁移:整个应用打包,换台机器照样跑
当然也有不足:
❌ 学习曲线有点陡
❌ 某些场景下性能有损耗
❌ 存储和网络配置相对复杂
但总体来说,Docker确实是提升开发效率的神器。特别是对于后端开发、DevOps来说,基本是必备技能。
我的建议:
别光看,动手试试。按照这篇文章的步骤,从零开始跑个Nginx、打包个应用、用Docker Compose搭个WordPress。动手做一遍,比看十篇文章都有用。
等你用熟了,会发现以前那些环境配置、依赖冲突、部署麻烦的问题,都不是事儿了。
参考资源:
- Docker官网:docker.com
- 官方文档:docs.docker.com
- Docker Hub:hub.docker.com
- GitHub:github.com/docker
更多推荐
所有评论(0)