docker-compose的介绍与使用

一、docker-compose 常用命令和指令

1. 概要

默认的模板文件是 docker-compose.yml,其中定义的每个服务可以通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。

注意如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。如果设置了会被YML覆盖

2. 常用的docker-compose命令
命令描述
docker-compose up -d构建建启动容器
docker-compose exec bash登录到容器中
docker-compose down删除所有容器,镜像
docker-compose ps显示所有容器
docker-compose restart重新启动容器
docker-compose run --no-deps --rm php-fpm php -v在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
docker-compose build构建镜像
docker-compose build --no-cache不带缓存的构建
docker-compose logs查看的日志
docker-compose logs -f验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
docker-compose pause暂停容器
docker-compose unpause恢复容器
docker-compose rm删除容器(删除前必须关闭容器)
docker-compose stop停止容器
docker-compose start启动容器
2.1、image

说明

指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉去这个镜像。

栗子

image: ubuntu

image: mysql:5.7.22

2.2、build

说明

指定 Dockerfile 所在文件夹的路径。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

栗子

build: ./

build: ./web/

2.3、command

说明

覆盖容器启动后默认执行的命令。

栗子

command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1

2.4、links

说明

链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS) 格式都可以。

栗子

links:
 - mysql
 - db:database
 - redis

使用的别名将会自动在服务容器中的 /etc/hosts 里创建。例如:

172.17.2.111  db
172.17.2.112  database
172.17.2.113  redis 

2.5、external_links

说明

链接到 docker-compose.yml 外部的容器,甚至 并非 Compose 管理的容器。参数格式跟 links 类似。

栗子

 external_links:
 - redis
 - web_db_mysql:mysql
 - web_db_oracle:oracle
 - web_db_oracle:postgre

2.6、ports

说明

暴露端口信息。使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

栗子

ports:
 - "6379"
 - "8000:8000"
 - "46200:22"
 - "127.0.0.1:8080:8080"

注:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。  

2.7、expose

说明

暴露端口,但不映射到宿主机,只被连接的服务访问。可以指定内部端口为参数

栗子

expose:
 - "3307"
 - "6380"

2.8、volumes

说明

卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro 或者rw)。

栗子 

volumes:
 - ./mysql/data:/var/lib/mysql 
 - ./configs:/etc/configs/:ro 

2.9、volumes_from

说明

从另一个服务或容器挂载它的所有卷。

栗子

volumes_from:
 - service_name
 - container_name

2.10、environment

说明

设置环境变量。只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。

栗子

 environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai

2.11、networks

说明

用于设置指定网络,子标签aliases用于设置服务别名,相同的别名可以在不同的网络中拥有不同的识别别名。

可以在service中使用,也可以在顶级标签中使用

栗子

services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
         - alias3
      other-network:
        aliases:
         - alias2
# 定义网络         
networks:
   default:
    external:
      name: app

二、Docker Compose-网络设置

一、概述

随着微服务的事件,应用的越来越多, 经常会碰到需要多个容器共同协作, 这样就需要多个容器之间能够互相访问。Docker提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务。随着 docker 的快速发展,其网络架构也在不断的演进。

二、容器网络模型(了解)

Docker在 1.9 版本中引入了一整套的 docker network 子命令和跨主机网络支持。允许用户可以根据他们应用的拓扑架构创建虚拟网络并将容器接入其所对应的网络。网络部分代码就已经被抽离并单独成为了 docker 的网络库(libnetwork)。在此之后,容器的网络模式也被抽象变成了统一接口的驱动。 为了标准化网络驱动的开发步骤和支持多种网络驱动,docker 公司在 libnetwork 中使用了 CNM(Container Network Model)。CNM 定义了构建容器虚拟化网络的模型,同时还提供了可以用于开发多种网络驱动的标准化接口和组件

CNM的理念是提供可以跨不同网络基础架构可实现移植的应用。这个模型平衡了应用的可移植性同时不会损失基础架构原有的各种特性和功能。

CNM主要有三部分组成
  • 沙箱(SandBox)--一个沙箱包含了容器的网络配置。这里包括了容器接口的管理,路由表,和DNS设定。一个沙箱可以包含多个来自不同网络的端点,可以同时连接多个网络。

  • 端点(Endpoint)--沙箱通过端点来连接网络。端点结构的存在使到应用与网络的连接实现虚拟化。这样有助于维护应用的可移值性,因此一个服务可以在无须知道如何去连接网络的情况下使用不同类型的网络驱动。

  • 网络(Network)--CNM并不是OSI模型中说的网络层。而是由Linux桥接,VLan等来实现。网络收集了所有连接在其上的端点,并实现了这些端点的互连。端点如果不连接到其中一个网络,那么将无法与外界连接。

