[afterCode] docker 速成班 6: docker-compose

news/2025/4/22 1:22:01

通过docker 的 network我们可以将多个 container 有机的组合起来构建出自己需要的服务. 但是这里有几个小问题就是

  1. 不利于分享.
  2. 步骤麻烦.(需要自己创建 network;指定container 使用 network;... )

那如何解决上面的两个问题呢?

docker-compose.yml

第5节例子中的服务可以通过创建一个这样的docker-compose.yml文件来解决.

version: '3'
services:nginx:image: nginxports:- 8080:8080volumes:- ./conf.d:/etc/nginx/conf.ddepends_on:- nodeappnodeapp:build: './'container_name: helloenvironment:- NODE_ENV=production

通过下面的命令就能将所有需要的 container 启动起来.

docker-compose up

docker-compose.yml 文件可以理解为为了让项目工作起来组织 docker container 的 yaml 格式的配置文件. 一个 docker-compose.yml 文件就一个项目. 配置文件里面可以定义 services, volumesnetworks 三个主要部分. 我个人的喜好是直接使用映射的方式来配置 container 的持久化的磁盘空间,所以比较少的用
volumes 部分;而一个 docker-compose.yml 启动起来之后,docker 会为这个项目创建一个默认的 networks, 默认情况下这些容器都是连接在这个 network 中. 而且还支持用 container_name 的 dns 解析; 所以最重要的还是 services 的定义, 而 services 的定义就是根据项目需要列举的 container 的定义.

对于 container 的定义大致有两类, 直接可以使用的 docker hub 上 image 的. 如这个例子中的 nginx 容器;简单的通过 image 字段就能指定需要的 image; 再通过 ports,volumes, environment 字段来指定 container 的端口映射,磁盘映射和环境变量配置等等. 能通过 docker run 选项做到的事情 docker-compose.yml 中都能做到. 特别提一点的就是在磁盘映射的时候, 宿主机的路径可以是用相对与docker-compose.yml的相对路径. 例子中 nginx 的定义下面的命令行一样的意义; 其中这个 project_defaultdocker-compose.yml 启动时创建的默认 network.

$docker run --network project_default  \-v $PWD/conf.d:/etc/nginx/conf.d -p 8080:8080 nginx

第二种定义的方式就基于 Dockerfile. 那容器是如何工作的就完全有 Dockerfile 来决定了. build字段是用来指定 Dockerfile所在的路径. 例子中定义的 nodeapp 服务, 还是用了 environment 来指定程序运行的环境变量;用 container_name 指定了容器的名字, 如果不做指定的话, container 的名字使用 项目名_服务名 的格式来命名. 而且我们在 nginx 服务反向代理的时候需要用 container 的名字来访问 node 中的 web 服务, 所以这里就定义了container 的名字.

通过 Dockerfiledocker-compose.yml 就能非常的方便的分享你项目运行和开发环境的配置了.

希望大家喜欢.


https://dhexx.cn/news/show-560843.html

相关文章

嵌入式开发C语言之参数传递

本文转载自C语言中的参数传递机制详解 本文尝试讨论下C中实参与形参的关系&#xff0c;即参数传递的问题。 1 值传递 首先看下列代码&#xff1a; #include <stdio.h> int main(){int n 1;printf("实参n的值&#xff1a;%d,地址&#xff1a;%#x\n", n, &a…

jQuery 1.5 Beta 1发布

jQuery祝5生日快乐&#xff01; jQuery于2006年1月14日发布&#xff0c;标志着其发展的第5年&#xff01; 为了庆祝这一时刻&#xff0c;我们将发布jQuery 1.5的第一个beta版本&#xff01; 我们计划在10天内提供最终版本的候选版本&#xff0c;并在月底之前发布最终版本。 我们…

50年高考作文题,记录时代变迁

前言 今天在办公室里笑着问同事&#xff0c;过几天要高考了&#xff0c;你紧张么&#xff1f;同事淡定的说&#xff0c;你又不高考&#xff0c;紧张啥。是啊&#xff0c;高考已经过去好多年了。但当年的情况还仿佛历历在目&#xff0c;每年高考&#xff0c;多少莘莘学子憧憬着美…

一起了解下Centos中‘vim配置’有多强大?

在linux的系统上安装vim编辑器后&#xff0c;发现vim的页面设置还是不太习惯&#xff0c;没有显示的行号&#xff0c;也没有自动的缩进&#xff0c;页面的背景也不是很好看&#xff0c;但是vim编辑器是可以进行配置的&#xff0c;我们可以打造属于自己的vim风格。下面主要讨论一…

【254天】我爱刷题系列(13)

叨叨两句 戒骄戒躁&#xff01;不要小看任何一个知识点&#xff01;题26&#xff1a;正则表达式的一个标准写法&#xff08;Pattern&#xff09; 题目描述 书写一个类&#xff0c;类名为Itheima; 类中有一个方法&#xff0c;方法名bobThere; 给你一个字符串&#xff0c;如果包含…

Python编程让繁琐的工作自动化(1)-操作图像

在研究生生活中&#xff0c;帮老师干过的简单或复杂的工作不少&#xff0c;这其中&#xff0c;尤其是重复性的文件整理的工作让人烦躁不堪。后来在学习了python之后&#xff0c;发现很多东西都可以让电脑自动帮你去做&#xff0c;比如说几十个文件重命名&#xff0c;几十份材料…

20个jQuery时尚插件

使用这些选定的时尚jQuery插件来风格化您的设计。 它们的样式确实很好&#xff0c;并且功能强大。 1. Google Wave历史记录滑块 这将使您的访问者可以不时地来回查看在评论主题上进行的更改。 资源 观看现场演示 2.提示 具有淡入/淡出效果的漂亮工具提示。 资源 3. BlockUI…

Angular企业级开发(4)-ngResource和REST介绍

一、RESTful介绍 RESTful维基百科 REST&#xff08;表征性状态传输&#xff0c;Representational State Transfer&#xff09;是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。RESTful风格的设计不仅具有更好的可读性&#xff08;Human Readable&#xff0…

Python编程让繁琐的工作自动化(2)-处理Excel电子表格

一个 Excel 电子表格文档称为一个工作簿。一个工作簿保存在扩展名为.xlsx 的文件中。每个工作簿可以包含多个表&#xff08;也称为工作表&#xff09;。用户当前查看的表&#xff08;或关闭 Excel 前最后查看的表&#xff09;&#xff0c;称为活动表。 每个表都有一些列&#x…

Clusetered Index VS NonClustered Index

关于ClusteredIndex 与 NonclusteredIndex的区别。 一般表&#xff0c;如果存在主Key&#xff0c;会自动生成一个主keyindex, 主key默认为ClusteredIndex。表格在存储过程中&#xff0c;会自动按照主Key进行排序。 数据在检索的时候&#xff0c;不需要Order by 主Key。 因为是将…