活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

Oracle Linux系统下Docker容器技术的全面解析与实用操作指南从基础安装到高级部署技巧详解

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-9 12:30:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

Docker作为当前最流行的容器化技术,已经彻底改变了软件开发、测试和部署的方式。Oracle Linux作为Oracle公司提供的企业级Linux发行版,以其稳定性、安全性和对Oracle产品的优化支持而闻名。将Docker容器技术与Oracle Linux结合,可以为企业和开发者提供一个强大、可靠且高效的容器化平台。

本文将全面介绍在Oracle Linux系统上使用Docker容器技术的各个方面,从基础安装到高级部署技巧,帮助读者掌握在Oracle Linux环境下充分利用Docker的方法。

Docker基础概念

在深入实践之前,我们需要了解一些Docker的基础概念:

容器与虚拟机

容器是一种轻量级的虚拟化技术,它共享主机系统的内核,但在用户空间中运行隔离的进程。与传统的虚拟机相比,容器不需要完整的操作系统,因此更加轻量、启动更快、资源利用率更高。

Docker架构

Docker采用客户端-服务器架构,主要包括以下组件:

• Docker客户端:用户与Docker交互的接口
• Docker守护进程(Docker Daemon):负责管理容器、镜像、网络等
• Docker镜像:容器的只读模板
• Docker容器:镜像的运行实例
• Docker注册表:存储和分发镜像的服务

Oracle Linux上安装Docker

系统要求

在开始安装之前,确保你的Oracle Linux系统满足以下要求:

• Oracle Linux 7或更高版本
• 系统内核版本3.10或更高
• 具有sudo权限的用户账户
• 至少2GB的RAM(推荐4GB以上)
• 足够的磁盘空间

安装步骤

首先,更新系统到最新状态:
  1. sudo yum update -y
复制代码

安装必要的依赖包:
  1. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
复制代码

添加Docker的官方仓库:
  1. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
复制代码

安装Docker社区版(CE):
  1. sudo yum install -y docker-ce docker-ce-cli containerd.io
复制代码

启动Docker服务并设置为开机自启:
  1. sudo systemctl start docker
  2. sudo systemctl enable docker
复制代码

验证Docker是否安装成功:
  1. sudo docker run hello-world
复制代码

如果看到”Hello from Docker!“的输出,说明Docker已成功安装。

为了避免每次使用Docker命令时都需要sudo,可以将当前用户添加到docker组:
  1. sudo usermod -aG docker $USER
复制代码

注意:添加用户到docker组后,需要重新登录才能生效。

使用Oracle Linux特定的Docker包

Oracle Linux提供了自己的Docker包,可以更好地与Oracle生态系统集成。如果你希望使用Oracle Linux特定的Docker包,可以按照以下步骤操作:
  1. sudo yum install -y oraclelinux-developer-release-el7
复制代码
  1. sudo yum install -y docker-engine
复制代码
  1. sudo systemctl start docker
  2. sudo systemctl enable docker
复制代码

Docker基本操作

运行第一个容器

使用以下命令运行一个Nginx容器:
  1. docker run -d -p 8080:80 --name my-nginx nginx
复制代码

这个命令的解释:

• -d:在后台运行容器
• -p 8080:80:将主机的8080端口映射到容器的80端口
• --name my-nginx:给容器命名为my-nginx
• nginx:使用nginx镜像

管理容器
  1. docker ps
复制代码
  1. docker ps -a
复制代码
  1. docker stop my-nginx
复制代码
  1. docker start my-nginx
复制代码
  1. docker restart my-nginx
复制代码
  1. docker rm my-nginx
复制代码

如果容器正在运行,需要先停止它或使用-f选项强制删除:
  1. docker rm -f my-nginx
复制代码
  1. docker exec -it my-nginx /bin/bash
复制代码

这个命令的解释:

• -i:保持STDIN打开
• -t:分配一个伪终端
• /bin/bash:在容器中启动bash shell
  1. docker logs my-nginx
复制代码
  1. docker stats my-nginx
复制代码

Docker镜像管理

搜索镜像
  1. docker search nginx
复制代码

拉取镜像
  1. docker pull nginx:latest
复制代码

查看本地镜像
  1. docker images
复制代码