CNM驱动接口

容器连网模型提供了两个可拔插且开放的接口供用户使用,这些接口是用于通讯,利用供应商提供的附加功能,网络可见性,或网络控制等方面。目前存在以下网络驱动:

  • 网络驱动(Network Drivers)--Docker网络驱动提供了使网络可以工作的具体实现。他们是可拔插的,所以很易于支持不同的用户使用场景。多个网络驱动可同时用于指定的Docker引擎和群集。有以下两个广泛使用的CNM网络驱动:

    • 内置网络驱动(Native Network Drivers)--内置网络驱动是内置于Docker引擎,并随Docker提供的驱动。有多个驱动可供选择,以支持不同的功能,如overlay网络和local bridge网络。

    • 远程网络驱动(Remote Network Drivers)--远程网络驱动是由社区或其它供应商建立的网络驱动。这些驱动可用于与现有的软件或硬件环境进行集成。用户也可以建立自己的网络驱动以达成各种特殊需求。

  • IPAM(IP地址管理)驱动--Docker有一个内置的IP地址管理驱动,在没有特别指定IP的情况下,它会为网络和端点提供了默认的子网或IP地址。IP地址通过网络(docker network create),容器(docker container create)和服务(docker service create)创建指令来人工分配。远程IPAM驱动也存在和提供了集成到现有IPAM的工具。

Docker内置网络驱动

Docker内置网络驱动是Docker引擎的一部份不需要任何额外模块。他们可以被docker network命令所调用。以下是现存的内置网络驱动:

驱动描述
Host没有命名空间隔离,主机上的所有接口都可以直接被容器使用。
Bridge受Docker管理的Linux桥接网络。默认在同一个bridge网络的容器都可以相互通迅。 容器的外部访问也可以使用bridge驱动来设置。
Overlay提供多主机的容器网络互连。同时使用了本地Linux桥接网络和VXLAN技术实现容器之间跨物理网络架构的连接。
MACVLAN使用MACVLAN桥接模式建立容器接口和主机接口之间的连接。实现为容器提供在物理网络中可路由的IP地址。 此外VLAN可以被中继至macvlan驱动以强制实现容器的2层分段。
None容器具有属于自己的网络栈和网络命名空间,但并在容器内添加网络接口。如没有其它的设置,则容器将完全独立于其它网络。

参考文章

https://success.docker.com/article/networking

Docker网络体系结构:设计可扩展、可移植的Docker容器网络-CSDN博客

三、Docker Compose-网络设置二

一、概述

默认情况下,Compose 会为我们的应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为 Hostname 被其他容器访问

默认情况下,应用程序的网络名称基于 Compose 的工程名称,而项目名称基于 docker-compose.yml 所在目录的名称。如需修改工程名称,可使用 --project-name 标识或 COMPOSE_PORJECT_NAME 环境变量。

假如一个应用程序在名为 myapp 的目录中,并且 docker-compose.yml 如下所示:

version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: mysql 

当我们运行 docker-compose up 时,将会执行以下几步:

  • 创建一个名为 myapp_default 的网络

  • 使用 web 服务的配置创建容器,它以 web 这个名称加入网络 myapp_default

  • 使用 db 服务的配置创建容器,它以 db 这个名称加入网络 myapp_default

容器间可使用服务名称(web 或 db)作为 Hostname 相互访问。例如,web 这个服务可使用 postgres://db:5432 访问 db 容器。

当服务的配置发生更改时,可使用 docker-compose up 命令更新配置。此时,Compose 会删除旧容器并创建新容器。新容器会以不同的 IP 地址加入网络,名称保持不变。任何指向旧容器的连接都会被关闭,容器会重新找到新容器并连接上去。

二、使用 links

默认情况下,服务之间可使用服务名称相互访问。links 允许我们定义一个别名,从而使用该别名访问其他服务。

version: '2'
services:
  web:
    build: .
    links:
      - "db:database"
  db:
    image: postgres 

三、自定义网络

一些场景下,默认的网络配置满足不了我们的需求,此时我们可使用 networks 命令自定义网络。networks 命令允许我们创建更加复杂的网络拓扑并指定自定义网络驱动和选项。不仅如此,我们还可使用 networks 将服务连接到不是由 Compose 管理的、外部创建的网络。

