首页 > 其他分享 >docker-compose的使用

docker-compose的使用

时间:2025-01-16 10:31:56浏览次数:3  
标签:容器 compose 服务 Compose 使用 镜像 docker

docker-compose的使用

一、简介

  • Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
  • 其代码目前在 https://github.com/docker/compose 上开源。
  • Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。
  • 它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
  • Compose 中有两个重要的概念:
    • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
    • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定
  • Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
  • Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

二、安装与卸载

linux
  • 在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。例如,在 Linux 64 位系统上直接下载对应的二进制包。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#如果GitHub访问太慢,直接在release中下载对应的linux发行版【docker-compose-linux-x86_64】
#或者下载太慢使用国内代理服务下载(推荐)
sudo curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#添加执行权限
$ sudo chmod +x /usr/local/bin/docker-compose
#创建软链接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose历史版本

macos、window
  • Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。Docker Desktop for Mac/Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用
卸载
  • 如果是二进制包方式安装的,删除二进制文件即可。
$ sudo rm /usr/local/bin/docker-compose
测试安装成功
$ docker-compose --version
 docker-compose version 1.25.5, build 4667896b

三、docker compose使用

Docker Compose常用命令列表如下:

命令说明
build构建项目中的服务容器
help获得一个命令的帮助
kill通过发送SIGKILL信号来强制停止服务容器
confifig验证和查看compose文件配置
create为服务创建容器。只是单纯的create,还需要使用start启动compose
down停止并删除容器,网络,镜像和数据卷
exec在运行的容器中执行一个命令
logs查看服务容器的输出
pause暂停一个服务容器
port打印某个容器端口所映射的公共端口
ps列出项目中目前的所有容器
pull拉取服务依赖的镜像
push推送服务镜像
restart重启项目中的服务
rm删除所有(停止状态的)服务容器
run在指定服务上执行一个命令
scale设置指定服务运行的容器个数
start启动已经存在的服务容器
stop停止已经处于运行状态的容器,但不删除它
top显示运行的进程
unpause恢复处于暂停状态中的服务
up自动完成包括构建镜像、创建服务、启动服务并关闭关联服务相关容器的一些列操作
version打印版本信息

1.up

docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...] 
  • up命令十分强大,它尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一些列操作。链接的服务都将会被自动启动,除非已经处于运行状态。
  • 多数情况下我们可以直接通过该命令来启动一个项目。
  • 选项包括:
-d 在后台运行服务容器 
–no-color 不使用颜色来区分不同的服务的控制输出 
–no-deps 不启动服务所链接的容器 
–force-recreate 强制重新创建容器,不能与–no-recreate同时使用 
–no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用 
–no-build 不自动构建缺失的服务镜像 
–build 在启动容器前构建服务镜像 
–abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用 
-t, --timeout TIMEOUT 停止容器时候的超时(默认为10秒) 
–remove-orphans 删除服务中没有在compose文件中定义的容器 
–scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数

2.ps

  • 列出项目中目前的所有容器。
  • 选项包括:
-q 只打印容器的ID信息

3. stop

docker-compose stop [options] [SERVICE...]
  • 停止已经处于运行状态的容器,但不删除它。
  • 选项包括:
-t, --timeout TIMEOUT 停止容器时候的超时(默认为10秒)

4. down

docker-compose down [options]
  • 停止和删除容器、网络、卷、镜像,这些内容是通过docker-compose up命令创建的. 默认值删除 容器 网络,可以通过指定 rmi 、volumes参数删除镜像和卷。
  • 选项包括:
–rmi type 删除镜像,类型必须是: ‘all’: 删除compose文件中定义的所以镜像;‘local’: 删除镜像名为空的 镜像
-v, --volumes 删除已经在compose文件中定义的和匿名的附在容器上的数据卷 
–remove-orphans 删除服务中没有在compose中定义的容器

5. restart

