内容大纲
- 1. 容器化技术概述
- 2. Docker基础知识
- 3. Docker安装与配置
- 4. Docker镜像管理
- 5. Docker容器操作
- 6. Docker网络配置
- 7. Docker存储管理
- 8. Docker Compose使用
- 9. Docker Swarm集群
- 10. 生产环境最佳实践
- 11. 常见问题与解决方案
1. 容器化技术概述
容器化技术是一种轻量级的虚拟化技术,它允许将应用程序及其依赖项打包到一个独立的容器中,实现应用程序的快速部署、移植和扩展。与传统的虚拟机相比,容器具有更小的体积、更快的启动速度和更高的资源利用率。
容器化技术的主要优势包括:
- 一致性:容器在不同环境中运行一致,消除了”在我的机器上可以运行”的问题
- 隔离性:容器之间相互隔离,确保应用程序的安全性和稳定性
- 可移植性:容器可以在任何支持容器运行时的环境中运行
- 资源效率:容器共享主机操作系统内核,比虚拟机更节省资源
- 快速部署:容器启动时间通常在秒级,大大缩短了应用程序的部署时间
风哥风哥提示:容器化技术已成为现代应用开发和部署的标准实践,特别是在微服务架构和DevOps环境中。
2. Docker基础知识
Docker是目前最流行的容器化平台,它提供了一套完整的工具和API,用于构建、运行和管理容器。Docker的核心组件包括:
- Docker Engine:Docker的核心运行时,负责容器的创建、运行和管理
- Docker镜像:容器的基础,包含了应用程序及其依赖项
- Docker容器:Docker镜像的运行实例
- Docker Registry:存储和分发Docker镜像的仓库,如Docker Hub
Docker的工作原理是通过Linux内核的namespace和cgroup技术,为容器提供隔离的运行环境。namespace用于隔离容器的网络、进程、文件系统等资源,cgroup用于限制容器的资源使用。
3. Docker安装与配置
3.1 在Ubuntu上安装Docker
sudo apt-get update
# 安装必要的依赖包
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
# 添加Docker稳定版仓库
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
# 更新软件包索引
sudo apt-get update
# 安装Docker CE
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证Docker安装是否成功
sudo docker run hello-world
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the “hello-world” image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
3.2 在CentOS上安装Docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker仓库
sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker CE
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动Docker服务
sudo systemctl start docker
# 设置Docker服务开机自启
sudo systemctl enable docker
# 验证Docker安装是否成功
sudo docker run hello-world
3.3 Docker配置
Docker的配置文件位于/etc/docker/daemon.json,可以通过修改该文件来配置Docker的行为。例如,配置Docker的镜像加速源:
sudo vi /etc/docker/daemon.json
“registry-mirrors”: [
“https://hub-mirror.c.163.com”,
“https://docker.mirrors.ustc.edu.cn”,
“https://registry.docker-cn.com”
],
“exec-opts”: [“native.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”
}
sudo systemctl restart docker
4. Docker镜像管理
4.1 拉取镜像
docker pull ubuntu:latest
# 拉取指定版本的镜像
docker pull ubuntu:20.04
7b1a6ab2e44d: Pull complete
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
4.2 列出镜像
docker images
ubuntu latest 7e0aa2d69a15 2 weeks ago 72.9MB
hello-world latest bf756fb1ae65 5 months ago 13.3kB
4.3 删除镜像
docker rmi 7e0aa2d69a15
# 通过镜像名称删除镜像
docker rmi ubuntu:latest
4.4 构建镜像
可以通过Dockerfile来构建自定义镜像。创建一个Dockerfile文件:
FROM ubuntu:20.04
# 维护者信息
MAINTAINER fengge
# 更新软件包并安装nginx
RUN apt-get update && apt-get install -y nginx
# 复制自定义配置文件
COPY nginx.conf /etc/nginx/nginx.conf
# 暴露80端口
EXPOSE 80
# 启动nginx服务
CMD [“nginx”, “-g”, “daemon off;”]
docker build -t my-nginx:latest .
Step 1/6 : FROM ubuntu:20.04
—> 7e0aa2d69a15
Step 2/6 : MAINTAINER fengge
—> Running in 3a3b6f4c5d7e
Removing intermediate container 3a3b6f4c5d7e
—> 8f9e7d6c5b4a
Step 3/6 : RUN apt-get update && apt-get install -y nginx
—> Running in 9c8b7a6d5e4f
…
Step 6/6 : CMD [“nginx”, “-g”, “daemon off;”]
—> Running in 5d4c3b2a1f7e
Removing intermediate container 5d4c3b2a1f7e
—> 1a2b3c4d5e6f
Successfully built 1a2b3c4d5e6f
Successfully tagged my-nginx:latest
5. Docker容器操作
5.1 创建并运行容器
docker run -it ubuntu:latest bash
# 运行一个后台容器并映射端口
docker run -d -p 80:80 –name nginx-container nginx:latest
# 运行一个带环境变量的容器
docker run -d -e MYSQL_ROOT_PASSWORD=123456 –name mysql-container mysql:latest
root@container-id:/#
# 运行后台容器的输出
1a2b3c4d5e6f7g8h9i0j
5.2 列出容器
docker ps
# 列出所有容器(包括停止的)
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a2b3c4d5e6f nginx:latest “nginx -g ‘daemon of…” 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp nginx-container
# 列出所有容器输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a2b3c4d5e6f nginx:latest “nginx -g ‘daemon of…” 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp nginx-container
9i8h7g6f5e4d ubuntu:latest “bash” 10 minutes ago Exited (0) 5 minutes ago ubuntu-container
5.3 停止和启动容器
docker stop nginx-container
# 启动容器
docker start nginx-container
# 重启容器
docker restart nginx-container
5.4 进入容器
docker exec -it nginx-container bash
5.5 删除容器
docker rm ubuntu-container
# 强制删除运行中的容器
docker rm -f nginx-container
6. Docker网络配置
6.1 Docker网络类型
Docker提供了多种网络类型,包括:
- bridge:默认网络类型,容器通过网桥连接到主机网络
- host:容器直接使用主机网络,没有网络隔离
- none:容器没有网络连接
- overlay:用于Docker Swarm集群的网络类型
- macvlan:为容器分配MAC地址,使其看起来像物理设备
6.2 创建自定义网络
docker network create –driver bridge my-network
# 列出所有网络
docker network ls
1a2b3c4d5e6f bridge bridge local
2b3c4d5e6f7g host host local
3c4d5e6f7g8h my-network bridge local
4d5e6f7g8h9i none null local
6.3 使用自定义网络
docker run -d –name container1 –network my-network nginx:latest
docker run -d –name container2 –network my-network nginx:latest
7. Docker存储管理
7.1 数据卷
数据卷是Docker中用于持久化数据的机制,它可以在容器之间共享数据,并且数据不会随着容器的删除而丢失。
docker volume create my-volume
# 列出数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect my-volume
DRIVER VOLUME NAME
local my-volume
# 查看数据卷详情输出
[
{
“CreatedAt”: “2026-04-03T10:00:00Z”,
“Driver”: “local”,
“Labels”: {},
“Mountpoint”: “/var/lib/docker/volumes/my-volume/_data”,
“Name”: “my-volume”,
“Options”: {},
“Scope”: “local”
}
]
7.2 使用数据卷
docker run -d -v my-volume:/app –name app-container nginx:latest
7.3 绑定挂载
绑定挂载是将主机上的目录或文件挂载到容器中,适用于开发环境。
docker run -d -v /host/path:/container/path –name dev-container nginx:latest
8. Docker Compose使用
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,它使用YAML文件来配置应用程序的服务、网络和存储。
8.1 安装Docker Compose
sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose –version
8.2 编写docker-compose.yml文件
services:
web:
image: nginx:latest
ports:
– “80:80”
volumes:
– ./nginx.conf:/etc/nginx/nginx.conf
networks:
– app-network
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: myapp
volumes:
– db-data:/var/lib/mysql
networks:
– app-network
networks:
app-network:
driver: bridge
volumes:
db-data:
driver: local
8.3 运行Docker Compose
docker-compose up -d
# 查看服务状态
docker-compose ps
# 停止服务
docker-compose down
Creating network “app_app-network” with driver “bridge”
Creating volume “app_db-data” with local driver
Creating app_web_1 … done
Creating app_db_1 … done
# 查看服务状态输出
Name Command State Ports
—————————————————————
app_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
app_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
9. Docker Swarm集群
Docker Swarm是Docker的原生集群管理工具,它允许将多个Docker主机组成一个集群,实现容器的编排和管理。
9.1 初始化Swarm集群
docker swarm init –advertise-addr 192.168.1.100
To add a worker to this swarm, run the following command:
docker swarm join –token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.1.100:2377
To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.
9.2 添加节点到Swarm集群
docker swarm join –token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.1.100:2377
9.3 部署服务到Swarm集群
docker service create –name nginx-service –replicas 3 -p 80:80 nginx:latest
# 查看服务状态
docker service ls
# 查看服务详情
docker service ps nginx-service
ID NAME MODE REPLICAS IMAGE PORTS
1a2b3c4d5e6f nginx-service replicated 3/3 nginx:latest *:80->80/tcp
# 查看服务详情输出
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
2b3c4d5e6f7g nginx-service.1 nginx:latest node1 Running Running 2 minutes ago
3c4d5e6f7g8h nginx-service.2 nginx:latest node2 Running Running 2 minutes ago
4d5e6f7g8h9i nginx-service.3 nginx:latest node3 Running Running 2 minutes ago
10. 生产环境最佳实践
10.1 镜像管理
- 使用官方镜像:优先使用Docker Hub上的官方镜像,确保安全性和稳定性
- 使用固定版本标签:避免使用latest标签,使用具体的版本号,确保环境一致性
- 最小化镜像大小:使用Alpine等轻量级基础镜像,减少镜像体积
- 定期更新镜像:及时更新镜像以修复安全漏洞
10.2 容器管理
- 设置资源限制:为容器设置CPU和内存限制,避免资源争用
- 使用健康检查:配置健康检查,确保容器正常运行
- 使用命名卷:使用命名卷持久化数据,避免数据丢失
- 限制容器权限:使用非root用户运行容器,减少安全风险
10.3 网络配置
- 使用自定义网络:为不同的应用创建独立的网络,增强网络隔离
- 使用网络策略:在Swarm集群中使用网络策略,控制容器间的通信
- 使用HTTPS:为容器服务配置HTTPS,确保数据传输安全
10.4 安全管理
- 扫描镜像:使用工具扫描镜像中的安全漏洞
- 使用 secrets:在Swarm集群中使用secrets管理敏感信息
- 限制容器能力:使用–cap-drop和–cap-add参数限制容器的系统调用能力
- 定期审计:定期审计容器和镜像,确保符合安全要求
学习交流加群风哥微信: itpux-com
11. 常见问题与解决方案
11.1 容器无法启动
问题:容器启动后立即退出
解决方案:检查容器的日志,查看退出原因
docker logs container-name
11.2 网络连接问题
问题:容器之间无法通信
解决方案:确保容器在同一个网络中,检查网络配置
docker inspect container-name | grep -A 20 “NetworkMode”
11.3 存储问题
问题:数据卷挂载失败
解决方案:检查主机目录权限,确保容器有足够的权限访问挂载目录
docker volume inspect volume-name
11.4 性能问题
问题:容器运行缓慢
解决方案:检查容器的资源使用情况,调整资源限制
docker stats container-name
更多学习教程www.fgedu.net.cn
学习交流加群风哥QQ113257174
更多学习教程公众号风哥教程itpux_com
author:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