version: '3'
services:
  proxy:
    build: nginx
    networks:
      - front
  app:
    build: ./app
    networks:
      - front
      - back
  db:
    image: postgres
    networks:
      - back

networks:
  front:
    # Use a custom driver
    driver: custom-driver-1
  back:
    # Use a custom driver which takes special options
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"

其中,proxy 服务与 db 服务隔离,两者分别使用自己的网络;app 服务可与两者通信。使用 networks 命令,即可方便实现服务间的网络隔离与连接。  

四、配置默认网络
version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

networks:
  default:
    driver: custom-driver-1

 这样,就可为该应用指定自定义的网络驱动。

五、已存在的网络

我们可以预先创建一个名为 myapp 的网络,让 Compose 加入这个新创建的网络,使所有 Compose 可以通信,此时使用 external 选项。

# 创建网络
docker network create <Network Name>
# 查看已存在的网络
docker network list

networks:
  default:
    external:
      name: web 

四、Docker 可视化

一、Docker常见的几款web工具:
  • portainer(常用)

  • docker UI

  • shipyard

二、什么是Portainer?

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求

三、安装
下载镜像

docker pull portainer/portainer-ce 

运行Portainer(单机版)

docker  run -d \
 -p 9000:9000 \
 -v /var/run/docker.sock:/var/run/docker.sock \
 portainer/portainer-ce 

访问 http://localhost:9000/

 

设置管理员密码

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/237662.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2020年第九届数学建模国际赛小美赛C题亚马逊野火解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 C题 亚马逊野火 原题再现&#xff1a; 野火是指发生在乡村或荒野地区的可燃植被中的任何不受控制的火灾。这样的环境过程对人类生活有着重大的影响。因此&#xff0c;对这一现象进行建模&#xff0c;特别是对其空间发生和扩展进行建模&…

docker mysql8 设置不区分大小写

docker安装Mysql8.0的坑之lower_case_table_names_docker mysql lower_case_table_names-CSDN博客https://blog.csdn.net/p793049488/article/details/108365929 docker run ‐di ‐‐nametensquare_mysql ‐p 33306:3306 ‐e MYSQL_ROOT_PASSWORD123456 mysql

区块链实验室(32) - 下载arm64的Prysm

Prysm是Ethereum的共识层。 1. 下载prysm.sh curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod x prysm.sh2. 下载x86版prysm共识客户端 ./prysm.sh beacon-chain --download-only3.下载arm64版prysm共识客…

Wincc归档多重项目时,提示无法归档打开的项目-解决办法

Wincc归档多重项目时,提示无法归档打开的项目-解决办法 如下图所示&#xff0c;在进行归档时提示如下报错信息&#xff1a; 重启电脑没用&#xff0c;还是提示相同的信息&#xff1a; 归档 多重项目 (256:67): 无法访问文件 ‘D:\Siemens Pro\QWDCS_MP\QWDCS_MP\QWDCS_Pr\wi…

六级高频词组2

目录 词组 参考链接 词组 51. arise from&#xff08;be caused by&#xff09; 由…引起。 52. arrange for sb.sth. to do sth. 安排…做… 53. arrive on 到达&#xff1b; arrive at 到达某地&#xff08;小地方&#xff09;&#xff1b;得出&#xff0c;作出&#x…

普冉(PUYA)单片机开发笔记(9): FLASH 读写

概述 单片机的 ROM 容量虽然不大&#xff0c;PY32F003 有 64K 字节的 ROM&#xff0c;但实际应用中会在 MCU 中存储持久化的数据&#xff0c;例如&#xff1a;在物联网应用中&#xff0c;需要把物模型持久化&#xff0c;作为非易失性数据&#xff0c;掉电了也要保存。这就要用…

图文教程:stable-diffusion的基本使用教程 txt2img(多图)

之前我介绍了SD的安装过程&#xff0c;那么这篇将介绍怎么使用SD 使用模型 SD安装好之后&#xff0c;我们只有一个默认的模型。这个模型很难满足我们的绘图需求&#xff0c;那么有2种方法。 1是自己训练一个模型&#xff08;有门槛&#xff09;2是去网站上找一个别人练好的模…

宇视科技视频监控 main-cgi 文件信息泄露漏洞复现

0x01 产品简介 宇视(Uniview)高清网络摄像机是一种高性能的网络摄像机,它可以通过网络进行视频传输和监控。该摄像机采用先进的视频技术,具有高清晰度、低照度、宽动态等特点,能够提供高质量的视频图像。 0x02 漏洞概述 宇视(Uniview)高清网络摄像机存在信息泄露漏洞…