删除镜像
  1. docker rmi nginx:latest
复制代码

构建自定义镜像

创建一个名为Dockerfile的文件,内容如下:
  1. FROM oraclelinux:7
  2. MAINTAINER Your Name <your.email@example.com>
  3. RUN yum update -y && \
  4.     yum install -y httpd && \
  5.     yum clean all
  6. COPY index.html /var/www/html/
  7. EXPOSE 80
  8. CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
复制代码

在同一目录下创建一个index.html文件,内容如下:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>Welcome to Oracle Linux Docker Container</title>
  5. </head>
  6. <body>
  7.     <h1>Hello from Oracle Linux Docker Container!</h1>
  8. </body>
  9. </html>
复制代码
  1. docker build -t my-oracle-linux-httpd .
复制代码
  1. docker run -d -p 8081:80 --name my-httpd my-oracle-linux-httpd
复制代码

导出和导入镜像
  1. docker save -o my-httpd.tar my-oracle-linux-httpd
复制代码
  1. docker load -i my-httpd.tar
复制代码

Docker容器网络配置

查看网络
  1. docker network ls
复制代码

创建自定义网络
  1. docker network create --driver bridge my-network
复制代码

连接容器到网络
  1. docker network connect my-network my-nginx
复制代码

断开容器与网络的连接
  1. docker network disconnect my-network my-nginx
复制代码

查看网络详情
  1. docker network inspect my-network
复制代码

删除网络
  1. docker network rm my-network
复制代码

容器间通信示例
  1. docker network create my-app-network
复制代码
  1. docker run -d --name my-db --network my-app-network -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7
复制代码
  1. docker run -d --name my-app --network my-app-network -p 8080:8080 my-app-image
复制代码

在应用容器中,可以使用my-db作为主机名连接到数据库容器。

端口映射
  1. docker run -d -p 8080:80 --name my-nginx nginx
复制代码
  1. docker run -d -p 192.168.1.100:8080:80 --name my-nginx nginx
复制代码
  1. docker run -d -p 80 --name my-nginx nginx
复制代码

Docker数据管理

数据卷
  1. docker volume create my-data-volume
复制代码
  1. docker volume ls
复制代码
  1. docker volume inspect my-data-volume
复制代码
  1. docker run -d -v my-data-volume:/data --name my-container my-image
复制代码
  1. docker volume rm my-data-volume
复制代码

绑定挂载
  1. docker run -d -v /host/path:/container/path --name my-container my-image
复制代码
  1. docker run -d -v /host/path:/container/path:ro --name my-container my-image
复制代码

数据卷容器
  1. docker create -v /data --name my-data-container my-image
复制代码
  1. docker run -d --volumes-from my-data-container --name my-container1 my-image
  2. docker run -d --volumes-from my-data-container --name my-container2 my-image
复制代码

备份和恢复数据卷
  1. docker run --rm -v my-data-volume:/data -v $(pwd):/backup alpine tar cvf /backup/data-backup.tar /data
复制代码
  1. docker run --rm -v my-data-volume:/data -v $(pwd):/backup alpine tar xvf /backup/data-backup.tar -C /
复制代码

Docker Compose使用

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过Compose,你可以使用YAML文件来配置应用程序的服务,然后使用一个命令创建并启动所有服务。

安装Docker Compose
  1. 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
  2. sudo chmod +x /usr/local/bin/docker-compose
复制代码

验证安装
  1. docker-compose --version
复制代码

创建docker-compose.yml文件

以下是一个简单的Web应用程序的docker-compose.yml示例:
  1. version: '3'
  2. services:
  3.   web:
  4.     build: .
  5.     ports:
  6.       - "5000:5000"
  7.     volumes:
  8.       - .:/code
  9.     depends_on:
  10.       - redis
  11.   redis:
  12.     image: "redis:alpine"
复制代码

使用Docker Compose
  1. docker-compose up
复制代码
  1. docker-compose up -d
复制代码
  1. docker-compose ps
复制代码
  1. docker-compose logs
复制代码
  1. docker-compose down
复制代码
  1. docker-compose up --build
复制代码

Docker Compose高级用法

创建一个.env文件:
  1. MYSQL_ROOT_PASSWORD=my-secret-pw
  2. MYSQL_DATABASE=myapp
