跳转到内容

Docker 使用

  1. 安装 Docker、Docker Compose 及 Colima

    Terminal window
    $ brew install docker docker-compose colima
    $ brew services start colima
  2. 创建 CLI 插件目录并符号链接该插件

    Terminal window
    $ mkdir -p ~/.docker/cli-plugins
    $ ln -sfn $(brew --prefix)/opt/docker-compose/bin/docker-compose ~/.docker/cli-plugins/docker-compose
  3. 配置 Docker Context 指向 Colima

    Terminal window
    $ docker context use colima
  4. 配置 COMPOSE_FILE

    COMPOSE_FILEDocker Compose 内建环境变量;未设置时只在当前目录查找 compose.yaml / docker-compose.yml;指向固定路径后,任意目录执行 docker compose 都会自动加载,无需每次 -f

    Terminal window
    $ mkdir -p ~/.docker && touch ~/.docker/compose.yml
    $ echo 'export COMPOSE_FILE=$HOME/.docker/compose.yml' >> ~/.zshrc && source ~/.zshrc
  5. 验证安装

    Terminal window
    $ docker version
    $ docker compose version
Terminal window
$ docker ps # 运行中容器(≈ docker container ls)
$ docker ps -a # 所有容器
$ docker images # 本地镜像(≈ docker image ls)
$ docker pull <name>[:tag] # 拉取镜像
$ docker run -d <image> # 后台运行(≈ docker container run -d)
$ docker exec -it <container> <cmd> # 进入容器
$ docker logs -f <container> # 跟踪日志
$ docker init # 生成 Dockerfile、compose.yaml 等 starter 文件

docker init 在项目目录交互式创建 starter 文件;生成后通常 docker compose up --build 启动。

Terminal window
$ docker builder prune # 清理构建缓存
$ docker builder prune -a # 清理全部构建缓存
$ docker builder prune --keep-storage 2GB # 保留 2GB 缓存
Terminal window
$ docker compose config # 解析、渲染 compose 文件
$ docker compose up # 创建并启动服务
$ docker compose up -d # 后台启动
$ docker compose down # 停止并删除容器、网络
$ docker compose down -v # 同上,并删除卷
$ docker compose ps # 列出容器
$ docker compose logs # 查看日志
$ docker compose logs -f <service> # 跟踪指定服务日志
$ docker compose exec <service> <cmd> # 在运行中容器执行命令
$ docker compose run --rm <service> <cmd> # 一次性命令
$ docker compose build # 构建服务镜像
$ docker compose pull # 拉取服务镜像
$ docker compose push # 推送服务镜像
$ docker compose restart <service> # 重启服务
$ docker compose stop # 停止服务
$ docker compose start # 启动已创建服务
$ docker compose cp <service>:<path> <local> # 从容器复制到本地
$ docker compose ls # 列出 compose 项目
$ docker compose watch # 监听构建上下文并重建/刷新
Terminal window
$ docker container ls # 列出运行中容器
$ docker container ls -a # 列出所有容器
$ docker container run <image> # 创建并启动
$ docker container run -d <image> # 后台运行
$ docker container run -it <image> <cmd> # 交互模式
$ docker container run -p 8080:80 <image> # 端口映射
$ docker container run -v /host:/container <image> # 挂载卷
$ docker container run --name <name> <image> # 指定容器名
$ docker container start <container> # 启动
$ docker container stop <container> # 停止
$ docker container restart <container> # 重启
$ docker container rm <container>… # 删除
$ docker container prune # 清理已停止容器
$ docker container logs <container> # 查看日志
$ docker container logs -f --tail 100 <container> # 跟踪最后 100 行
$ docker container exec -it <container> <cmd> # 进入/执行命令
$ docker container cp <src> <container>:<dest> # 复制到容器
$ docker container cp <container>:<src> <dest> # 从容器复制
$ docker container inspect <container> # 详细信息
$ docker container stats # 资源占用
$ docker container diff <container> # 文件系统变更
$ docker container port <container> # 端口映射
$ docker container commit <container> <name>[:tag] # 保存为新镜像
$ docker container export -o output.tar <container> # 导出文件系统
Terminal window
$ docker image ls # 列出镜像
$ docker image pull <name>[:tag] # 拉取镜像
$ docker image push <name>[:tag] # 推送镜像
$ docker image rm <image>… # 删除镜像
$ docker image build -t <name> . # 从 Dockerfile 构建
$ docker image tag <source> <target> # 打标签
$ docker image history <image> # 查看分层历史
$ docker image prune # 清理悬空镜像
$ docker image prune -a # 清理未使用镜像
$ docker image save -o output.tar <image>… # 导出为 tar
$ docker image load -i output.tar # 从 tar 导入
$ docker image import <file> <name>[:tag] # 从归档导入
$ docker search <term> # 搜索镜像(顶层命令)
Terminal window
$ docker network ls # 列出网络
$ docker network create <name> # 创建网络
$ docker network rm <name> # 删除网络
$ docker network connect <net> <container> # 接入网络
$ docker network disconnect <net> <container> # 断开网络
$ docker network inspect <name> # 查看详情
Terminal window
$ docker version # 客户端/引擎版本
$ docker info # 系统信息
$ docker system df # 磁盘占用
$ docker system prune # 清理未使用资源
$ docker system prune -a # 含未使用镜像
$ docker system prune --volumes # 含未使用卷
$ docker system events # 实时事件流
$ docker system events --since 1h # 过去 1 小时事件
Terminal window
$ docker volume ls # 列出卷
$ docker volume create <name> # 创建卷
$ docker volume rm <name> # 删除卷
$ docker volume prune # 清理未使用卷
$ docker volume inspect <name> # 查看详情
Terminal window
# 备份卷到宿主机
$ docker container run --rm -v <volume>:/data -v $(pwd):/backup alpine tar czf /backup/vol-backup.tar.gz -C /data .
# 从宿主机恢复卷
$ docker container run --rm -v <volume>:/data -v $(pwd):/backup alpine tar xzf /backup/vol-backup.tar.gz -C /data
# 跨主机迁移卷
$ docker container run --rm -v <volume>:/data alpine tar czf - -C /data . | ssh user@host "docker container run --rm -i -v <volume>:/data alpine tar xzf - -C /data"
Terminal window
$ colima status # 查看状态
$ colima start # 启动
$ colima stop # 停止
$ colima ssh # SSH 进入虚拟机,exit 或 Ctrl-D 退出
$ colima list # 列出实例
$ colima delete # 删除虚拟机
$ colima version # 查看版本
$ colima nerdctl install # 安装 nerdctl 别名

Colima 的 CPU、内存、磁盘等配置通过 ~/.colima/default/colima.yaml 管理。