【桌面应用开发】Tauri是什么?基于Rust的桌面应用

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

Edge浏览器版本更新后Copilot按钮消失的解决应对方式

需求背景 今天突然发现Edge浏览器右上角的Copilot按钮不见了&#xff0c;排查了一下&#xff0c;发现可能是浏览器自动升级到120版本后&#xff0c;关闭了右上角的Copilot按钮。案发现场如下&#xff1a; 原因如下&#xff1a; 说实话&#xff0c;人家这个插件还是很好用的&…

OpenCV-opencv下载安装和基本操作

文章目录 一、实验目的二、实验内容三、实验过程OpenCV-python的安装与配置python下载和环境配置PIP镜像安装Numpy安装openCV-python检验opencv安装是否成功 openCV-python的基本操作图像输入和展示以及写出openCV界面编程单窗口显示多图片鼠标事件键盘事件滑动条事件 四、实验…

持续集成交付CICD:GitLabCI上传Nexus制品

目录 一、实验 1.GitLabCI上传Nexus制品 2.优化GitLabCI&#xff08;引用系统变量&#xff09; 3.添加if条件判断项目类型 4.优化GitLabCI&#xff08;模板类&#xff09; 二、问题 1.GitLabCI获取jar文件失败 2. GitLabCI获取流水线项目命名空间失败 3.GItLab Packag…

【产品经理】产品的实现,需要做好战略规划

产品的实现需要做好产品规划&#xff0c;而产品的规划决定了产品的方向。本文从战略规划的重要性、产品定位、设计产品架构图三个方向&#xff0c;详细地为大家梳理了产品实现的前期准备。 我们知晓了如何去发掘问题&#xff0c;并找到解决方案。 可对于问题的处理&#xff0c…

【Jeecg Boot 3 - 第二天】1.1、后端 docker-compose 部署 JEECGBOOT3

一、场景 二、实战 ▶ 2.1 修改配置文件 &#xff1e; 目的一&#xff1a;将 dev 变更为生产环境 prod &#xff1e; 目的二&#xff1a;方便spring项目调用docker同个network下的redis和mysql ▶ 2.2 编写dockerfile ▶ 2.3 编写docker-compose.yaml ▶ 2.4 打…

裸机单片机适用的软件架构

单片机通常分为三种工作模式&#xff0c;分别是 1、前后台顺序执行法 2、操作系统 3、时间片轮询法 1、前后台顺序执行法 利用单片机的中断进行前后台切换&#xff0c;然后进行任务顺序执行&#xff0c;但其实在…

[排序篇] 冒泡排序

目录 一、概念 二、冒泡排序 2.1 冒泡降序(从大到小排序) 2.2 冒泡升序(从小到大排序) 三、冒泡排序应用 总结 一、概念 冒泡排序核心思想&#xff1a;每次比较两个相邻的元素&#xff0c;如果它们不符合排序规则&#xff08;升序或降序&#xff09;则把它们交换过来。…

Web自动化测试工具起到哪些重要作用

随着互联网的迅猛发展&#xff0c;Web应用程序已经成为企业不可或缺的一部分。为了确保Web应用的质量和可靠性&#xff0c;Web自动化测试工具变得至关重要。以下是Web自动化测试工具在软件开发生命周期中发挥的作用&#xff1a; 1. 提高测试效率和速度 Web自动化测试工具可以快…

【媒体开发】利用FFMPEG进行推拉流

1. 下载并启动媒体服务 MediaMTX&#xff0c;也即之前的rtsp-simple-server&#xff0c;是一个即用型、零依赖的实时媒体服务器和媒体代理&#xff0c;允许发布、读取、代理和记录视频和音频流。 从Releases bluenviron/mediamtx GitHub找到最新版&#xff0c;下载对应平台…

Web UI 自动化 元素定位利器

序 元素定位&#xff0c;对于 Web UI 自动化而言&#xff0c;绝对是大家成长道路上的一道绊脚石。 很多初学者&#xff0c;都“死”在了元素定位上&#xff0c;从而失去了学习的兴趣。导致职业规划不得不半途而废~ 那么&#xff0c;今天&#xff0c;我们就使用 Katalon Stu…

python实战演练之迎接冬至的第一场雪

写在前面 WINTER IS COMING Python实现大雪纷飞的效果&#xff0c;完整代码在文末哦~ 准备开始 WINTER IS COMING Python是一种高级编程语言&#xff0c;Turtle是Python的一个图形化模块&#xff0c;它可以帮助学习者更好地理解编程概念&#xff0c;同时可以进行图形化编程。 …