复制代码

在docker-compose.yml中使用环境变量:
  1. version: '3'
  2. services:
  3.   db:
  4.     image: mysql:5.7
  5.     environment:
  6.       MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  7.       MYSQL_DATABASE: ${MYSQL_DATABASE}
复制代码
  1. version: '3'
  2. services:
  3.   web:
  4.     image: nginx
  5.     deploy:
  6.       replicas: 3
复制代码
  1. version: '3'
  2. services:
  3.   web:
  4.     image: nginx
  5.     networks:
  6.       - front-tier
  7.       - back-tier
  8.   db:
  9.     image: mysql
  10.     networks:
  11.       - back-tier
  12. networks:
  13.   front-tier:
  14.   back-tier:
复制代码

Docker安全配置

容器运行时安全

在Dockerfile中创建非root用户:
  1. FROM oraclelinux:7
  2. # 创建非root用户
  3. RUN groupadd -r appuser && useradd -r -g appuser appuser
  4. # 切换到非root用户
  5. USER appuser
  6. CMD ["/bin/bash"]
复制代码
  1. docker run --cap-drop ALL --cap-add CHOWN my-image
复制代码
  1. docker run --read-only my-image
复制代码
  1. docker run -m 512m my-image
复制代码
  1. docker run --cpus=1.5 my-image
复制代码

Docker守护进程安全

1. 生成CA证书:
  1. openssl genrsa -aes256 -out ca-key.pem 4096
  2. openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
复制代码

1. 生成服务器证书:
  1. openssl genrsa -out server-key.pem 4096
  2. openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
  3. echo subjectAltName = DNS:$HOST,IP:127.0.0.1 >> extfile.cnf
  4. openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
复制代码

1. 生成客户端证书:
  1. openssl genrsa -out key.pem 4096
  2. openssl req -subj '/CN=client' -new -key key.pem -out client.csr
  3. echo extendedKeyUsage = clientAuth > extfile.cnf
  4. openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
复制代码

1. 配置Docker守护进程:

编辑/etc/docker/daemon.json文件:
  1. {
  2.   "tls": true,
  3.   "tlscacert": "/path/to/ca.pem",
  4.   "tlscert": "/path/to/server-cert.pem",
  5.   "tlskey": "/path/to/server-key.pem",
  6.   "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"]
  7. }
复制代码

1. 重启Docker服务:
  1. sudo systemctl restart docker
复制代码

1. 使用TLS连接Docker:
  1. docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:2376 version
复制代码

1. 编辑/etc/subuid和/etc/subgid文件,添加:
  1. dockremap:100000:65536
复制代码

1. 编辑/etc/docker/daemon.json文件:
  1. {
  2.   "userns-remap": "dockremap"
  3. }
复制代码

1. 重启Docker服务:
  1. sudo systemctl restart docker
复制代码

内容信任

启用Docker内容信任:
  1. export DOCKER_CONTENT_TRUST=1
复制代码

高级部署技巧

Docker Swarm模式
  1. docker swarm init --advertise-addr <MANAGER-IP>
复制代码

在工作节点上运行:
  1. docker swarm join --token <TOKEN> <MANAGER-IP>:2377
复制代码
  1. docker service create --name my-web -p 80:80 --replicas 3 nginx
复制代码
  1. docker service scale my-web=5
复制代码
  1. docker service update --image nginx:alpine my-web
复制代码
  1. docker service ls
复制代码
  1. docker service inspect my-web
复制代码
  1. docker service ps my-web
复制代码
  1. docker service rm my-web
复制代码

使用Docker Stack
  1. version: "3"
  2. services:
  3.   web:
  4.     image: nginx
  5.     ports:
  6.       - "80:80"
  7.     deploy:
  8.       replicas: 3
  9.       update_config:
  10.         parallelism: 1
  11.         delay: 10s
  12.       restart_policy:
  13.         condition: on-failure
  14.   visualizer:
  15.     image: dockersamples/visualizer
  16.     ports:
  17.       - "8080:8080"
  18.     volumes:
  19.       - "/var/run/docker.sock:/var/run/docker.sock"
  20.     deploy:
  21.       placement:
  22.         constraints: [node.role == manager]
