Docker 核心概念与基础命令

Docker 核心概念

深入理解Docker的核心概念,掌握基础命令操作,为容器化应用开发打下坚实基础。

镜像 容器 仓库 Dockerfile

Docker 核心概念

镜像(Image)

Docker镜像是一个只读模板,包含创建Docker容器的指令。镜像可以用来创建容器,一个镜像可以创建多个容器。

分层存储 只读

容器(Container)

容器是镜像的运行实例。可以使用Docker API或CLI创建、启动、停止、移动或删除容器。容器可以被创建、启动、停止、删除、暂停等。

运行实例 可写层

仓库(Registry)

Docker仓库用来存储镜像。Docker Hub是公共仓库,任何人都可以使用。你也可以搭建自己的私有仓库。

镜像存储 版本控制

Docker 架构概览

Docker Client

用户与Docker交互的界面

Docker Daemon

Docker守护进程,管理容器

Images

用于创建容器的只读模板

Containers

镜像的运行实例

Docker 工作流程

1. 编写Dockerfile

Dockerfile是一个文本文件,包含了一系列指令,用于构建Docker镜像。

# Dockerfile 示例
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y nginx
COPY . /app
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
2. 构建镜像

使用docker build命令根据Dockerfile构建镜像。

docker build -t my-app:1.0 .
3. 运行容器

使用docker run命令从镜像创建并运行容器。

docker run -d -p 8080:80 my-app:1.0
4. 分享镜像

使用docker push命令将镜像推送到仓库,与他人分享。

docker push my-username/my-app:1.0

Docker 基础命令

镜像管理命令
命令 描述 示例
docker images 列出本地所有镜像 docker images
docker pull 从仓库拉取镜像 docker pull nginx:latest
docker build 根据Dockerfile构建镜像 docker build -t my-app .
docker rmi 删除本地镜像 docker rmi nginx:latest
docker tag 给镜像打标签 docker tag my-app:1.0 my-app:latest
docker push 推送镜像到仓库 docker push my-username/my-app
镜像命令示例
# 搜索Docker Hub上的镜像
docker search nginx
# 拉取官方Nginx镜像
docker pull nginx
# 查看本地镜像列表
docker images
# 删除不需要的镜像
docker rmi ubuntu:18.04
容器管理命令
命令 描述 示例
docker run 创建并启动容器 docker run -d nginx
docker ps 列出运行中的容器 docker ps -a
docker stop 停止运行中的容器 docker stop container_id
docker start 启动已停止的容器 docker start container_id
docker rm 删除容器 docker rm container_id
docker exec 在运行中的容器中执行命令 docker exec -it container_id bash
docker logs 查看容器日志 docker logs container_id
容器命令示例
# 以后台模式运行Nginx容器
docker run -d -p 8080:80 --name my-nginx nginx
# 查看所有容器(包括停止的)
docker ps -a
# 进入容器内部
docker exec -it my-nginx bash
# 查看容器日志
docker logs my-nginx
# 停止并删除容器
docker stop my-nginx && docker rm my-nginx
网络管理命令
命令 描述 示例
docker network ls 列出所有网络 docker network ls
docker network create 创建网络 docker network create my-network
docker network connect 将容器连接到网络 docker network connect my-network container_id
docker network disconnect 断开容器与网络的连接 docker network disconnect my-network container_id
docker network inspect 查看网络详细信息 docker network inspect my-network
网络命令示例
# 创建自定义网络
docker network create --driver bridge my-bridge-network
# 在特定网络中运行容器
docker run -d --network my-bridge-network --name web nginx
# 查看网络详情
docker network inspect my-bridge-network
# 将现有容器连接到网络
docker network connect my-bridge-network existing_container
数据卷管理命令
命令 描述 示例
docker volume ls 列出所有数据卷 docker volume ls
docker volume create 创建数据卷 docker volume create my-volume
docker volume inspect 查看数据卷详细信息 docker volume inspect my-volume
docker volume rm 删除数据卷 docker volume rm my-volume
数据卷命令示例
# 创建数据卷
docker volume create db-data
# 使用数据卷运行容器
docker run -d --name mysql -v db-data:/var/lib/mysql mysql:5.7
# 查看数据卷详情
docker volume inspect db-data
# 备份数据卷
docker run --rm -v db-data:/source -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /source .

Docker 命令交互演示

$ docker --version
Docker version 20.10.12, build e91ed57
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 weeks ago 141MB
ubuntu 20.04 ba6acccedd29 2 months ago 72.8MB
$
尝试输入: docker ps, docker run hello-world, docker --help

Docker 命令速查表

docker info - 显示Docker系统信息
docker version - 显示Docker版本信息
docker login - 登录到Docker仓库
docker logout - 从Docker仓库登出
docker history - 显示镜像的历史记录
docker inspect - 获取容器/镜像的元数据
docker stats - 显示容器资源使用统计
docker top - 显示容器中运行的进程
docker port - 查看容器的端口映射
docker diff - 检查容器文件系统的变化
最佳实践提示
  • 使用.dockerignore文件排除不需要的文件,减小镜像大小
  • 尽量使用官方镜像作为基础镜像,确保安全性和稳定性
  • 一个容器只运行一个进程,遵循单一职责原则
  • 使用数据卷持久化重要数据,避免数据丢失
  • 为镜像打上有意义的标签,方便版本管理