CentOS 7 下 Docker 和 Docker-Compose 的安装与使用
需求背景
随着微服务架构的流行,如何高效、快速地部署和管理各种服务成为了一个问题。传统的部署方式,如手动安装配置环境、手动部署和更新应用,不仅耗费人力物力,而且容易出错,且不易复制和扩展。
为了解决这个问题,Docker诞生了。Docker是一个开源的应用容器引擎,允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化。容器是完全沙盒机制,相互之间不会有任何接口。
Docker带来的好处包括:
- 环境一致性:解决了”在我机器上可以运行”的问题。无论在开发、测试还是生产环境,Docker都可以确保环境的一致性。
- 便捷的版本控制和分发:Docker的镜像(Image)提供了版本控制的功能,可以方便地回滚到旧版本。而且,Docker的镜像可以通过Docker Hub等平台进行共享和分发,方便了应用的部署和传播。
- 隔离性:每个Docker容器都在自己的环境中运行,不会影响其他的容器。这为应用提供了良好的安全性。
- 轻量性和性能高:Docker容器是在宿主机的内核上直接运行,没有传统虚拟化技术的额外开销,所以运行速度快,资源占用小。
接下来,我们会详细介绍在CentOS 7下如何安装和使用Docker以及Docker-Compose。
CentOS 7 下 Docker 和 Docker-Compose 的安装
首先,我们需要在CentOS 7下安装Docker。你可以通过以下步骤进行安装:
# 卸载旧版本(如果安装过的话)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装一些必要的系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 更新 yum 缓存
sudo yum makecache all
## 安装 Docker-ce
sudo yum -y install docker-ce
安装完 Docker 之后,启动 Docker:
sudo systemctl start docker
在安装完 Docker 之后,你可以通过以下命令来检查 Docker 是否安装成功:
sudo docker run hello-world
如果能看到 “Hello from Docker!” 的消息,说明 Docker 已经成功安装并运行。
接下来我们将安装 Docker Compose。Docker Compose 是 Docker 的一个编排工具,可以用来定义和管理多个 Docker 容器。
首先,下载最新版本的 Docker Compose:
curl -L https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-linux-aarch64 -o /usr/local/bin/docker-compose
然后,设置文件的可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
你可以通过以下命令来检查 Docker Compose 是否安装成功:
docker-compose --version
如果能看到 Docker Compose 的版本信息,说明 Docker Compose 已经成功安装。
Docker 的常用命令和操作
在安装完 Docker 之后,你可能会用到以下一些常用的命令和操作:
- 查看 Docker 进程:docker ps
- 查看所有 Docker 容器(包括停止的):docker ps -a
- 在 Docker 容器中执行命令:docker exec -it
- 运行 Docker 容器:docker run -d -p
: - 停止 Docker 容器:docker stop
- 删除 Docker 容器:docker rm
- 删除 Docker 镜像:docker rmi
docker inspect 命令
这个命令用于返回 Docker 对象的底层信息。这个对象可以是容器、镜像、卷、网络等。docker inspect 返回一个 JSON 对象,包含了 Docker 对象的所有配置和状态信息。例如,如果你想查看一个正在运行的容器的 IP 地址,你可以使用 docker inspect 命令,然后从返回的 JSON 对象中查找相应的字段。
使用示例:
docker inspect container_name_or_id
root@iZj6cgd384kfewiompdstqZ [02时10分38秒] [/var/www/blog] [master]
-> # docker inspect a0974a35724f | grep RestartPolicy -A 2
"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
docker stats –all 命令
这个命令用于实时显示 Docker 容器的资源使用情况,包括 CPU 使用率、内存使用量、网络 I/O、磁盘 I/O 等。–all 或 -a 选项表示显示所有容器的资源使用情况,而不仅仅是正在运行的容器。
使用示例:
docker stats --all
这两个命令是 Docker 命令行工具中非常有用的工具,可以帮助你理解和管理 Docker 容器的状态和资源使用情况。
Docker-compose 的常用命令和操作
在Compose中,你可以用YAML文件定义服务需要的环境,然后通过一个命令就可以从这个配置中创建并启动所有服务。以下是一些常用的Docker Compose命令:
####启动、停止和重启服务
docker-compose up # 启动服务
docker-compose stop # 停止服务
docker-compose restart # 重启服务
列出服务的状态
docker-compose ps
查看输出(类似于docker logs)
docker-compose logs
执行命令
docker-compose exec service_name command # 例如: docker-compose exec db psql -U postgres
删除和重建服务
docker-compose down # 停止和删除容器
docker-compose build # 构建或者重新构建服务
拉取和推送服务
docker-compose pull # 拉取服务的最新镜像
docker-compose push # 推送服务镜像至registry
注意:以上的命令需要在包含docker-compose.yml文件的目录中运行。如果你的docker-compose文件名不是默认的docker-compose.yml,你需要使用-f参数指定文件名,例如 docker-compose -f my-docker-compose.yml up。
端口映射
你可以通过使用-p选项在运行容器时指定端口映射-p
选项允许你将容器内的端口映射到宿主机的端口。其格式为-p <host-port>:<container-port>
。例如,如果你有一个在容器的80端口上运行的web服务器,你希望将其映射到宿主机的8080端口上,你可以使用以下命令:
docker run -p 8080:80 -d my-web-app
在这个例子中,任何发送到宿主机8080端口的请求都会被转发到容器的80端口。
卷映射
-v
选项允许你将宿主机的文件或目录映射到容器内的文件或目录。其格式为-v <host-path>:<container-path>
。例如,如果你希望将宿主机的/home/user/data
目录映射到容器的/app/data
目录,你可以使用以下命令:
docker run -v /home/user/data:/app/data -d my-app
在这个例子中,容器内的/app/data
目录将直接映射到宿主机的/home/user/data
目录,任何对这个目录的修改(无论是在宿主机上还是在容器内)都会立即反映到另一方。
这两种映射方式都是Docker灵活性的重要表现,它们使得容器能够更好地与宿主机进行交互和数据共享。
Docker 和 Docker-Compose 的优势和适用场景
Docker 的主要优点在于它能够提供一致的运行环境,解决了 “在我机器上可以运行” 的问题。它还能够提供隔离的环境,使得应用不会相互影响。此外,Docker 还非常轻量级,运行速度快,资源占用小。
Docker-Compose 的主要优点在于它可以通过一个 YAML 文件来定义多个 Docker 容器,使得管理多个 Docker 容器变得非常方便。而且,Docker-Compose 还可以方便地管理容器之间的关系,如网络、存储等。
总的来说,如果你需要快速地部署和管理应用,那么 Docker 和 Docker-Compose 都是非常好的工具。如果你需要管理多个相互关联的 Docker 容器,那么 Docker-Compose 就显得更为有用了。
补充
在上述内容中,我们已经讲解了Docker和Docker Compose在CentOS 7下的安装过程,以及一些基本的使用命令。然而,Docker的生态系统非常丰富,有很多其他的功能和特性也值得探索和学习。这里,我将补充一些额外的点:
- Dockerfile: Dockerfile是创建Docker镜像的基础,它是一个文本文件,包含了一系列命令来创建和设置一个新的Docker镜像。学习如何编写Dockerfile,可以帮助你创建适应你的应用需求的定制镜像。
- Docker Registry: Docker Registry是存储Docker镜像的地方。最常见的公共registry是Docker Hub,但你也可以设置自己的私有registry。学习如何使用registry,可以帮助你更好地管理你的Docker镜像。
- Docker网络: Docker提供了多种网络配置选项,以满足不同的需求。例如,你可以创建一个网络,让容器可以在此网络中相互通信,或者可以将一个容器连接到多个网络。
- Docker存储: Docker提供了多种存储选项,如volumes,bind mounts和tmpfs mounts,用于持久化容器数据或共享数据。
- Docker安全: 虽然Docker提供了隔离环境,但仍需关注安全性。例如,需要定期更新镜像以获取最新的安全更新,限制容器的权限,避免在容器中运行root用户等。
总之,Docker是一个强大且灵活的工具,无论你是在开发环境中快速部署应用,还是在生产环境中运行和扩展应用,它都能提供巨大的帮助。不过,像任何技术一样,最好的使用方式是根据你自己的具体需求和场景去使用它。