当前位置:   article > 正文

Linux安装docker-compose【超详细】

linux安装docker-compose

安装docker-compose

一、基于docker安装docker-compose

1、安装docker

1.1、卸载老版本docker

yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-selinux
docker-engine-selinux
docker-engine
docker-ce

1.2、安装lvm2

yum install -y yum-utils device-mapper-persistent-data lvm2

1、yum-utils:此软件包提供一组工具,可增强YUM软件包管理器的功能。它包括诸如yum-config-manager的命令,它可以帮助你管理YUM仓库配置,以及package-cleanup命令,它允许你清理不再需要的软件包。

2、device-mapper-persistent-data:此软件包提供用于管理设备映射器(device mapper)的工具,设备映射器是一个内核框架,用于将物理块设备映射到更高级别的虚拟块设备。它包括对设备映射器快照和精简配置的支持。

3、lvm2:逻辑卷管理器(LVM)是一种系统,允许你以灵活高效的方式管理磁盘存储空间。它使你能够创建、调整大小和管理逻辑卷,这些卷可以跨越多个物理磁盘。

1.3、配置镜像源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  1. yum-config-manager: 这是一个用于管理YUM仓库配置的命令。它允许你添加、删除、启用、禁用和显示YUM仓库,以便在系统上安装软件包。
  2. --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo: 这部分命令会向YUM配置管理器添加一个新的仓库。具体来说,它会从阿里云镜像站添加一个名为docker-ce.repo的仓库文件。这个仓库文件包含了Docker社区版软件包的信息,包括下载地址和软件包清单。

通过运行这个命令,你的系统将知道从阿里云镜像站获取Docker CE软件包的位置,从而可以使用YUM来安装和管理Docker CE。这在安装、更新和维护软件包时非常有用,因为它使得获取软件包更加方便,并且你可以从可信赖的镜像站点下载软件包。

1.4、安装docker

yum install docker-ce
  • 1

1.5、验证

yum list docker-ce --showduplicates | sort -r
  • 1

列出可用的Docker社区版(Docker CE)软件包及其不同版本,并按照版本号降序排序

  1. yum list docker-ce: 这部分命令用于列出系统中可用的所有Docker CE软件包及其各个版本。这会显示出每个版本的软件包名称、版本号、仓库来源等信息。
  2. --showduplicates: 此选项告诉YUM显示所有可用版本的软件包,而不仅仅是最新的版本。这对于了解系统中的不同版本非常有用。
  3. |: 这是管道操作符,将一个命令的输出作为另一个命令的输入。
  4. sort -r: 这部分命令用于对前一个命令的输出进行排序。sort命令按照默认的字典顺序进行排序,-r选项表示按照降序排序(从高到低版本号)。

1.6、启动docker

systemctl start docker
  • 1

1.7、配置docker开机自启

systemctl enable docker
  • 1

1.8、查看docker运行状态

systemctl status docker
  • 1

2、安装(官方版)

Linux CentOS7 系统

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}

mkdir -p $DOCKER_CONFIG/cli-plugins

curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o

$DOCKER_CONFIG/cli-plugins/docker-compose
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o curl命令分析

这个命令使用 curl 工具从指定的URL下载文件并保存到本地。让我们逐步分析这个命令:

curl: 这是一个命令行工具,用于进行网络数据传输。在这里,它被用于从远程服务器下载文件。

-SL: 这是 curl 命令的选项,具有以下含义:

-S: 该选项告诉 curl 在出现错误时不显示进度条,但仍然显示错误信息。
-L: 该选项告诉 curl 自动跟随重定向链接。这对于下载重定向的文件非常有用。
https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64: 这是要下载的文件的URL。它指向了一个名为 docker-compose-linux-x86_64 的文件,版本为 v2.20.3,位于 GitHub 上 Docker Compose 的发布页面上。

-o: 这是 curl 命令的选项,用于指定下载后保存的本地文件名。在这里,它告诉 curl 将下载的文件保存为当前工作目录下的文件,文件名为 docker-compose-linux-x86_64(与远程文件名相同)。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.1、对二进制文件应用可执行权限:

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
  • 1

3、测试安装

docker compose version
#出现Docker Compose version v2.20.3 成功
  • 1
  • 2

附加:

docker-compose卸载

rm $DOCKER_CONFIG/cli-plugins/docker-compose
  • 1

