当前位置: 首页 > news >正文

Docker 完整教程 | 从基础到实战 (1-2)

在这里插入图片描述

Docker 完整教程

本教程侧重于命令实践和理解,提供可在本地环境测试的实例,每章结束都有总结要点。

目录

  1. Docker 基础概念和安装
  2. Docker 常用命令实践

本篇介绍 Docker 的基础概念和常用命令,在 csdn 侧边栏根据需要点击目录进行跳转。


第1章:Docker 基础概念和安装

1.1 什么是 Docker

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。

核心概念

  • 镜像 (Image):只读的模板,包含运行应用所需的代码、运行时、库、环境变量和配置文件
  • 容器 (Container):镜像的运行实例,是一个独立的进程
  • 仓库 (Repository):存储镜像的地方,如 Docker Hub

Docker vs 虚拟机

特性Docker 容器虚拟机
启动速度秒级分钟级
资源占用
隔离级别进程级操作系统级
移植性中等

1.2 Docker 安装

方法1:进入官网,下载 Docker Desktop。

macOS 可以使用 Homebrew 安装:

brew install --cask docker

Linux (Ubuntu) 安装

# 更新包索引
sudo apt-get update
sudo apt install docker.io -y# 将当前用户添加到 docker 组(避免每次使用 sudo)
sudo usermod -aG docker $USER

1.3 验证安装

# 检查 Docker 版本
docker --version# 查看 Docker 系统信息
docker info# 运行 Hello World 容器
# docker run hello-world

1.4 Docker 架构

Docker 使用客户端-服务器架构:

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   Docker    │    │   Docker    │    │   Docker    │
│   Client    │───▶│   Daemon    │───▶│  Registry   │
│             │    │             │    │             │
└─────────────┘    └─────────────┘    └─────────────┘
  • Docker Client:用户与 Docker 交互的主要方式
  • Docker Daemon:监听 Docker API 请求并管理 Docker 对象
  • Docker Registry:存储 Docker 镜像的服务

1.5 实践练习

练习1:检查 Docker 状态

# 查看 Docker 服务状态
docker version# 查看当前运行的容器
docker ps# 查看所有容器(包括停止的)
docker ps -a# 查看本地镜像
docker images

练习2:运行第一个容器

# 运行一个简单的 Ubuntu 容器
docker run -it ubuntu:20.04 /bin/bash# 在容器内执行命令
echo "Hello from inside Docker container!"
cat /etc/os-release# 退出容器
exit

练习3:后台运行容器

# 后台运行一个 nginx 服务器
docker run -d --name my-nginx -p 8080:80 nginx# 检查容器状态
docker ps# 在浏览器中访问 http://localhost:8080# 停止容器
docker stop my-nginx# 删除容器
docker rm my-nginx

1.6 常见问题排查

权限问题:

# 如果遇到权限错误,确保用户在 docker 组中
groups $USER# 如果没有 docker 组,重新登录或执行
newgrp docker

服务未启动:

# Linux 系统启动 Docker 服务
sudo systemctl start docker# 检查服务状态
sudo systemctl status docker

本章总结

在本章中,我们学习了:

  1. Docker 基本概念:了解了镜像、容器、仓库的概念和 Docker 与虚拟机的区别
  2. 安装 Docker:在不同操作系统上安装 Docker 的方法
  3. 验证安装:通过运行 hello-world 容器验证 Docker 正常工作
  4. Docker 架构:理解客户端-服务器架构模式
  5. 基础实践:运行第一个容器,体验 Docker 的基本操作

关键要点

  • Docker 容器比虚拟机更轻量、启动更快
  • 容器是镜像的运行实例
  • 通过 docker run 命令可以快速启动容器
  • 容器具有良好的隔离性和可移植性

下一章我们将深入学习 Docker 的常用命令,掌握容器的生命周期管理。


第2章:Docker 常用命令实践

2.1 镜像管理命令

拉取镜像

# 拉取最新版本镜像
docker pull nginx# 拉取指定版本镜像
docker pull nginx:1.21# 从指定仓库拉取
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx

查看镜像

# 列出本地所有镜像
docker images# 查看镜像详细信息
docker inspect nginx# 查看镜像历史
docker history nginx# 搜索镜像
docker search python

