跳转至

Docker 基础使用

基础概念

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

常用命令

镜像管理

搜索镜像

  • 命令: docker search [OPTIONS] TERM
  • 参数说明:
  • --limit: 限制搜索结果数量
  • 使用示例:
    # 搜索nginx镜像
    docker search nginx
    
    # 搜索官方的nginx镜像
    docker search --limit 5 nginx
    

拉取镜像

  • 命令: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • 参数说明:
  • -a: 拉取所有标签的镜像
  • -q: 静默模式,不输出拉取进度
  • 使用示例:
    # 拉取最新版本的nginx镜像
    docker pull nginx
    
    # 拉取指定版本的nginx镜像
    docker pull nginx:1.20
    
    # 拉取指定平台的镜像
    docker pull --platform linux/amd64 nginx
    

查看镜像

  • 命令: docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 参数说明:
  • -a: 显示所有镜像
  • -q: 只显示镜像ID
  • 使用示例:
    # 查看所有镜像
    docker images
    
    # 查看所有镜像的ID
    docker images -q
    
    # 查看特定仓库的镜像
    docker images nginx
    

构建镜像

  • 命令: docker build [OPTIONS] PATH | URL
  • 参数说明:
  • -t: 指定镜像名称和标签
  • -f: 指定Dockerfile路径
  • --no-cache: 构建时不使用缓存
  • --build-arg: 设置构建时的变量
  • 使用示例:
    # 构建镜像并指定名称
    docker build -t myapp:latest .
    
    # 使用指定Dockerfile构建
    docker build -f Dockerfile.prod -t myapp:prod .
    
    # 构建时传递参数且不使用缓存
    docker build --no-cache --build-arg NODE_ENV=production -t myapp .
    

删除镜像

  • 命令: docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 参数说明:
  • -f: 强制删除镜像
  • 使用示例:
    # 删除指定镜像
    docker rmi nginx:latest
    
    # 删除多个镜像
    docker rmi nginx:1.20 nginx:1.19
    
    # 删除所有未使用的镜像
    docker image prune -a
    

导出镜像

  • 命令: docker save [OPTIONS] IMAGE [IMAGE...]
  • 参数说明:
  • -o: 指定输出文件名
  • 使用示例:
    # 导出单个镜像
    docker save -o nginx.tar nginx:latest
    
    # 导出多个镜像到一个文件
    docker save -o all_images.tar nginx:latest mysql:5.7 redis:alpine
    

导入镜像

  • 命令: docker load [OPTIONS]
  • 参数说明:
  • -i: 指定输入文件
  • -q: 静默模式
  • 使用示例:
    # 从tar文件导入镜像
    docker load -i nginx.tar
    
    # 从标准输入导入镜像
    cat nginx.tar | docker load
    

标记镜像

  • 命令: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 使用示例:
    # 为镜像添加新标签
    docker tag nginx:latest mynginx:v1.0
    

容器管理

运行容器

  • 命令: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 常用参数说明:
  • -d: 后台运行容器
  • -it: 交互式运行容器
  • -p: 端口映射,格式为 hostPort:containerPort
  • -v: 挂载卷,格式为 hostPath:containerPath
  • -e: 设置环境变量
  • --name: 指定容器名称
  • --rm: 容器退出时自动删除
  • --network: 指定网络模式
  • 使用示例:
    # 后台运行nginx容器并映射端口
    docker run -d -p 8080:80 --name my-nginx nginx
    
    # 运行交互式容器
    docker run -it --name my-ubuntu ubuntu:20.04 /bin/bash
    
    # 运行容器并挂载数据卷
    docker run -d -p 3306:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.7
    
    # 运行后自动删除的容器
    docker run --rm -it alpine:latest sh
    

查看容器

  • 命令: docker ps [OPTIONS]
  • 参数说明:
  • -a: 显示所有容器(包括停止的)
  • -q: 只显示容器ID
  • -l: 显示最近创建的容器
  • 使用示例:
    # 查看正在运行的容器
    docker ps
    
    # 查看所有容器
    docker ps -a
    
    # 查看所有容器的ID
    docker ps -aq
    

停止容器

  • 命令: docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • 参数说明:
  • -t: 停止前等待的秒数
  • 使用示例:
    # 停止指定容器
    docker stop my-nginx
    
    # 停止多个容器
    docker stop container1 container2
    
    # 停止所有运行中的容器
    docker stop $(docker ps -q)
    

启动容器

  • 命令: docker start [OPTIONS] CONTAINER [CONTAINER...]
  • 参数说明:
  • -i: 启动时连接STDOUT/STDERR并返回
  • 使用示例:
    # 启动已停止的容器
    docker start my-nginx
    
    # 启动容器并连接到容器
    docker start -i my-ubuntu
    