docker-compose实战

1、这个是之前docker创建mysq镜像并启动的命令(只做对比)

docker run 
		-i \
		-t \
		-d \
		-p 3306:3306 \
		-m="1024M" \
		--privileged=true \
		-v /data/software/mysql/conf/:/etc/mysql/conf.d \
		-v /data/software/mysql/data:/var/lib/mysql \
		-v /data/software/mysql/log/:/var/log/mysql/ \
		-e MYSQL_ROOT_PASSWORD=root \
		--name=mysql mysql:5.7.19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • docker run: 这是Docker命令,用于运行一个新的容器。
  • -itd: 这是一些标志的组合,含义如下:
    • -i: 保持标准输入打开,以便能够与容器进行交互。
    • -t: 为容器分配一个伪终端(pseudo-tty)。
    • -d: 让容器在后台运行(以分离模式)。
  • -p 3306:3306: 将主机(宿主机)的端口3306映射到容器的端口3306,这允许你通过主机的3306端口访问在容器内运行的MySQL服务。
  • -m="1024M": 指定容器使用的内存限制为1GB。这会限制容器可以使用的最大内存量。
  • --privileged=true: 赋予容器特权,允许它在主机操作系统上执行一些高级操作。这在某些情况下可能是必要的,但是要注意潜在的安全风险。
  • -v /data/software/mysql/conf/:/etc/mysql/conf.d: 将主机上的/data/software/mysql/conf/目录挂载到容器内的/etc/mysql/conf.d目录。这允许你通过编辑主机上的配置文件来配置MySQL容器。
  • -v /data/software/mysql/data:/var/lib/mysql: 将主机上的/data/software/mysql/data目录挂载到容器内的/var/lib/mysql目录。这是MySQL容器用于存储数据的位置。
  • -v /data/software/mysql/log/:/var/log/mysql/: 将主机上的/data/software/mysql/log/目录挂载到容器内的/var/log/mysql/目录,用于存储MySQL日志。
  • -e MYSQL_ROOT_PASSWORD=winner@001: 设置MySQL的root用户的密码为"root"。这将在容器启动时作为环境变量传递给MySQL容器。
  • --name=mysql: 给容器取了一个名字叫做"mysql",这样你可以使用这个名称来管理容器,而不需要使用容器的ID。
  • mysql:5.7.19: 这是要在容器中运行的MySQL Docker镜像的名称和版本。

2、编写docker-compose-mysql.yml

vim docker-compose-mysql.yml

#这一行指定了 Docker Compose 文件的版本。在这种情况下,使用的是版本 3。
version: "3"
#这一部分定义了一个名为 "mysql" 的服务,使用 MySQL 5.7.19 版本的 Docker 镜像。它将创建一个 MySQL 容器。
services:
  mysql:
    image: mysql:5.7.19
    #表示当容器停止时,它会自动重新启动,确保 MySQL 服务持续可用。
    restart: always
    #为容器指定一个名称,即 "mysql"。
    container_name: mysql
    #将主机的 3306 端口映射到容器的 3306 端口,这使得你可以通过主机的 3306 端口访问 MySQL 服务。
    ports:
      - 3306:3306
    #将主机上的三个目录分别挂载到容器内的相应目录中,实现了配置、数据和日志的持久化存储。这对于避免数据丢失以及配置和日志的可维护性都非常重要。
    volumes:
      - /data/software/mysql/conf/:/etc/mysql/conf.d
      - /data/software/mysql/data:/var/lib/mysql
      - /data/software/mysql/log/:/var/log/mysql
    #设置 MySQL 容器的环境变量。这些变量会在容器启动时传递给 MySQL 服务:
    environment:
    #设置 MySQL 的 root 用户密码为 "root"。 默认用户名为root
      MYSQL_ROOT_PASSWORD: root
    #创建一个名为 "test" 的数据库。
      MYSQL_DATABASE: test
    #创建一个名为 "bing" 的用户。
      MYSQL_USER: bing
    #设置用户 "bing" 的密码为 "123456"。
      MYSQL_PASSWORD: 123456
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

3、使用docker-compose启动

#-d 后台启动
docker compose -f docker-compose-mysql.yml up -d
  • 1
  • 2

启动成功
在这里插入图片描述

放开3306端口

