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. 安装步骤

  1. 双击下载的 .dmg 文件
  2. 将 Docker 图标拖拽到 Applications 文件夹
  3. 在 Launchpad 或 Applications 中打开 Docker Desktop
  4. 根据提示完成初始化设置
  5. 输入 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

学习资源推荐

总结

Docker 是现代软件开发和运维的重要工具,掌握 Docker 能够极大地提升开发和部署效率。本文从安装到实战,全面介绍了 Docker 在 macOS 上的使用方法。建议读者按照教程亲手实践,逐步掌握 Docker 的核心概念和常用命令。

随着容器化技术的普及,Docker 已经成为云原生应用开发的标准配置。继续深入学习 Kubernetes 等容器编排工具,将让您的技能更上一层楼!

祝大家学习顺利,早日成为 Docker 高手!

发表回复

后才能评论