macOS安装和使用Docker完全指南:从零开始掌握容器化技术
什么是Docker?
Docker是一个开源的容器化平台,可以让开发者打包应用及其依赖到一个轻量级、可移植的容器中,然后发布到任何流行的Linux或Windows机器上。与虚拟机相比,Docker容器更加轻量、启动更快、资源占用更少。
为什么选择Docker?
- 环境一致性:开发、测试、生产环境完全一致,消除"在我机器上能跑"的问题
- 快速部署:容器启动只需几秒钟,极大提升部署效率
- 资源高效:相比虚拟机,容器共享主机内核,资源占用更少
- 易于扩展:配合Kubernetes等编排工具,轻松实现横向扩展
- 微服务架构:天然适合微服务架构,便于系统拆分和维护
在macOS上安装Docker
方法一:使用Docker Desktop(推荐)
Docker Desktop是官方提供的一体化安装包,包含Docker Engine、Docker CLI、Docker Compose等组件。
1. 系统要求
- macOS Monterey 12.0 及以上版本
- Apple Silicon(M1/M2/M3)或 Intel 处理器
- 至少 4GB 内存(建议 8GB 以上)
2. 下载安装包
访问 Docker 官网下载页面:
# 官网下载地址
https://www.docker.com/products/docker-desktop/
根据您的 Mac 芯片架构选择对应的版本:
- Apple Silicon:选择 Docker Desktop for Mac with Apple silicon
- Intel:选择 Docker Desktop for Mac with Intel chip
3. 安装步骤
- 双击下载的 .dmg 文件
- 将 Docker 图标拖拽到 Applications 文件夹
- 在 Launchpad 或 Applications 中打开 Docker Desktop
- 根据提示完成初始化设置
- 输入 Mac 用户密码授权
4. 验证安装
打开终端,运行以下命令验证 Docker 是否安装成功:
# 查看 Docker 版本
docker --version
# 查看 Docker 信息
docker info
# 运行测试容器
docker run hello-world
如果看到 "Hello from Docker!" 的输出,说明安装成功!
方法二:使用Homebrew安装
如果您已经安装了 Homebrew,可以通过命令行快速安装:
# 搜索 Docker Desktop
brew search docker
# 安装 Docker Desktop
brew install --cask docker
# 或者仅安装命令行工具
brew install docker docker-compose
Docker基本概念
核心概念
- 镜像(Image):类似于类的模板,包含运行应用所需的所有文件和配置
- 容器(Container):镜像的运行实例,类似于类的对象
- 仓库(Repository):存储和分发镜像的地方,如 Docker Hub
- Dockerfile:用于构建镜像的文本文件,包含一系列指令
- Compose:用于定义和运行多容器应用的工具
Docker架构
Docker 采用客户端-服务器(C/S)架构:
- Docker Client:用户与 Docker 交互的命令行界面
- Docker Daemon:后台服务,负责构建、运行和分发容器
- Docker Registry:存储镜像的服务,如 Docker Hub
Docker常用命令
镜像相关命令
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest
# 构建镜像
docker build -t myapp:1.0 .
容器相关命令
# 运行容器
docker run -d -p 8080:80 --name mynginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop mynginx
# 启动容器
docker start mynginx
# 重启容器
docker restart mynginx
# 删除容器
docker rm mynginx
# 强制删除运行中的容器
docker rm -f mynginx
# 查看容器日志
docker logs mynginx
# 进入容器
docker exec -it mynginx /bin/bash
# 查看容器详细信息
docker inspect mynginx
清理命令
# 清理停止的容器
docker container prune
# 清理未使用的镜像
docker image prune -a
# 清理未使用的网络
docker network prune
# 清理未使用的卷
docker volume prune
# 一键清理所有未使用的资源
docker system prune -a --volumes
Docker实战案例
案例1:部署Nginx Web服务器
# 1. 拉取 Nginx 镜像
docker pull nginx:latest
# 2. 运行 Nginx 容器
# -d: 后台运行
# -p 8080:80: 将容器80端口映射到主机8080端口
# --name mynginx: 指定容器名称
docker run -d -p 8080:80 --name mynginx nginx
# 3. 访问测试
# 打开浏览器访问 http://localhost:8080
# 4. 自定义首页
# 创建自定义首页文件
echo "<h1>Hello Docker!</h1>" > index.html
# 复制到容器内
docker cp index.html mynginx:/usr/share/nginx/html/
# 5. 重启容器
docker restart mynginx
案例2:部署MySQL数据库
# 1. 运行 MySQL 容器
# -e MYSQL_ROOT_PASSWORD: 设置 root 密码
# -v mysql-data:/var/lib/mysql: 持久化数据
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v mysql-data:/var/lib/mysql mysql:8.0
# 2. 查看 MySQL 日志
docker logs -f mysql
# 3. 连接 MySQL
docker exec -it mysql mysql -uroot -p123456
案例3:使用Docker Compose部署WordPress
创建 docker-compose.yml 文件:
version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
volumes:
wordpress_data:
db_data:
启动服务:
# 启动所有服务
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 停止所有服务
docker-compose down
# 停止并删除数据卷
docker-compose down -v
案例4:构建自定义镜像
创建 Dockerfile:
# 使用官方 Python 镜像作为基础
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 8000
# 启动命令
CMD ["python", "app.py"]
创建 requirements.txt:
flask==3.0.0
gunicorn==21.2.0
创建 app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello from Docker!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
构建和运行:
# 构建镜像
docker build -t my-flask-app:1.0 .
# 运行容器
docker run -d -p 8000:8000 --name myapp my-flask-app:1.0
# 访问应用
curl http://localhost:8000
Docker最佳实践
1. 使用多阶段构建
# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
2. 使用 .dockerignore
# .dockerignore
node_modules
.git
.env
*.log
.DS_Store
3. 健康检查
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8000/ || exit 1
4. 镜像优化
- 使用精简的基础镜像(如 alpine、slim)
- 合并 RUN 指令减少层数
- 清理不必要的文件和缓存
- 利用构建缓存,合理安排指令顺序
5. 安全最佳实践
- 不要在镜像中存储敏感信息
- 使用环境变量传递配置
- 定期更新基础镜像
- 扫描镜像漏洞
- 以非 root 用户运行容器
常见问题解决
问题1:Docker 无法启动
解决方案:
# 检查 Docker Desktop 状态
open -a Docker
# 查看系统日志
log show --predicate 'process == "Docker"' --last 1h
问题2:容器无法访问网络
解决方案:
# 重启 Docker Desktop
# 重启网络
docker network prune
问题3:磁盘空间不足
解决方案:
# 查看 Docker 占用空间
docker system df
# 清理未使用的资源
docker system prune -a --volumes
# 在 Docker Desktop 中调整磁盘大小设置
问题4:权限问题
解决方案:
# 将用户添加到 docker 组
sudo dseditgroup -o edit -a $USER -t user docker
Docker进阶技巧
1. 使用 Docker Volumes 持久化数据
# 创建命名卷
docker volume create mydata
# 查看卷列表
docker volume ls
# 使用卷
docker run -d -v mydata:/data --name mycontainer ubuntu
# 查看卷详情
docker volume inspect mydata
# 删除卷
docker volume rm mydata
2. 使用 Docker Network 管理网络
# 创建自定义网络
docker network create mynetwork
# 查看网络列表
docker network ls
# 使用网络运行容器
docker run -d --network mynetwork --name web1 nginx
docker run -d --network mynetwork --name web2 nginx
# 测试容器间通信
docker exec -it web1 ping web2
3. 查看 Docker 资源使用情况
# 查看容器资源使用
docker stats
# 查看特定容器
docker stats mynginx
学习资源推荐
- 官方文档:https://docs.docker.com/
- Docker Hub:https://hub.docker.com/
- Docker Compose 文档:https://docs.docker.com/compose/
- 最佳实践:https://docs.docker.com/develop/dev-best-practices/
总结
Docker 是现代软件开发和运维的重要工具,掌握 Docker 能够极大地提升开发和部署效率。本文从安装到实战,全面介绍了 Docker 在 macOS 上的使用方法。建议读者按照教程亲手实践,逐步掌握 Docker 的核心概念和常用命令。
随着容器化技术的普及,Docker 已经成为云原生应用开发的标准配置。继续深入学习 Kubernetes 等容器编排工具,将让您的技能更上一层楼!
祝大家学习顺利,早日成为 Docker 高手!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