重启容器

  • 命令: docker restart [OPTIONS] CONTAINER [CONTAINER...]
  • 参数说明:
  • -t: 重启前等待的秒数
  • 使用示例:
    # 重启容器
    docker restart my-nginx
    
    # 重启所有运行中的容器
    docker restart $(docker ps -q)
    

删除容器

  • 命令: docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • 参数说明:
  • -f: 强制删除正在运行的容器
  • -v: 删除与容器关联的卷
  • 使用示例:
    # 删除已停止的容器
    docker rm my-nginx
    
    # 强制删除正在运行的容器
    docker rm -f my-nginx
    
    # 删除所有已停止的容器
    docker container prune
    
    # 删除所有容器(包括运行中的)
    docker rm -f $(docker ps -aq)
    

进入容器

  • 命令: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • 参数说明:
  • -i: 保持STDIN开启
  • -t: 分配一个伪终端
  • -d: 分离模式,后台运行
  • -u: 指定用户
  • 使用示例:
    # 进入运行中的容器
    docker exec -it my-ubuntu /bin/bash
    
    # 在容器中执行命令
    docker exec my-nginx ls -la /usr/share/nginx/html
    
    # 以特定用户身份进入容器
    docker exec -it -u root my-ubuntu whoami
    

查看容器日志

  • 命令: docker logs [OPTIONS] CONTAINER
  • 参数说明:
  • -f: 跟踪日志输出
  • -t: 显示时间戳
  • --tail: 显示最后N行日志
  • 使用示例:
    # 查看容器日志
    docker logs my-nginx
    
    # 实时查看容器日志
    docker logs -f my-nginx
    
    # 查看最后100行日志
    docker logs --tail 100 my-nginx
    

查看容器资源使用情况

  • 命令: docker stats [OPTIONS] [CONTAINER...]
  • 参数说明:
  • -a: 显示所有容器的统计信息
  • 使用示例:
    # 查看所有容器的资源使用情况
    docker stats
    
    # 查看指定容器的资源使用情况
    docker stats my-nginx
    

网络管理

创建网络

  • 命令: docker network create [OPTIONS] NETWORK
  • 参数说明:
  • --driver: 指定网络驱动
  • --subnet: 指定子网
  • --gateway: 指定网关
  • 使用示例:
    # 创建自定义网络
    docker network create mynetwork
    
    # 创建指定子网的网络
    docker network create --subnet=172.20.0.0/16 --gateway=172.20.0.1 mynetwork
    

查看网络

  • 命令: docker network ls [OPTIONS]
  • 使用示例:
    # 查看所有网络
    docker network ls
    

删除网络

  • 命令: docker network rm NETWORK [NETWORK...]
  • 使用示例:
    # 删除指定网络
    docker network rm mynetwork
    

数据卷管理

创建数据卷

  • 命令: docker volume create [OPTIONS] [VOLUME]
  • 使用示例:
    # 创建数据卷
    docker volume create myvolume
    

查看数据卷

  • 命令: docker volume ls [OPTIONS]
  • 使用示例:
    # 查看所有数据卷
    docker volume ls
    

删除数据卷

  • 命令: docker volume rm [OPTIONS] VOLUME [VOLUME...]
  • 使用示例:
    # 删除指定数据卷
    docker volume rm myvolume
    

系统管理命令

查看Docker系统信息

  • 命令: docker info
  • 使用示例:
    # 查看Docker系统信息
    docker info
    

查看Docker版本

  • 命令: docker version
  • 使用示例:
    # 查看Docker版本信息
    docker version
    

清理系统

  • 命令: docker system prune [OPTIONS]
  • 参数说明:
  • -a: 删除所有未使用的镜像
  • -f: 强制删除,不提示确认
  • 使用示例:
    # 清理未使用的数据
    docker system prune
    
    # 清理所有未使用的数据(包括镜像)
    docker system prune -a
    

查看磁盘使用情况

  • 命令: docker system df [OPTIONS]
  • 使用示例:
    # 查看Docker磁盘使用情况
    docker system df
    

实用示例

启动常用服务

  1. 启动MySQL:

    docker run -d \
      --name mysql \
      -p 3306:3306 \
      -e MYSQL_ROOT_PASSWORD=root \
      -e MYSQL_DATABASE=test \
      -v mysql-data:/var/lib/mysql \
      mysql:5.7
    

  2. 启动Redis:

    docker run -d \
      --name redis \
      -p 6379:6379 \
      -v redis-data:/data \
      redis:alpine \
      redis-server --appendonly yes
    

  3. 启动Nginx:

    docker run -d \
      --name nginx \
      -p 80:80 \
      -v $(pwd)/html:/usr/share/nginx/html \
      nginx:latest
    

使用Docker Compose简化多容器管理

创建 docker-compose.yml 文件:

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

启动服务:

docker-compose up -d

停止服务:

docker-compose down

标签:Docker, 容器编排