#设置单个端口开放
sudo firewall-cmd --add-port=3306/tcp --permanent
#重新加载防火墙
sudo firewall-cmd --reload
  • 1
  • 2
  • 3
  • 4

连接成功

在这里插入图片描述

关闭mysql

#吐槽一下 网上的都加了-  不懂为啥
docker compose -f docker-compose-mysql.yml down
  • 1
  • 2

成功

在这里插入图片描述

使用docker ps -a 查看到mysql镜像也被移除了

compose命令选项

-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定
-d, 在后台启动运行
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名
–x-networking 使用 Docker 的可拔插网络后端特性
–x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
–verbose 输出更多调试信息
-v, --version 打印版本并退出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes

  • version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号

  • services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 lagou-mysql数据库服 务以及一个名为lagou-eureka的微服。Docker Compose 会将每个服务部署在各自的容器中

  • networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。 这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不 同的网络类型

  • volumes 用于指引 Docker 来创建新的卷

compose常用命令

#启动
docker-compose up -d
 
#关闭
docker-compose down
 
#查看进程
docker-compose ps
 
#查看日志
docker-compose logs
 
#重新构建服务
docker-compose build
 
#开始服务
docker-compose start
 
#停止服务
docker-compose stop
 
#重启服务
docker-compose restart
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

官方提供的一个小demo

https://docs.docker.com/compose/gettingstarted/
编写dockerFile

# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这个文件告诉docker:

  • 从 Python 3.7 映像开始构建映像。
  • 将工作目录设置为/code.
  • 设置命令使用的环境变量flask
  • 安装gcc和其他依赖项
  • 复制requirements.txt并安装 Python 依赖项。
  • 向镜像添加元数据以描述容器正在侦听端口 5000
  • .将项目中的当前目录复制到.镜像中的workdir。
  • 将容器的默认命令设置为flask run
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

此 Compose 文件定义了两个服务:webredis

该服务使用从当前目录中web构建的图像。Dockerfile然后,它将容器和主机绑定到公开的端口8000。此示例服务使用 Flask Web 服务器的默认端口5000

在浏览器中输入 http://localhost:8000/ 以查看应用程序正在运行。

如果显示连接被拒绝,可以看下8000端口有没有被放开。

#查看镜像
docker inspect <tag or id>
  • 1
  • 2

编辑compose.yaml项目目录中的文件以添加 服务的绑定挂载web

services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_DEBUG: "true"
  redis:
    image: "redis:alpine"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

新volumes密钥将主机上的项目目录(当前目录)挂载到/code容器内部,允许您动态修改代码,而无需重建映像。关键environment设置 FLASK_DEBUG环境变量,它告诉flask run在开发模式下运行并在更改时重新加载代码。该模式仅应在开发中使用。

从项目目录中,键入docker compose up使用更新的 Compose 文件构建应用程序,然后运行它。

docker compose up
  • 1

更改问候语app.py并保存。例如,将Hello World! 消息更改为Hello from Docker!:

如果您想在后台运行服务,您可以将标志-d(用于“分离”模式)传递给docker compose up并使用docker compose ps来查看当前正在运行的内容:

docker compose up -d

Starting composetest_redis_1...
Starting composetest_web_1...

docker compose ps

       Name                      Command               State           Ports         
-------------------------------------------------------------------------------------
composetest_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp              
composetest_web_1     flask run                        Up      0.0.0.0:8000->5000/tcp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

docker compose run命令允许您为您的服务运行一次性命令。例如,要查看服务可以使用哪些环境变量 web

docker compose run web env
  • 1

查看docker compose --help其他可用命令。

如果您使用 启动 Compose docker compose up -d,请在完成服务后停止它们:

docker compose stop
  • 1

您可以使用该命令关闭所有内容,完全删除容器down 。传递--volumes以同时删除 Redis 容器使用的数据卷:

docker compose down --volumes
  • 1
systemctl status firewalld #查看防火墙状态
systemctl start firewalld #开启防火墙
systemctl stop firewalld #关闭防火墙
#设置单个端口开放
sudo firewall-cmd --add-port=8080/tcp --permanent
#设置多端口开发 例如8080-8082
firewall-cmd --zone=public --add-port=8080-8082/tcp --permanent
sudo firewall-cmd --reload #重新加载防火墙
firewall-cmd --list-ports  #查看开放端口

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/1009955
推荐阅读
相关标签
  

闽ICP备14008679号