复制代码
  1. docker stack deploy -c docker-stack.yml my-app
复制代码
  1. docker stack ls
复制代码
  1. docker stack services my-app
复制代码
  1. docker stack rm my-app
复制代码

使用Docker Secrets管理敏感数据
  1. echo "my-secret-password" | docker secret create my-db-password -
复制代码
  1. docker service create --name my-db --secret my-db-password mysql:5.7
复制代码
  1. version: "3.1"
  2. services:
  3.   db:
  4.     image: mysql:5.7
  5.     environment:
  6.       MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
  7.     secrets:
  8.       - db_root_password
  9. secrets:
  10.   db_root_password:
  11.     file: ./db_root_password.txt
复制代码

使用Docker Configs管理配置文件
  1. docker config create my-nginx-config ./nginx.conf
复制代码
  1. docker service create --name my-nginx --config my-nginx-config nginx
复制代码
  1. version: "3.1"
  2. services:
  3.   nginx:
  4.     image: nginx
  5.     configs:
  6.       - source: my-nginx-config
  7.         target: /etc/nginx/nginx.conf
  8. configs:
  9.   my-nginx-config:
  10.     file: ./nginx.conf
复制代码

性能优化

优化Docker镜像大小
  1. # 第一阶段:构建应用
  2. FROM oraclelinux:7 as builder
  3. RUN yum install -y gcc
  4. COPY app.c .
  5. RUN gcc -o app app.c
  6. # 第二阶段:运行应用
  7. FROM oraclelinux:7
  8. COPY --from=builder /app .
  9. CMD ["./app"]
复制代码
  1. # 不推荐
  2. RUN yum update -y
  3. RUN yum install -y httpd
  4. RUN yum clean all
  5. # 推荐
  6. RUN yum update -y && \
  7.     yum install -y httpd && \
  8.     yum clean all
复制代码
  1. # 使用Oracle Linux最小化镜像
  2. FROM oraclelinux:7-slim
