1. 首页 > IT综合教程 > 正文

it教程FG300-容器化技术与Docker实战

1. 容器化技术概述

容器化技术是一种轻量级的虚拟化技术,可以将应用程序及其依赖项打包到一个容器中,实现应用程序的快速部署和运行。更多学习教程www.fgedu.net.cn

1.1 容器化技术的优势

  • 轻量级:容器共享主机内核,比虚拟机更轻量
  • 快速部署:容器启动时间短,可在几秒内启动
  • 一致性:容器在不同环境中运行结果一致
  • 隔离性:容器之间相互隔离,互不影响
  • 可移植性:容器可以在任何支持Docker的环境中运行
  • 可扩展性:容器可以快速复制和扩展

1.2 容器化与虚拟化的区别

特性 容器 虚拟机
启动时间 秒级 分钟级
资源占用 低(MB级) 高(GB级)
隔离性 进程级 系统级
可移植性
性能 接近原生 有开销

2. Docker安装与配置

Docker是目前最流行的容器化平台,支持多种操作系统。学习交流加群风哥微信: itpux-com

2.1 在CentOS上安装Docker

# 卸载旧版本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

# 卸载旧版本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信息
# 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/

风哥风哥提示:配置Docker镜像加速可以提高镜像拉取速度,推荐使用国内镜像源。

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镜像

# 创建Dockerfile
# 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
2 weeks ago /bin/sh -c #(nop) ADD file:xxxx in / 72.8MB

4.3 镜像推送与拉取

# 登录Docker Hub
# 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 容器资源限制

# 限制CPU使用
# 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 容器健康检查

# 创建带健康检查的Dockerfile
# 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

# 下载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

# 创建docker-compose.yml文件
# 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 镜像最佳实践

  1. 使用轻量级基础镜像
  2. 减少镜像层数
  3. 使用多阶段构建
  4. 清理构建缓存
  5. 使用标签管理镜像版本

9.2 容器最佳实践

  1. 一个容器只运行一个服务
  2. 使用环境变量配置容器
  3. 避免在容器中存储敏感信息
  4. 设置合理的重启策略
  5. 监控容器健康状态

9.3 安全最佳实践

  1. 使用最新版本的Docker和镜像
  2. 限制容器权限
  3. 禁用不必要的网络端口
  4. 使用网络分段
  5. 定期扫描容器漏洞
风哥风哥提示:Docker容器化技术已经成为现代应用部署的标准方式,掌握Docker的使用技巧对于DevOps和系统运维人员至关重要。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息