删除镜像

# 删除指定镜像
docker rmi nginx:latest# 删除多个镜像
docker rmi nginx redis mysql# 强制删除镜像
docker rmi -f nginx# 删除所有未使用的镜像
docker image prune

2.2 容器生命周期管理

创建和启动容器

# 运行容器(如果镜像不存在会自动拉取)
docker run nginx# 后台运行容器
docker run -d nginx# 指定容器名称
docker run -d --name my-nginx nginx# 端口映射
docker run -d -p 8080:80 --name web-server nginx# 环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql# 交互式运行
docker run -it ubuntu:20.04 /bin/bash

查看容器

# 查看运行中的容器
docker ps# 查看所有容器(包括停止的)
docker ps -a# 查看容器详细信息
docker inspect container_name# 查看容器资源使用情况
docker stats # [container_name]# 查看容器进程
docker top container_name

停止和删除容器

# 停止容器
docker stop container_name# 强制停止容器
docker kill container_name# 重启容器
docker restart container_name# 删除容器
docker rm container_name# 强制删除运行中的容器
docker rm -f container_name# 删除所有停止的容器
docker container prune

2.3 容器交互命令

进入容器

# 在运行的容器中执行命令
docker exec -it container_name /bin/bash# 执行单个命令
docker exec container_name ls -la# 以 root 用户身份进入
docker exec -it --user root container_name /bin/bash

文件操作

# 从容器复制文件到主机
docker cp container_name:/path/to/file /host/path/# 从主机复制文件到容器
docker cp /host/path/file container_name:/path/to/# 查看容器文件系统变化
docker diff container_name

日志查看

# 查看容器日志
docker logs container_name# 实时查看日志
docker logs -f container_name# 查看最近的日志
docker logs --tail 100 container_name# 查看指定时间的日志
docker logs --since "2023-01-01" container_name

2.4 实践练习

练习1:部署 Web 服务器

# 创建一个临时目录用于练习
mkdir -p /tmp/docker-tutorial
cd /tmp/docker-tutorial# 创建一个简单的 HTML 文件
cat > index.html << 'EOF'
<!DOCTYPE html>
<html>
<head><title>My Docker Web Server</title>
</head>
<body><h1>Hello from Docker!</h1><p>This is served by nginx running in a Docker container.</p>
</body>
</html>
EOF# 运行 nginx 容器并挂载 HTML 文件
docker run -d \--name my-web-server \-p 8080:80 \-v $(pwd):/usr/share/nginx/html \nginx# 测试访问
curl http://localhost:8080# 查看容器状态
docker ps# 查看日志
docker logs my-web-server# 清理
docker stop my-web-server
docker rm my-web-server

练习2:数据库容器

# 运行 MySQL 容器
docker run -d \--name mysql-db \-e MYSQL_ROOT_PASSWORD=mypassword \-e MYSQL_DATABASE=testdb \-p 3306:3306 \mysql:8.0# 等待数据库启动
sleep 30# 连接到数据库
docker exec -it mysql-db mysql -uroot -pmypassword# 在 MySQL 中执行命令
# SHOW DATABASES;
# USE testdb;
# CREATE TABLE users (id INT, name VARCHAR(50));
# INSERT INTO users VALUES (1, 'Alice');
# SELECT * FROM users;
# EXIT;# 从外部连接数据库(如果安装了 mysql 客户端)
# mysql -h 127.0.0.1 -P 3306 -uroot -pmypassword# 清理
docker stop mysql-db
docker rm mysql-db

练习3:Python 应用容器

# 创建 Python 应用目录
mkdir python-app
cd python-app# 创建 Python 应用
cat > app.py << 'EOF'
from flask import Flask
import osapp = Flask(__name__)@app.route('/')
def hello():return f"Hello from Python app running in Docker!<br>Container ID: {os.uname().nodename}"@app.route('/health')
def health():return "OK"if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
EOF# 创建 requirements.txt
echo "Flask==2.3.3" > requirements.txt# 运行 Python 容器
docker run -d \--name python-app \-p 5000:5000 \-v $(pwd):/app \-w /app \python:3.11-slim \bash -c "pip install -r requirements.txt && python app.py"# 等待应用启动
sleep 10# 测试应用
curl http://localhost:5000
curl http://localhost:5000/health# 查看日志
docker logs python-app# 清理
docker stop python-app
docker rm python-app
cd ..

