1. 容器化技术概述
容器化技术是一种轻量级的虚拟化技术,可以将应用程序及其依赖项打包到一个容器中,实现应用程序的快速部署和运行。更多学习教程www.fgedu.net.cn
1.1 容器化技术的优势
- 轻量级:容器共享主机内核,比虚拟机更轻量
- 快速部署:容器启动时间短,可在几秒内启动
- 一致性:容器在不同环境中运行结果一致
- 隔离性:容器之间相互隔离,互不影响
- 可移植性:容器可以在任何支持Docker的环境中运行
- 可扩展性:容器可以快速复制和扩展
1.2 容器化与虚拟化的区别
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 启动时间 | 秒级 | 分钟级 |
| 资源占用 | 低(MB级) | 高(GB级) |
| 隔离性 | 进程级 | 系统级 |
| 可移植性 | 高 | 中 |
| 性能 | 接近原生 | 有开销 |
2. Docker安装与配置
Docker是目前最流行的容器化平台,支持多种操作系统。学习交流加群风哥微信: itpux-com
2.1 在CentOS上安装Docker
# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装依赖包
# yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置Docker仓库
# yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker CE
# yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker
# systemctl start docker
# 设置Docker开机自启
# systemctl enable docker
# 验证Docker安装
# docker –version
Docker version 20.10.17, build 100c701
# 运行Hello World容器
# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
…
2.2 在Ubuntu上安装Docker
# apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖包
# apt-get update
# apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
# 添加Docker GPG密钥
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置Docker仓库
# echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker CE
# apt-get update
# apt-get install -y docker-ce docker-ce-cli containerd.io
# 启动Docker
# systemctl start docker
# 设置Docker开机自启
# systemctl enable docker
# 验证Docker安装
# docker –version
Docker version 20.10.17, build 100c701
2.3 Docker配置
# docker info
# 配置Docker镜像加速
# vi /etc/docker/daemon.json
{
“registry-mirrors”: [“https://mirror.aliyuncs.com”]
}
# 重启Docker
# systemctl restart docker
# 验证镜像加速配置
# docker info | grep Registry
Registry Mirrors:
https://mirror.aliyuncs.com/
3. Docker基础命令
Docker提供了丰富的命令行工具,用于管理镜像、容器、网络和存储等。学习交流加群风哥QQ113257174
3.1 镜像相关命令
# docker pull ubuntu:20.04
# 查看本地镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 d70eaf7277ea 2 weeks ago 72.8MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
# 删除镜像
# docker rmi ubuntu:20.04
# 搜索镜像
# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16718 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2085 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 814 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 156
bitnami/nginx Bitnami nginx Docker Image 141 [OK]
3.2 容器相关命令
# docker run -d –name my-container -p 8080:80 nginx
# 查看运行中的容器
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1234567890ab nginx “/docker-entrypoint.…” 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp my-container
# 查看所有容器(包括停止的)
# docker ps -a
# 停止容器
# docker stop my-container
# 启动容器
# docker start my-container
# 重启容器
# docker restart my-container
# 删除容器
# docker rm my-container
# 查看容器日志
# docker logs my-container
# 进入容器
# docker exec -it my-container bash
4. Docker镜像管理
Docker镜像是容器的基础,了解镜像的构建和管理对于使用Docker至关重要。更多学习教程公众号风哥教程itpux_com
4.1 构建Docker镜像
# vi Dockerfile
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y nginx
EXPOSE 80
CMD [“nginx”, “-g”, “daemon off;”]
# 构建镜像
# docker build -t my-nginx .
# 查看构建的镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-nginx latest abcdef123456 1 minute ago 132MB
ubuntu 20.04 d70eaf7277ea 2 weeks ago 72.8MB
4.2 镜像分层
Docker镜像是由多个层组成的,每层对应Dockerfile中的一条指令。这种分层结构使得镜像更加高效,便于缓存和共享。
# docker history my-nginx
IMAGE CREATED CREATED BY SIZE COMMENT
abcdef123456 1 minute ago /bin/sh -c #(nop) CMD [“nginx” “-g” “daemon off;”] 0B
1234567890ab 1 minute ago /bin/sh -c #(nop) EXPOSE 80 0B
9876543210fe 1 minute ago /bin/sh -c apt-get update && apt-get install… 59.2MB
d70eaf7277ea 2 weeks ago /bin/sh -c #(nop) CMD [“bash”] 0B
4.3 镜像推送与拉取
# docker login
# 标记镜像
# docker tag my-nginx username/my-nginx:latest
# 推送镜像
# docker push username/my-nginx:latest
# 拉取镜像
# docker pull username/my-nginx:latest
5. Docker容器管理
容器是Docker的核心概念,了解容器的管理对于使用Docker至关重要。author:www.itpux.com
5.1 容器生命周期管理
# docker create –name my-container nginx
# 启动容器
# docker start my-container
# 暂停容器
# docker pause my-container
# 恢复容器
# docker unpause my-container
# 停止容器
# docker stop my-container
# 删除容器
# docker rm my-container
# 强制删除容器(即使正在运行)
# docker rm -f my-container
5.2 容器资源限制
# docker run –cpus=1 –name my-container nginx
# 限制内存使用
# docker run –memory=1G –name my-container nginx
# 限制磁盘I/O
# docker run –device-read-bps /dev/sda:1mb –name my-container nginx
# 查看容器资源使用情况
# docker stats my-container
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1234567890ab my-container 0.00% 2.56MiB / 1.00GiB 0.25% 648B / 0B 0B / 0B 2
5.3 容器健康检查
# vi Dockerfile
FROM nginx
HEALTHCHECK –interval=30s –timeout=3s –start-period=5s –retries=3 \
CMD curl -f http://fgedudb/ || exit 1
# 构建镜像
# docker build -t my-nginx-health .
# 运行容器
# docker run -d –name my-container my-nginx-health
# 查看容器健康状态
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1234567890ab my-nginx-health “/docker-entrypoint.…” 1 minute ago Up 1 minute (healthy) 80/tcp my-container
6. Docker网络配置
Docker提供了多种网络模式,用于容器之间的通信和容器与外部网络的连接。
6.1 网络模式
- bridge:默认网络模式,容器通过网桥与主机通信
- host:容器使用主机网络,共享主机的网络命名空间
- none:容器没有网络接口
- container:容器共享另一个容器的网络命名空间
- 自定义网络:用户创建的网络,可以指定网络类型和配置
6.2 网络管理
# docker network ls
NETWORK ID NAME DRIVER SCOPE
1234567890ab bridge bridge local
9876543210fe host host local
abcdef123456 none null local
# 创建自定义网络
# docker network create –driver bridge my-network
# 查看网络详情
# docker network inspect my-network
# 将容器连接到网络
# docker network connect my-network my-container
# 将容器从网络断开
# docker network disconnect my-network my-container
# 删除网络
# docker network rm my-network
6.3 容器间通信
# docker run -d –name container1 –network my-network nginx
# docker run -d –name container2 –network my-network nginx
# 在container1中访问container2
# docker exec -it container1 ping container2
PING container2 (172.18.0.3) 56(84) bytes of data.
64 bytes from container2.my-network (172.18.0.3): icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=2 ttl=64 time=0.065 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=3 ttl=64 time=0.068 ms
7. Docker存储管理
Docker提供了多种存储驱动和卷管理方式,用于持久化容器数据。
7.1 存储驱动
- overlay2:默认存储驱动,适用于大多数场景
- aufs:适用于Ubuntu等系统
- devicemapper:适用于RHEL/CentOS等系统
- btrfs:适用于支持btrfs文件系统的系统
- zfs:适用于支持zfs文件系统的系统
7.2 数据卷
# docker volume create my-volume
# 查看数据卷
# docker volume ls
DRIVER VOLUME NAME
local my-volume
# 查看数据卷详情
# docker volume inspect my-volume
# 使用数据卷
# docker run -d –name my-container -v my-volume:/data nginx
# 删除数据卷
# docker volume rm my-volume
# 清理未使用的数据卷
# docker volume prune
7.3 绑定挂载
# docker run -d –name my-container -v /host/path:/container/path nginx
# 查看挂载情况
# docker inspect my-container | grep -A 10 “Mounts”
8. Docker Compose使用
Docker Compose是一个用于定义和运行多容器Docker应用的工具,使用YAML文件来配置应用服务。
8.1 安装Docker Compose
# curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
# 赋予执行权限
# chmod +x /usr/local/bin/docker-compose
# 验证安装
# docker-compose –version
docker-compose version 1.29.2, build 5becea4c
8.2 使用Docker Compose
# vi docker-compose.yml
version: ‘3’
services:
web:
image: nginx
ports:
– “8080:80”
volumes:
– ./html:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
volumes:
– mysql-data:/var/lib/mysql
volumes:
mysql-data:
# 启动服务
# docker-compose up -d
# 查看服务状态
# docker-compose ps
Name Command State Ports
——————————————————————————–
myapp_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
myapp_web_1 /docker-entrypoint.sh nginx Up 0.0.0.0:8080->80/tcp
# 停止服务
# docker-compose down
# 查看服务日志
# docker-compose logs
9. Docker最佳实践
使用Docker时,遵循最佳实践可以提高容器的安全性、性能和可维护性。
- 使用官方镜像或经过验证的镜像
- 定期更新镜像和容器
- 最小化镜像大小
- 使用非root用户运行容器
- 配置资源限制
- 使用数据卷持久化数据
- 配置健康检查
- 使用Docker Compose管理多容器应用
- 实施容器安全扫描
- 制定容器备份策略
9.1 镜像最佳实践
- 使用轻量级基础镜像
- 减少镜像层数
- 使用多阶段构建
- 清理构建缓存
- 使用标签管理镜像版本
9.2 容器最佳实践
- 一个容器只运行一个服务
- 使用环境变量配置容器
- 避免在容器中存储敏感信息
- 设置合理的重启策略
- 监控容器健康状态
9.3 安全最佳实践
- 使用最新版本的Docker和镜像
- 限制容器权限
- 禁用不必要的网络端口
- 使用网络分段
- 定期扫描容器漏洞
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