docker-compose restart [options] [SERVICE...]
  • 重启项目中的服务。
  • 选项包括:
-t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为10秒)

6. rm

docker-compose rm [options] [SERVICE...] 1
  • 删除所有(停止状态的)服务容器。
  • 选项包括:
–f, --force 强制直接删除,包括非停止状态的容器 
-v 删除容器所挂载的数据卷

7. start

docker-compose start [SERVICE...]
  • 启动已经存在的服务容器。

8. run

docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
  • 在指定服务上执行一个命令。

  • 例如:

docker-compose run ubuntu ping www.baidu.com
  • 将会执行一个ubuntu容器,并执行ping www.baidu.com命令。
  • 默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。该命令类似于启动容器后运行指定的命令,相关卷、链接等都会按照配置自动创建。有两个不同点:
  1. 给定命令将会覆盖原有的自动运行命令
  2. 不会自动创建端口,以避免冲突
  • 如果不希望自动启动关联的容器,可以使用–no-deps选项,例如:
docker-compose run --no-deps web

将不会启动web容器关联的其他容器

选项包括:

-d 在后台运行服务容器 
–name NAME 为容器指定一个名字 
–entrypoint CMD 覆盖默认的容器启动指令 
-e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量
-u, --user="" 指定运行容器的用户名或者uid
–no-deps 不自动启动管理的服务容器 
–rm 运行命令后自动删除容器,d模式下将忽略 
-p, --publish=[] 映射容器端口到本地主机 
–service-ports 配置服务端口并映射到本地主机 
-v, --volume=[] 绑定一个数据卷,默认为空 
-T 不分配伪tty,意味着依赖tty的指令将无法运行 
-w, --workdir="" 为容器指定默认工作目录

9. confifig

docker-compose config [options]
  • 验证并查看compose文件配置。
  • 选项包括:
–resolve-image-digests 将镜像标签标记为摘要 
-q, --quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息 
–services 打印服务名,一行一个 
–volumes 打印数据卷名,一行一个

10. kill

docker-compose kill [options] [SERVICE...]
  • 通过发送SIGKILL信号来强制停止服务容器。 支持通过-s参数来指定发送的信号,例如:通过如下指令发送SIGINT信号:
docker-compose kill -s SIGINT

11. create

docker-compose create [options] [SERVICE...] 1
  • 为服务创建容器.只是单纯的create,还需要使用start启动compose。
–force-recreate 重新创建容器,即使它的配置和镜像没有改变,不兼容–no-recreate参数 
–no-recreate 如果容器已经存在,不需要重新创建. 不兼容–force-recreate参数 
–no-build 不创建镜像,即使缺失 
–build 创建容器前,生成镜像

12. exec

docker-compose exec [options] SERVICE COMMAND [ARGS...]
  • 与 docker exec 命令功能相同,可以通过service name登陆到容器中。
  • 选项包括:
-d 分离模式,后台运行命令. 
–privileged 获取特权. 
–user USER 指定运行的用户. 
-T 禁用分配TTY. By default docker-compose exec分配 a TTY. 
–index=index 当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec --index=1 web /bin/bash ,web服务中包含多个容器

四、Compose模版文件

模板文件是使用Compose的核心,涉及的指令关键字也比较多,大部分指令与 docker run 相关参数的含义都是类似的。默认的模板文件名称为docker-compose.yml,格式为YAML格式。

比如一个Compose模板文件:

version: "2" 
	services: 
		web:
			images: nginx 
			ports: -"8080:80" 
			volumes: - /usr/local/abc:/usr/local/cba 
#volumes: 
#networks:

Docker Compose的模板文件主要分为3个区域,如下:

  • services
    • 服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等。
  • volumes
    • 数据卷,在它下面可以定义的数据卷(名字等等),然后挂载到不同的服务下去使用。
  • networks
    • 应用的网络,在它下面可以定义应用的名字、使用的网络类型等等。