2.5 高级命令技巧

批量操作

# 停止所有运行的容器
docker stop $(docker ps -q)# 删除所有停止的容器
docker rm $(docker ps -aq)# 删除所有镜像
docker rmi $(docker images -q)# 系统清理(删除未使用的容器、网络、镜像)
docker system prune# 完全清理(包括数据卷)
docker system prune -a --volumes

资源限制

# 限制内存使用
docker run -d --memory="512m" nginx# 限制 CPU 使用
docker run -d --cpus="1.5" nginx# 限制 CPU 和内存
docker run -d --memory="1g" --cpus="2" nginx# 查看资源使用情况
docker stats

网络配置

# 指定网络模式
docker run -d --network host nginx# 创建自定义网络
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章 中详细讲解。

2.6 常见问题和解决方案

端口冲突

# 查看端口占用
sudo netstat -tulpn | grep :8080# 使用不同端口
docker run -d -p 8081:80 nginx

容器无法启动

# 查看详细错误信息
docker logs container_name# 检查容器配置
docker inspect container_name# 以交互模式调试
docker run -it image_name /bin/bash

镜像拉取失败

# 使用国内镜像源
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx# 配置镜像加速器(编辑 /etc/docker/daemon.json)
{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}

本章总结

在本章中,我们深入学习了 Docker 的常用命令:

  1. 镜像管理:掌握了镜像的拉取、查看、删除等操作
  2. 容器生命周期:学会了容器的创建、启动、停止、删除
  3. 容器交互:了解了如何进入容器、查看日志、复制文件
  4. 实践应用:通过 Web 服务器、数据库、Python 应用的部署加深理解
  5. 高级技巧:掌握了批量操作、资源限制、网络配置等高级用法

关键命令总结

  • docker run:创建并运行容器
  • docker ps:查看容器状态
  • docker exec:在容器中执行命令
  • docker logs:查看容器日志
  • docker stop/start/restart:控制容器状态

最佳实践

  • 为容器指定有意义的名称
  • 合理使用端口映射和数据卷
  • 定期清理未使用的容器和镜像
  • 使用资源限制防止容器占用过多资源

下一章我们将学习 Docker 网络机制,了解容器间如何通信。


http://www.dtcms.com/a/442559.html

相关文章:

  • 自己电脑上做网站怎么使用源码抓取wordpress中的 图片
  • MySQL:CRUD
  • stp mode stp 概念及题目
  • 快速搭建网站前端插件石家庄热点头条新闻
  • PiscCode:基于OpenCV的前景物体检测
  • 木渎网站建设做网站要具备哪些
  • MATLAB构造10 阶幻方(Strachey 方法)
  • 做宠物网站导航应该写什么字定制型网站制作公司
  • 万网 网站模板电商网站设计流程图
  • springboot基于BS的小区家政服务预约平台(代码+数据库+LW)
  • [光学原理与应用-486]:《国产皮秒紫外激光器参数对比表》
  • 连锁 加盟 网站模板代理上网
  • php购物网站开发设计与实现seo推广用什么做网站好
  • 少儿编程网站wordpress插件转tp5
  • Windows 10 系统编程——线程专题1
  • 网页制作与网站建设问答题邹平网站定制
  • mysql中的单引号与双引号
  • 四维码制作网站工程信息造价
  • 贪心算法详解与应用
  • 商业网站建设开发seo站长工具是什么
  • 根式方程:结构联想巧用三角代换
  • 10.4作业
  • leetcode 28. 找出字符串中第一个匹配项的下标 python
  • 网站建设设计大作业单位网站建设典型材料
  • 金华网站建设方案策划苏州软件开发公司哪家好
  • 网站免费正能量软件网站建设合同书
  • CTFHub 信息泄露通关笔记8:Git泄露 Stash(两种方法渗透)
  • 如何做网站的内容网站开发要求描述
  • 做百度商桥网站代做毕业设计网站现成
  • vnpy解读1