复制代码
  1. RUN yum install -y httpd && \
  2.     yum clean all && \
  3.     rm -rf /var/cache/yum/*
复制代码

优化容器性能
  1. docker run -m 512m --cpus=1.5 my-image
复制代码
  1. docker run --tmpfs /tmp:rw,size=512m my-image
复制代码

Oracle Linux默认使用Overlay2作为存储驱动,这是目前性能最好的存储驱动之一。可以通过以下命令查看当前使用的存储驱动:
  1. docker info | grep "Storage Driver"
复制代码

如果需要更改存储驱动,可以编辑/etc/docker/daemon.json文件:
  1. {
  2.   "storage-driver": "overlay2"
  3. }
复制代码

然后重启Docker服务:
  1. sudo systemctl restart docker
复制代码

编辑/etc/docker/daemon.json文件:
  1. {
  2.   "log-driver": "json-file",
  3.   "log-opts": {
  4.     "max-size": "10m",
  5.     "max-file": "3"
  6.   }
  7. }
复制代码

然后重启Docker服务:
  1. sudo systemctl restart docker
复制代码

故障排除

常见问题及解决方案

查看容器日志:
  1. docker logs <container-id>
复制代码

检查容器状态:
  1. docker inspect <container-id>
复制代码

检查容器网络配置:
  1. docker inspect <container-id> | grep -A 20 "NetworkSettings"
复制代码

测试容器网络连通性:
  1. docker exec -it <container-id> ping <target-ip>
复制代码

检查数据卷:
  1. docker volume ls
  2. docker volume inspect <volume-name>
复制代码

检查磁盘空间:
  1. df -h
  2. docker system df
复制代码

检查容器资源使用:
  1. docker stats <container-id>
复制代码

检查Docker系统资源使用:
  1. docker system info
复制代码

Docker系统维护
  1. # 清理停止的容器、未使用的网络、悬空镜像和构建缓存
  2. docker system prune
  3. # 清理未使用的镜像(不仅仅是悬空镜像)
  4. docker system prune -a
  5. # 清理未使用的卷
  6. docker volume prune
复制代码
  1. docker info
复制代码
  1. docker events
复制代码

最佳实践和总结

Docker最佳实践

1. 使用小型基础镜像:选择适合你需求的最小化基础镜像,如Oracle Linux的slim版本。
2. 优化Dockerfile:合并RUN指令以减少镜像层数使用多阶段构建来减小最终镜像大小按照正确的顺序排列指令,将不常更改的指令放在前面
3. 合并RUN指令以减少镜像层数
4. 使用多阶段构建来减小最终镜像大小
5. 按照正确的顺序排列指令,将不常更改的指令放在前面
6. 安全考虑:以非root用户运行容器限制容器能力使用只读文件系统定期更新基础镜像和软件包
7. 以非root用户运行容器
8. 限制容器能力
9. 使用只读文件系统
10. 定期更新基础镜像和软件包
11. 资源管理:为容器设置适当的资源限制监控容器资源使用情况
12. 为容器设置适当的资源限制
13. 监控容器资源使用情况
14. 数据管理:使用数据卷或绑定挂载来持久化数据避免将敏感数据存储在镜像中
15. 使用数据卷或绑定挂载来持久化数据
16. 避免将敏感数据存储在镜像中
17. 网络配置:使用自定义网络而不是默认网络限制容器端口暴露
18. 使用自定义网络而不是默认网络
19. 限制容器端口暴露
20. 日志管理:配置适当的日志驱动和日志轮转避免在容器中生成过多的日志
21. 配置适当的日志驱动和日志轮转
22. 避免在容器中生成过多的日志

使用小型基础镜像:选择适合你需求的最小化基础镜像,如Oracle Linux的slim版本。

优化Dockerfile:

• 合并RUN指令以减少镜像层数
• 使用多阶段构建来减小最终镜像大小
• 按照正确的顺序排列指令,将不常更改的指令放在前面

安全考虑:

• 以非root用户运行容器
• 限制容器能力
• 使用只读文件系统
• 定期更新基础镜像和软件包

资源管理:

• 为容器设置适当的资源限制
• 监控容器资源使用情况

数据管理:

• 使用数据卷或绑定挂载来持久化数据
• 避免将敏感数据存储在镜像中

网络配置:

• 使用自定义网络而不是默认网络
• 限制容器端口暴露

日志管理:

• 配置适当的日志驱动和日志轮转
• 避免在容器中生成过多的日志

Oracle Linux与Docker的优势结合

Oracle Linux与Docker的结合提供了以下优势:

1. 稳定性:Oracle Linux以其企业级稳定性而闻名,为Docker容器提供了可靠的运行环境。
2. 性能优化:Oracle Linux对Docker进行了优化,提供了更好的性能和资源利用率。
3. 安全性:Oracle Linux提供了强大的安全功能,如SELinux,可以增强Docker容器的安全性。
4. Oracle产品支持:Oracle Linux对Oracle数据库、中间件等产品提供了优化支持,使得在容器中运行这些产品更加高效。
5. 长期支持:Oracle Linux提供长期支持,确保你的Docker环境获得长期的安全更新和技术支持。

稳定性:Oracle Linux以其企业级稳定性而闻名,为Docker容器提供了可靠的运行环境。

性能优化:Oracle Linux对Docker进行了优化,提供了更好的性能和资源利用率。

安全性:Oracle Linux提供了强大的安全功能,如SELinux,可以增强Docker容器的安全性。

Oracle产品支持:Oracle Linux对Oracle数据库、中间件等产品提供了优化支持,使得在容器中运行这些产品更加高效。

长期支持:Oracle Linux提供长期支持,确保你的Docker环境获得长期的安全更新和技术支持。

总结

本文全面介绍了在Oracle Linux系统上使用Docker容器技术的各个方面,从基础安装到高级部署技巧。通过本文,你了解了如何在Oracle Linux上安装和配置Docker,如何管理和操作容器和镜像,如何配置网络和数据管理,以及如何使用Docker Compose和Docker Swarm进行多容器应用部署。

此外,我们还探讨了Docker安全配置、性能优化、故障排除以及最佳实践。这些知识将帮助你在Oracle Linux环境中充分利用Docker容器技术的优势,构建高效、安全、可靠的应用程序。

随着容器技术的不断发展,Docker在Oracle Linux上的应用将变得更加广泛和深入。希望本文能为你提供有价值的参考,帮助你在Oracle Linux上更好地使用Docker容器技术。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则