指令功能
build指定服务镜像Dockerfifile所在路径
cap_dd,cap_drop指定容器的内核能力(capacity)分配
command覆盖容器启动后默认执行的命令
cgroup_parent指定父cgroup组,意味着将基础该组的资源限制
container_name指定容器名称。默认将会使用项目名称服务名称序号这样的格式
devices指定设置映射关系
dns自定义DNS服务器。可以是一个值,也可以是一个列表
dns_search配置DNS搜索域。可以是一个值,也可以是一个列表
dockerfifile指定额外编译镜像的Dockerfifile文件,可以通过该指令来指定
env_fifile从文件中获取环境变量,可以为单独的文件路径或列表
environment设置环境变量,可以使用数组或字典两种格式
expose暴露端口
external_links链接到docker-compose.yml外部的容器,甚至可以是非Compose管理的外部容器
extra_hosts指定额外的host名称映射信息
image指定为镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取这个镜像
labels指定服务镜像Dockerfifile所在路径
links链接到其他服务中的容器
log_driver指定日志驱动类型,类似于Docker中的–log-driver参数。目前支持三种日志驱动类型:log_driver:“json-fifile”、log_driver:“syslog”、log_driver:“none”
log_opt日志驱动的相关参数
net设置网络模式。参数类似于docker clinet的–net参数一样
pid跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程ID来相互访问和操作
ports暴露端口信息
security_opt指定容器模板标签(label)机制的默认属性(如用户、角色、类型、级别等)
ulimits指定容器的ulimits限制值
volumes数据卷所挂载路径设置。可以设置宿主机路径(HOST:CONTAINER)或加上访问模式(HOST:CONTAINER:ro)

五、Compose应用

需求:编写compose模版文件,实现同时启动tomcat、mysql和redis容器。

1、 编写模版文件

# 创建文件夹
mkdir -p /usr/local/mycompose 
#进入文件夹 
cd /usr/local/mycompose 
#创建 docker-compose.yml文件;内容如下 
vi docker-compose.yml

docker-compose.yml文件内容如下(文件内容请从 资料\配置文件\docker-compose.yml 复制):

version: '3'
services:
  redis1:
    image: redis
    ports:
      - "6379:6379"
    container_name: "redis1"
    networks: 
      - dev
  mysql1:
    image: centos/mysql-57-centos7
    environment:
      MYSQL_ROOT_PASSWORD: "root"
    ports: 
      - "3306:3306"
    container_name: "mysql1"
    networks: 
      - dev
  web1:
    image: tomcat
    ports: 
      - "9090:8080"
    container_name: "web1"
    networks: 
      - dev
      - pro
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge

上面我们声明了3个服务;分别是:redis1、mysql1、web1;并且对3个服务都指定了对应的docker 镜像和端口。

2、启动

#启动前最好把docker重启,不然原来的tomcat/mysql/redis容器也是启动状态的话,那么端口会冲突而启动失败 
systemctl restart docker 

cd /usr/local/mycompose 

docker-compose up 

# 如果后台启动则使用如下命令 
docker-compose up -d 

# 若要停止 
docker-compose stop

可以查看到命令中,创建了两个自定义的网络(mycompose_dev和mycompose_pro),然后创建容器,并「Attaching to …」,将网络应用到服务上。

好啦~今天的学习就到此结束,喜欢的可以三连谢谢!!

标签:容器,compose,服务,Compose,使用,镜像,docker
From: https://blog.csdn.net/weixin_55883715/article/details/145174904

