Docker 入门指南

1. 简介

Docker是一个开源的容器化平台,可以帮助你将应用程序及其依赖项打包到标准的容器镜像中,从而实现跨环境的部署和运行。 本指南将介绍Docker的基本概念和常用命令,帮助你快速入门。

Docker 架构概览

宿主机 Host

容器 Containers

拉取镜像

Docker Engine

容器 A
App + Dependencies

容器 B
App + Dependencies

容器 C
App + Dependencies

Docker Hub
镜像仓库

2. 基础概念

  • 镜像 (Image): 镜像是一个只读的模板,包含了应用程序及其运行所需要的依赖项。 可以理解为Docker的"蓝图"。
  • 容器 (Container): 容器是镜像的运行实例,在容器中运行应用程序。 容器是隔离的环境,可以提供资源限制和安全保障。
  • Docker Hub: 一个公共的Docker镜像仓库,你可以在这里找到各种官方和社区提供的镜像。
  • Docker Engine: Docker的运行核心,负责构建、运行和管理容器。

镜像与容器的关系

镜像层 Image Layers

运行

基础镜像
Ubuntu/Alpine

添加依赖
Node.js/Python

添加应用代码

最终镜像
MyApp:1.0

容器 Container
可读可写层

容器 vs 虚拟机

Docker 容器架构

宿主机 OS

Docker Engine

容器 A
App + Bin/Lib

容器 B
App + Bin/Lib

容器 C
App + Bin/Lib

传统虚拟机架构

宿主机 OS

Hypervisor

VM A
Guest OS + App

VM B
Guest OS + App

VM C
Guest OS + App

3. 常用命令

3.1. 基本操作

docker run

docker stop

docker start

docker rm

docker rmi

镜像 Image

运行中容器

已停止容器

删除

删除镜像

  • docker version: 显示Docker客户端和Docker Engine的版本信息。
  • docker info: 显示Docker Engine的详细信息。
  • docker images: 列出本地已安装的Docker镜像。
    • docker rmi <image_id>: 删除指定的镜像。
  • docker ps: 列出正在运行的容器。
    • docker ps -a: 列出所有容器(包括已停止的)。
    • docker start <container_id>: 启动指定的容器。
    • docker stop <container_id>: 停止指定的容器。
  • docker rm <container_id>: 删除指定的容器。
    • docker rm -f <container_id>: 强制删除指定的容器。

3.2. 镜像操作

  • docker pull <image_name>: 从Docker Hub下载指定的镜像。
    • 例如: docker pull ubuntu:latest
  • docker build -t <image_name> <path_to_dockerfile>: 构建Docker镜像。
    • dockerfile 是一个包含了构建镜像的指令文件。
    • 例如: docker build -t my-app . (假设Dockerfile在当前目录)
  • docker rmi <image_id>: 删除指定的镜像。

3.3. 容器操作

端口映射示意图

Docker 容器

宿主机

访问 localhost:8080

端口映射

浏览器/客户端

宿主机端口 8080

容器端口 80

Nginx 服务

  • docker run -d --name <container_name> -p <host_port>:<container_port> <image_name>: 运行一个新的容器。
    • -d: 后台运行容器(detached mode)。
    • --name: 指定容器的名称。
    • -p: 端口映射,将容器的端口映射到宿主机的端口。
    • 例如: docker run -d --name my-web -p 8080:80 nginx (运行一个Nginx容器,映射8080端口到容器的80端口)
  • docker exec -it <container_id> <command>: 在正在运行的容器中执行命令。
    • -it: 交互式 TTY。
    • 例如: docker exec -it my-web bash (进入 my-web 容器的bash shell)
  • docker stop <container_id>: 停止容器。
  • docker start <container_id>: 启动容器。
  • docker logs <container_id>: 查看容器的日志。
  • docker inspect <container_id>: 显示容器的详细信息,包括网络配置、存储信息等。

3.4. 常用选项

  • -v, --volume: 挂载卷,用于持久化数据。
  • -e, --env: 设置环境变量。
  • --expose: 暴露容器端口。

4. 进阶操作

Docker Compose 多容器架构

Docker Compose 应用

数据层

应用服务层

HTTP 请求

Nginx
负载均衡/反向代理

Web 应用
Node.js

Web 应用
Node.js

MySQL
主从复制

Redis
缓存

用户

数据卷挂载示意图

Docker 容器

宿主机文件系统

挂载

挂载

挂载

host/data
持久化数据

host/config
配置文件

容器 A

容器 B

  • Docker Compose: 用于定义和运行多容器应用程序。 可以使用 docker-compose.yml 文件来定义容器之间的关系和配置。
  • Docker Swarm: 用于构建和管理分布式Docker应用程序。
  • Docker Volumes: 用于持久化数据,即使容器停止或删除,数据也不会丢失。
  • Docker Networks: 用于连接容器之间的网络,实现容器之间的通信。

5. 常用镜像

常用基础镜像

nginx
Web 服务器

ubuntu
完整 Linux

alpine
轻量 Linux
~5MB

node
Node.js 环境

mysql
数据库

redis
缓存服务

  • nginx: 流行的Web服务器,高性能反向代理。
  • ubuntu: 流行的Linux发行版,适合通用开发环境。
  • alpine: 轻量级的Linux发行版(仅约5MB),适合构建小型镜像。
  • node: Node.js运行环境,用于运行JavaScript应用。
  • mysql: 流行的关系型数据库。
  • redis: 高性能键值缓存数据库。

6. 资源


注意: 请根据你的实际需求调整命令参数和配置。 在操作Docker时,请确保你了解其原理和潜在风险。

希望这个文档能帮助你快速入门Docker!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