【docker-compose】讲解于安装
前言
因为最近在公司,需要安装一套测试环境,便实操沉淀了此篇文章,后续会出一篇Docker的基础知识以及原理。
Docker的安装,我们可以去查看官方网站的文档https://docs.docker.com/compose/install/other
如下图所示,各类安装教程,以及遇到的问题都有说明。本文主要是讲解实操安装Docker-compose以及相关知识的讲解。
什么是Docker-compose
Docker Compose 是 Docker 官方提供的一种工具,用于定义和运行多个 Docker 容器的应用程序。它基于 Docker 命令行工具,提供了一个简单的 YAML 文件格式,用于定义多个容器之间的关系和配置,然后可以使用单个命令来启动、停止和管理这些容器。
使用 Docker Compose,可以轻松地管理和部署一个复杂的应用程序,例如一个 Web 应用程序,其中包含多个容器,例如 Web 服务器、数据库和缓存等。通过定义一个 Compose 文件,可以指定每个容器的配置、服务之间的依赖关系以及它们应该运行在哪个网络中。然后,可以使用单个命令来启动整个应用程序,并在需要时停止或重新构建容器。
Docker Compose、machine 和 swarm 是docker 原生提供的三大编排工具。简称docker三剑客。
Docker Compose 支持许多常见的容器编排。Docker Compose 作为 Docker 生态系统的一个重要组成部分,具有以下几个优点:
- 简化容器编排:Docker Compose 提供了一个简单的 YAML 文件格式,可以定义多个容器之间的关系和配置,从而简化了容器编排的过程。
- 快速启动和停止容器:通过 Docker Compose,可以使用单个命令来启动和停止整个应用程序,并确保容器之间的依赖关系得到正确的处理。这使得开发人员和运维人员能够更快地构建、测试和部署应用程序。
- 容器隔离:Docker Compose 可以为每个容器指定不同的配置、网络和数据卷等,从而实现容器的隔离和资源管理。
- 可移植性:Docker Compose 可以轻松地将应用程序移植到不同的环境中,例如开发环境、测试环境和生产环境等。在每个环境中,可以使用相同的 Compose 文件来定义容器之间的关系和配置,从而确保应用程序的一致性。
- 开放性:Docker Compose 是一个开源工具,由 Docker 公司维护和支持。它与 Docker Engine 和 Docker Swarm 紧密集成,可以方便地与其他 Docker 工具和第三方工具集成。
总的来说,Docker Compose 提供了一个简单、高效、可靠的方式来管理和部署多个 Docker 容器,使得应用程序开发和部署更加容易和可靠。
安装On Linux
废话不多说直接开始干!
注意前提条件是你已经安装了docker,而且已经启动了。
没有的可以看我的另外一篇文章如何在Linux安装docker客户端的。
如下图所示,注意指令。
打开我们的服务器,执行命令。
解读一下:
curl:是一个利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP、HTTPS、FTP 等协议。CURL 也有用于程序开发使用的版本 libcurl。
-o:把输出写到/usr/local/bin/docker-compose文件夹中
curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
如下图所示,执行此命令就在下载docker-compose-linux-x86_64。
下载完成后,我们执行一下docker-composer --version命令,看看我们的docker-compose是否安装成功了
如下图所示,出现了command not found,找不到此命令。
我们执行一下官方文档提供的命令。
解读一下:
sudo ln -s :此命令功能是为某一个文件或目录在另外一个位置建立一个同步的链接,类似Windows下的超级链接。意思就是把/usr/local/bin/docker-compose 在/usr/bin/docker-compose下建立一个连接,这样就能找到我们的命令了。
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
再次执行一下docker-composer --version命令。
出现如下提示,此提示就是代表没有权限,我们给他加一下权限。
-bash: /usr/bin/docker-compose: Permission denied
执行下面加权限的命令。chmod +x就是给此文件加可执行权限。
sudo chmod +x /usr/bin/docker-compose
再次执行docker-composer --version命令。如如下图所示,可以看到安装成功了。
至此我们在linux安装docker-compose就完成了。
安装On Windows
注意前提条件是你电脑有Windos版的docker,而且已经启动了。
没有的可以看我的另外一篇文章如何去安装Windos版docker客户端的。
如下图所示,第一步打开我们的PowerShell,执行[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
第二不执行Start-BitsTransfer -Source "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-Windows-x86_64.exe" -Destination $Env:ProgramFiles\Docker\docker-compose.exe
类似于Linux安装,意思就是下载一个.exe程序放到指定的目录。
这里就不给大家演示,因为我本地报错拒绝访问,不太想去解决,我看这个指令很简单我就按照下面的操作给安装成功了。给大家演示一下
我们先去下载这个.exe程序访问下面的网站下载下来。
https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-Windows-x86_64.exe
下载不下来的我给大家提供了阿里云盘的地址。
docker-compose-windows-x86_64.exe https://www.aliyundrive.com/s/o1jJpQaVZqL 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
下载完后重命名为docker-compose.exe丢到C:\Program Files\Docker目录下就OK了。如下图所示。
我们打开cmd,执行一下docker-compose --version。注意前提条件是你电脑有Windos版的docker,而且已经启动了。
如下图,安装成功。
Docker Compose配置
Docker Compose 的 YAML 文件是用于定义多个容器之间的关系和配置的文件,它使用键值对的方式来表示各种配置。以下是 Docker Compose YAML 文件的一些常见配置项:
配置项 | 描述 |
---|---|
version | 指定 Docker Compose 的版本号,通常是 3。 |
services | 定义各个服务(即容器)的配置,可以指定每个服务的镜像、容器名称、启动命令、端口映射、环境变量等。 |
networks | 定义各个网络的配置,常见的如 bridge、host、overlay 等 |
volumes | 定义各个数据卷的配置,可以指定数据卷的类型、名称、挂载目录等。 |
build | 指定 Dockerfile 的路径或者一个 URL,用于构建镜像。 |
image | 指定镜像的名称或者 ID,用于拉取或者使用一个已经存在的镜像。 |
ports | 指定容器内部端口和主机端口之间的映射关系。 |
environment | 指定容器的环境变量。 |
depends_on | 指定容器之间的依赖关系,如谁依赖谁,启动顺序等。 |
command | 指定容器启动时要运行的命令。 |
restart | 指定容器在出现故障时应该如何重新启动。常见的配置如,always |
healthcheck | 定义容器的健康检查。 |
deploy | 指定服务在 Docker Swarm 中的部署配置。 |
secrets | 指定容器中使用的加密密钥和证书等。 |
configs | 指定容器中使用的配置文件。 |
如何制作一个docker-compose.yml
你找一个目录,新建一个docker-compose.yml,然后按照上面的配置添加对应的配置项。
如下面的一个docker-compose.yml例子,我添加相关的注释,可以看一下。
version: '3'
services:
mysql:
image: mysql:5.7.35 #镜像名称以及版本
restart: always #重启docker后该容器也重启
container_name: mysql #容器名称
environment:
MYSQL_ROOT_PASSWORD: 123456 #指定用户密码
TZ: Asia/Shanghai
ports:
- 3306:3306 #本地端口号与容器内部端口号
volumes: #指定挂载目录
- /usr/etc/mysql/datadir:/var/lib/mysql
- /usr/etc/mysql/config/my.cnf:/etc/mysql/my.cnf
command:
--max_connections=1000
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--default-authentication-plugin=mysql_native_password
redis:
image: redis:4.0.7 #镜像名称以及版本
restart: always #重启docker后该容器也重启
container_name: redis #容器名称
ports:
- 6379:6379 #本地端口号与容器内部端口号
volumes: #指定挂载目录
- /usr/etc/redis/redis.conf:/usr/local/etc/redis/redis.conf #redis.conf文件和data目录分别映射了主机的redis.conf文件和主机的data目录
- /usr/etc/redis/data:/data
command:
/bin/bash -c "redis-server /usr/local/etc/redis/redis.conf " #使用command可以覆盖容器启动后默认执行的命令。这里启动执行指定的redis.conf文件
nginx:
image: nginx:1.21.3 #镜像名称以及版本
restart: always #重启docker后该容器也重启
container_name: nginx #容器名称
ports:
- 80:80 #本地端口号与容器内部端口号
- 443:443 #本地端口号与容器内部端口号
volumes: #指定挂载目录
- ./usr/etc/nginx/html:/usr/share/nginx/html
- ./usr/etc/nginx/log:/var/log/nginx
- ./usr/etc/nginx/conf:/etc/nginx/
Docker Compose常用命令讲解
以下是 Docker Compose 常用命令,这里就不一一演示了,跟docker命令非常相似。
注意:docker-compose命令只能在该目录下有docker-compose.yml文件的地方使用,不难理解,他依赖于该yml文件,你不告诉他yml文件在哪里他自然而然找不到yml文件。如何去执行对应的操作呢?
命令 | 描述 |
---|---|
docker-compose down | 停止并删除容器、网络、数据卷等资源。 |
docker-compose build | 构建 Docker 镜像。 |
docker-compose start | 启动已经存在的容器。 |
docker-compose stop | 停止正在运行的容器。 |
docker-compose ps | 列出当前项目中所有的容器。 |
docker-compose logs | 查看容器的日志输出。 |
docker-compose exec | 进入正在运行的容器,并执行指定的命令。 |
docker-compose restart | 重启正在运行的容器。 |
docker-compose top | 显示容器中运行的进程。 |
docker-compose rm | 删除已经停止的容器、网络、数据卷等资源。 |
docker-compose pull | 拉取指定的镜像。 |
docker-compose push | 推送本地镜像到 Docker 镜像仓库。 |
docker-compose config | 验证并查看 Docker Compose 文件的语法。 |
docker-compose version | 显示 Docker Compose 的版本号。 |
docker-compose up -d | 在后台启动容器。 |
docker-compose up --build | 强制重新构建镜像并启动容器。 |
后记
本文主要讲解Docker Compose的安装,包括Linux和Windows安装。已经如何去制作一个docker-compose.yml文件,以及yml配置项的解释,还要就是Docker Compose常用命令的讲解。
虽然此文并没有给大家演示如何通过docker-compose.yml部署第一个程序,后面文章会给大家带来演示如何去安装Mysql,Redis,Nginx,Java程序等等。
如对您有用,希望你可以点赞,收藏,评论,您的支持是我最大动力。
我们下期再见。