在CentOS 7上部署和管理Docker容器是现代运维和开发人员的核心技能之一,本文将引导您完成从安装到实际应用的全过程,旨在提供一份清晰、实用的实战指南。
环境准备与安装
确保您拥有一台运行CentOS 7的服务器,并且拥有sudo权限,为了获得最佳兼容性和最新功能,我们推荐从Docker官方仓库安装。
第一步是更新系统软件包并安装必要的依赖,这些依赖工具能帮助yum
管理devicemapper
存储驱动,这是Docker在CentOS 7上的默认驱动。
sudo yum update -y 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 -y docker-ce docker-ce-cli containerd.io
安装完成后,启动Docker服务并将其设置为开机自启。
sudo systemctl start docker sudo systemctl enable docker
通过运行经典的hello-world
容器来验证安装是否成功,如果看到欢迎信息,说明Docker引擎已正常运行。
sudo docker run hello-world
Docker核心操作实战
掌握镜像和容器的管理是使用Docker的基础。
镜像管理
镜像是创建容器的基础模板,您可以从Docker Hub(一个公共镜像仓库)拉取所需的镜像。
- 搜索镜像:搜索官方的Nginx镜像。
docker search nginx
- 拉取镜像:下载Nginx最新版镜像到本地。
docker pull nginx:latest
- 查看本地镜像:列出所有已下载的镜像。
docker images
- 删除镜像:如果不再需要某个镜像,可以将其删除。
docker rmi nginx:latest
容器管理
容器是镜像的运行实例。
运行容器:以下命令以后台模式(
-d
)运行一个Nginx容器,将主机的8080端口映射到容器的80端口(-p 8080:80
),并命名为my-web-server
。docker run -d -p 8080:80 --name my-web-server nginx
通过浏览器访问
http://<您的服务器IP>:8080
即可看到Nginx的欢迎页面。查看容器:
- 查看正在运行的容器:
docker ps
- 查看所有容器(包括已停止的):
docker ps -a
- 查看正在运行的容器:
停止与启动容器:
docker stop my-web-server docker start my-web-server
进入容器:对于调试和修改,经常需要进入容器的shell环境。
docker exec -it my-web-server /bin/bash
执行后,您将处于容器内部的bash shell中,可以查看文件、安装软件等,输入
exit
可退出。删除容器:删除已停止的容器。
docker rm my-web-server
数据持久化与网络配置
默认情况下,容器内部创建的所有数据会随着容器的删除而丢失,为了实现数据持久化,我们需要使用数据卷。
最常见的方式是将主机上的一个目录挂载到容器中,我们可以自定义Nginx的网页内容。
在主机上创建一个目录并写入一个自定义的index.html
文件。
mkdir -p ~/nginx-html echo "<h1>Hello from Docker on CentOS 7!</h1>" > ~/nginx-html/index.html
重新运行Nginx容器,使用-v
标志将主机的~/nginx-html
目录挂载到容器的/usr/share/nginx/html
目录(Nginx的默认网站根目录)。
docker run -d -p 8080:80 --name my-custom-web -v ~/nginx-html:/usr/share/nginx/html nginx
再次访问http://<您的服务器IP>:8080
,您将看到自定义的欢迎页面,修改主机上的index.html
文件,刷新网页即可看到变化,数据实现了持久化。
网络配置主要通过端口映射实现,其基本语法如下表所示:
指令格式 | 说明 |
---|---|
-p <host_port>:<container_port> | 将主机的指定端口映射到容器的指定端口 |
-p 8080:80 | 将主机的8080端口映射到容器的80端口 |
使用Dockerfile构建自定义镜像
当需要标准化应用环境时,手动配置容器效率低下,Dockerfile提供了一种通过代码来定义和构建镜像的方式。
创建一个名为Dockerfile
的文件,内容如下:
# 基于官方CentOS 7镜像 FROM centos:7 # 维护者信息 LABEL maintainer="your-email@example.com" # 安装Apache Web服务器 RUN yum -y update && yum -y install httpd # 复制自定义的网页文件到Apache的默认目录 COPY ./index.html /var/www/html/ # 暴露80端口 EXPOSE 80 # 启动Apache服务 CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
确保在同一目录下有一个index.html
文件,使用docker build
命令构建镜像。-t
标志为镜像打上标签(名称)。
docker build -t my-centos-apache .
构建完成后,就可以像使用官方镜像一样运行它了:
docker run -d -p 9090:80 --name my-apache-app my-centos-apache
访问http://<您的服务器IP>:9090
,即可看到基于自定义镜像运行的Apache服务。
相关问答FAQs
Q1: 如何清理Docker环境中所有未使用的镜像、容器和数据卷,释放磁盘空间?
A1: Docker提供了一个非常方便的清理命令,随着时间的推移,系统中会积累许多旧的、不再使用的镜像和容器,这些被称为“悬空”资源,您可以使用以下命令进行一键清理:
docker system prune -a
此命令会删除所有已停止的容器、所有未被任何容器使用的网络、所有悬空的镜像(无标签的镜像)以及构建缓存,加上-a
参数后,它还会进一步删除所有未被任何容器使用的镜像(不仅仅是悬空镜像),在执行前,系统会提示您确认操作。
Q2: 我直接进入正在运行的容器内部,安装了一些软件并修改了配置文件,为什么重启容器后,这些更改都消失了?
A2: 这是Docker的核心设计理念之一:容器是immutable(不可变)和ephemeral(临时)的,当您在容器内部进行修改时,这些更改被写入容器的可写层,容器的生命周期与其主进程相关联,当您使用docker rm
删除容器后,这个可写层以及其中的所有数据都会被永久删除,即使只是重启(docker stop
然后docker start
),如果某些配置没有被持久化,也可能因为启动脚本重置而丢失。
要持久化数据和配置,正确的做法是:
- 使用数据卷:将需要持久化的数据目录(如数据库文件、网站目录、配置文件)通过
-v
参数挂载到主机上,这样,即使容器被删除,数据依然保留在主机中。 - 使用Dockerfile:将软件安装、配置文件复制等操作固化到Dockerfile中,这样,每次基于这个Dockerfile构建镜像或启动容器时,都会得到一个包含所需软件和配置的标准化、可复现的环境,这是推荐的最佳实践。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复