Docker容器从下载到使用:详细教程与界面全解析完整实战指南
Docker
Docker是一种开源的容器化平台,它允许开发者将应用程序及其所有依赖项打包到一个标准化的单元(容器)中,从而实现快速、一致的环境部署。
本教程将详细指导你完成从环境配置到使用Docker的完整流程。
一、Docker核心概念与环境准备
在开始操作前,理解Docker的几个核心概念至关重要:
| 概念 | 解释 | 类比说明 |
|---|---|---|
| 镜像 (Image) | 一个只读的模板,包含了运行应用程序所需的代码、运行时、库、环境变量和配置文件。 | 类似于面向对象编程中的"类",或者一个安装光盘的ISO文件。 |
| 容器 (Container) | 镜像的运行实例。容器可以被创建、启动、停止、删除,每个容器都是相互隔离的。 | 类似于由类创建的"对象实例",或者从ISO文件安装好的操作系统。 |
| 仓库 (Repository) | 集中存放镜像文件的地方,分为公共仓库(如Docker Hub)和私有仓库。 | 类似于GitHub,但存放的是Docker镜像。 |
| Dockerfile | 一个文本文件,包含了一系列指令,用于自动化构建Docker镜像。 | 类似于Makefile或构建脚本,定义了如何从基础镜像开始构建你的应用镜像。 |
系统要求与环境检查
Docker支持多种操作系统,包括Linux、Windows和macOS。以下以CentOS 7为例,其他系统步骤类似。
- 检查系统版本:
cat /etc/redhat-release
确保系统是64位,内核版本3.10以上。
- 卸载旧版本Docker(如果已安装):
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
二、Docker安装与初始配置
2.1 在线安装Docker(推荐)
这是最常用的安装方式,适合有网络连接的环境。
- 安装必要的软件包:
sudo yum install -y yum-utils
- 设置稳定的仓库:
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装Docker引擎:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 启动Docker服务并设置开机自启:
# 启动Docker服务
sudo systemctl start docker
# 设置开机自动启动
sudo systemctl enable docker
# 验证安装是否成功
sudo docker version
2.2 离线安装Docker
适用于没有网络连接或网络环境受限的场景。
- 在有网络的环境中下载Docker安装包:
# 创建下载目录
mkdir docker-offline
cd docker-offline
# 使用yum下载所有依赖包(不安装)
sudo yum install --downloadonly --downloaddir=. docker-ce docker-ce-cli containerd.io
- 将下载的RPM包复制到目标机器,然后安装:
# 进入包含RPM包的目录
cd docker-offline
# 安装所有RPM包
sudo rpm -ivh *.rpm --nodeps --force
- 启动服务(同上):
sudo systemctl start docker
sudo systemctl enable docker
2.3 配置镜像加速器
由于Docker Hub在国内访问较慢,建议配置镜像加速器。
- 创建或修改Docker配置文件:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF
- 重新加载配置并重启Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
- 验证配置是否生效:
docker info | grep -A 1 "Registry Mirrors"
三、Docker界面与命令行详解
Docker主要通过命令行界面(CLI)进行操作,这是最常用且功能最全的操作方式。
3.1 Docker命令结构
Docker命令采用docker [OPTIONS] COMMAND [ARG...]的结构,主要分为以下几类:
| 命令类别 | 主要命令 | 功能描述 |
|---|---|---|
| 镜像管理 | docker images, docker pull, docker rmi |
查看、拉取、删除镜像 |
| 容器生命周期 | docker run, docker start/stop, docker rm |
创建、启动、停止、删除容器 |
| 容器操作 | docker exec, docker attach, docker cp |
进入容器、执行命令、复制文件 |
| 信息查看 | docker ps, docker logs, docker inspect |
查看容器状态、日志、详细信息 |
| 网络管理 | docker network, docker port |
管理容器网络、端口映射 |
3.2 镜像管理命令详解
- 搜索镜像:
# 从Docker Hub搜索镜像
docker search nginx
# 搜索特定标签的镜像
docker search ubuntu:20.04
- 拉取镜像:
# 拉取最新版本的nginx镜像
docker pull nginx
# 拉取指定版本的ubuntu镜像
docker pull ubuntu:20.04
# 拉取指定架构的镜像(如ARM64)
docker pull --platform linux/arm64 nginx
- 查看本地镜像:
# 查看所有镜像
docker images
# 查看镜像的详细信息
docker image inspect nginx:latest
# 查看镜像历史(构建层)
docker history nginx
- 删除镜像:
# 删除单个镜像
docker rmi nginx:latest
# 强制删除镜像(即使有容器使用)
docker rmi -f nginx
# 清理所有未使用的镜像
docker image prune -a
3.3 容器生命周期管理
- 运行容器:
# 最基本的运行命令
docker run nginx
# 后台运行并指定名称
docker run -d --name my-nginx nginx
# 运行并映射端口(主机端口:容器端口)
docker run -d -p 8080:80 --name web nginx
# 运行并挂载数据卷
docker run -d -v /host/data:/container/data --name app nginx
# 运行并设置环境变量
docker run -d -e "ENV_VAR=value" --name app nginx
# 运行并限制资源
docker run -d --memory="512m" --cpus="1.5" --name app nginx
参数详解:
-d:后台运行(detached mode)-p:端口映射(格式:主机端口:容器端口)-v:数据卷挂载(格式:主机目录:容器目录)-e:设置环境变量--name:为容器指定名称--memory:限制内存使用--cpus:限制CPU使用
- 查看运行中的容器:
# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 查看容器占用资源
docker stats
# 查看容器详细信息
docker inspect my-nginx
- 启动、停止、重启容器:
# 启动已停止的容器
docker start my-nginx
# 停止运行中的容器
docker stop my-nginx
# 强制停止容器(发送SIGKILL)
docker kill my-nginx
# 重启容器
docker restart my-nginx
# 暂停容器(冻结进程)
docker pause my-nginx
# 恢复暂停的容器
docker unpause my-nginx
- 删除容器:
# 删除已停止的容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有已停止的容器
docker container prune
3.4 容器交互与操作
- 进入容器:
# 使用exec进入运行中的容器(推荐)
docker exec -it my-nginx /bin/bash
# 使用attach附加到容器(会显示所有输出)
docker attach my-nginx
参数详解:
-i:保持标准输入打开-t:分配伪终端-it:通常一起使用,实现交互式操作
- 在容器中执行命令:
# 在容器中执行单条命令
docker exec my-nginx ls -la /etc/nginx
# 在容器中执行交互式命令
docker exec -it my-nginx python3
- 查看容器日志:
# 查看最新日志
docker logs my-nginx
# 实时查看日志(类似tail -f)
docker logs -f my-nginx
# 查看最近10行日志
docker logs --tail 10 my-nginx
# 查看特定时间后的日志
docker logs --since 2024-01-01T00:00:00 my-nginx
- 文件复制:
# 从主机复制文件到容器
docker cp local_file.txt my-nginx:/container/path/
# 从容器复制文件到主机
docker cp my-nginx:/container/file.txt ./local_path/
3.5 网络与端口管理
- 查看网络配置:
# 查看所有网络
docker network ls
# 查看网络详细信息
docker network inspect bridge
- 端口映射查看:
# 查看容器的端口映射
docker port my-nginx
# 查看所有端口映射
docker ps --format "table {{.Names}}\t{{.Ports}}"
- 创建自定义网络:
# 创建桥接网络
docker network create my-network
# 在自定义网络中运行容器
docker run -d --network my-network --name app1 nginx
docker run -d --network my-network --name app2 nginx
# 容器间可以通过容器名直接通信
docker exec app1 ping app2
3.6 Docker Compose界面与使用
对于多容器应用,Docker Compose提供了更便捷的管理方式。
- 安装Docker Compose:
# 对于较新版本的Docker,Compose已包含在安装包中
# 如果需要单独安装
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- 编写docker-compose.yml:
version: '3.8'
services:
web:
image: nginx:latest
container_name: my-web
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- app-network
db:
image: mysql:8.0
container_name: my-db
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
volumes:
- db-data:/var/lib/mysql
networks:
- app-network
volumes:
db-data:
networks:
app-network:
driver: bridge
- Compose常用命令:
# 启动所有服务(在docker-compose.yml所在目录)
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f
# 停止所有服务
docker-compose down
# 停止并删除所有资源(包括卷)
docker-compose down -v
# 重新构建并启动服务
docker-compose up -d --build
四、实践案例:部署一个简单的Web应用
让我们通过一个完整的例子来巩固所学知识:部署一个包含Nginx Web服务器和MySQL数据库的应用。
4.1 创建项目结构
# 创建项目目录
mkdir my-webapp
cd my-webapp
# 创建网页文件
mkdir html
echo "<h1>Welcome to My Web App</h1><p>This is running in Docker!</p>" > html/index.html
# 创建Dockerfile
cat > Dockerfile << 'EOF'
FROM nginx:alpine
COPY html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
EOF
4.2 创建docker-compose.yml
version: '3.8'
services:
web:
build: .
container_name: web-app
ports:
- "8080:80"
depends_on:
- db
networks:
- app-net
restart: unless-stopped
db:
image: mysql:8.0
container_name: mysql-db
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
MYSQL_USER: user
MYSQL_PASSWORD: userpass
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-net
restart: unless-stopped
command: --default-authentication-plugin=mysql_native_password
volumes:
mysql-data:
networks:
app-net:
driver: bridge
4.3 构建并运行应用
# 构建并启动所有服务
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看Web服务日志
docker-compose logs -f web
# 进入MySQL容器
docker-compose exec db mysql -u root -p
# 输入密码: secret
# 在MySQL中创建表
CREATE TABLE users (id INT, name VARCHAR(50));
INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob');
SELECT * FROM users;
4.4 访问应用与验证
- 打开浏览器访问
http://localhost:8080,应该能看到欢迎页面 - 验证容器运行状态:
# 查看所有容器
docker ps
# 查看容器资源使用
docker stats
# 查看容器网络
docker network inspect my-webapp_app-net
4.5 清理资源
# 停止并删除所有容器、网络
docker-compose down
# 删除数据卷(如果需要)
docker-compose down -v
# 删除所有未使用的资源
docker system prune -a
五、高级功能与最佳实践
5.1 数据持久化策略
容器本身是临时性的,数据持久化至关重要:
- 绑定挂载(Bind Mounts):
# 将主机目录挂载到容器
docker run -d -v /host/data:/container/data --name app nginx
- 数据卷(Volumes):
# 创建数据卷
docker volume create my-volume
# 使用数据卷
docker run -d -v my-volume:/container/data --name app nginx
# 查看数据卷信息
docker volume inspect my-volume
- 临时文件系统(tmpfs):
# 将内存挂载为临时文件系统
docker run -d --tmpfs /tmp --name app nginx
5.2 资源限制与监控
# 限制CPU使用(1.5个CPU核心)
docker run -d --cpus="1.5" --name app nginx
# 限制内存使用(512MB内存,1GB交换空间)
docker run -d --memory="512m" --memory-swap="1g" --name app nginx
# 限制进程数
docker run -d --pids-limit 100 --name app nginx
# 监控资源使用
docker stats --all --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
5.3 安全最佳实践
- 不要以root用户运行容器:
# 在Dockerfile中指定非root用户
FROM nginx:alpine
RUN addgroup -g 1000 -S appgroup && \
adduser -u 1000 -S appuser -G appgroup
USER appuser
- 定期更新基础镜像:
# 拉取最新安全更新
docker pull nginx:latest
- 扫描镜像安全漏洞:
# 使用Docker Scan(需要登录Docker Hub)
docker scan nginx:latest
5.4 常用调试技巧
- 检查容器内部进程:
docker top my-container
- 查看容器元数据:
docker inspect my-container | grep -A 10 "State"
- 查看容器文件系统变化:
docker diff my-container
- 保存容器状态为镜像:
docker commit my-container my-snapshot:latest
通过本教程,你应该已经掌握了Docker从环境配置到实际使用的完整流程。
记住,Docker的核心优势在于环境一致性、快速部署和资源隔离。
在实际工作中,建议从简单的单容器应用开始,逐步过渡到使用Docker Compose管理多容器应用,最终学习Docker Swarm或Kubernetes进行容器编排。
参考来源
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)