相关文章

  • 在默认的情况下,使用h1标签呈现出什么效果?
    在前端开发中,<h1>标签用于定义最重要的标题。在一个HTML文档中,<h1>标签通常被用来表示主标题或页面标题,是六个级别标题标签<h1>到<h6>中级别最高的。在默认的情况下,<h1>标签在浏览器中呈现出的效果是:字体大小:<h1>标签的字体大小通常比其他文本大。具体大小取决于浏览......
  • Stable Diffusion WebUI 最新版使用文档整理
    太久没用基本都忘光了,发现记的笔记也没有很好的梳理,虽然网上已经有了不少详细的文档了,但自己梳理一遍记忆比较深刻。本文转载自我的博客:https://blog.abyssdawn.com/archives/515.html已同步公众号环境准备$python--versionPython3.10.10$nvcc--versionnvcc:NVIDIA......
  • MobaXterm V24 破解版下载及安装使用教程
    MobaXterm是一款远程终端控制软件,它不仅可以像PuTTY一样通过SSH连接RaspberryPi等开源硬件,并且还能:直接的便携版;内建多标签和多终端分屏;内建SFTP文件传输;内建Xserver,可远程运行X窗口程序;直接支持VNC/RDP/Xdmcp等远程桌面;默认的UTF-8编码;更加友好的串口连接设置;便携版操作更明......
  • 不依赖第三方库,说下如何使用js读取pdf?
    在不依赖第三方库的情况下,使用原生JavaScript来读取PDF文件内容是一项相对复杂的任务,因为PDF是一种二进制文件格式,其解析需要处理很多底层细节。通常,我们会使用像pdf.js这样的库来简化这个过程。但如果你确实想要尝试不使用任何第三方库,以下是一个大致的步骤指南:获取PDF文件:......
  • 说说你对前端二倍图的理解?移动端使用二倍图比一倍图有什么好处?
    前端二倍图的理解:在前端开发中,二倍图(也称为2x图或@2x图)是指其像素密度是标准像素密度(即一倍图)的两倍。具体来说,二倍图在单位面积下,设备像素与CSS像素个数之比为4。这意味着,如果一个CSS像素在普通屏幕上对应一个设备像素,那么在Retina屏幕(一种高分辨率显示技术)或其他高清屏幕上,这个......
  • Linux C 使用ZBar库解析二维码和条形码
    1.编译zbar库下载zbar库源码,这里需要注意下,如果识别的二维码中有中文的话,会出现乱码,一般二维码里中文为UTF-8编码,zbar会默认给你把UTF-8转换为ISO8859-1。有两种解决办法,一是自己再转换一下编码格式;二是修改下zbar源码,很简单,只需要修改源码目录下的zbar/qrcode/qrdectxt.c......
  • AI 编程工具—Cursor进阶使用 阅读开源项目
    AI编程工具—Cursor进阶使用阅读开源项目首先我们打开一个最近很火的项目browser-use,直接从github上克隆即可索引整个代码库这里我们使用@Codebase这个选项会索引这个代码库,然后我们再选上这个项目的README.md文件开始提问@Codebase@README.md这个项目是用......
  • 在水管安装中,丝口密封是非常重要的环节。常见的密封材料有 麻丝 和 生胶带。它们在水
    在水管安装中,丝口密封是非常重要的环节。常见的密封材料有麻丝和生胶带。它们在水管丝口密封中的使用,具有各自的优缺点,并且随着技术的发展,生胶带逐渐取代了麻丝,成为更常用的密封材料。以下是对这两种材料的优缺点和升级原因的分析:1. 麻丝(旧式密封材料)优点:天然材料:麻丝由天......
  • open***隧道客户端搭建使用(3)
    一.官网https://openvpn.net/community-resources/how-to/ 其他参考网站:https://lebang2020.cn/details/201029arrtqfjh.html二.客户端使用1.linux客户端基本使用客户端安装sudoyuminstallepel-releasesudoyuminstallopenvpn客户端使用sudoope......
  • 使用拓扑键实现拓扑感知的流量路由和CPU拓扑感知调度 Cilium 1.11 发布,带来内核级服务
    https://kubernetes.io/zh-cn/docs/concepts/services-networking/topology-aware-routing/https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/topology-aware-cpu-schedulinghttps://kubernetes.p2hp.com/docs/concepts/services-networking/servi......