百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Docker基础(docker-compose 基础)

mhr18 2024-11-12 11:14 11 浏览 0 评论

7、docker-compose 基础

7.1 docker-compose 安装(CentOS7)

# 访问 https://docs.docker.com/compose/install/
# 下载命令
 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
# 对二进制文件应用可执行权限
 sudo chmod +x /usr/local/bin/docker-compose 
# 注意:如果docker-compose安装后命令失败,请检查您的路径。您还可以/usr/bin在路径中创建指向或任何其他目录的符号链接。
 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 
# 完成安装,查看版本
 docker-compose --version

7.2 docker-compose 几个术语

服务 (service) 一个应用容器,实际上可以运行多个相同镜像的实例。
项目 (project) 由一组关联的应用容器组成的一个完整业务单元。
可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。


7.3 docker-compose 几个常见指令

# 服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build

# 验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。
docker-compose config

# down此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose up

# 进入指定的容器
docker-compose exec

# 获得一个命令的帮助。
docker-compose help

# 列出 Compose 文件中包含的镜像。
docker-compose images

# 停止服务容器
docker-compose kill -s SIGINT

# 查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 --no-color 来关闭颜色。
docker-compose logs [options] [SERVICE...]

# 暂停一个服务容器。
docker-compose pause [SERVICE...]

# 打印某个容器端口所映射的公共端口。
docker-compose port [options] SERVICE PRIVATE_PORT
选项:
--protocol=proto 指定端口协议,tcp(默认值)或者 udp。
--index=index 如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。

# 列出项目中目前的所有容器。
docker-compose ps

# 拉取镜像依赖
docker-compose pull 服务名称

# 推送服务依赖的镜像到 Docker 镜像仓库。
docker-compose push 服务名称

# 重启项目中的服务。
docker-compose restart 服务名称

# 删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm 服务名称

7.4 docker-compse 的模板文件

# 容器名称 指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。
container_name

# depends_on 解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web
version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres
# 注意:web 服务不会等待 redis db 「完全启动」之后才启动。
# dns 自定义 DNS 服务器。可以是一个值,也可以是一个列表。
dns:
  - 8.8.8.8
  - 114.114.114.114
# env_file 从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过 docker-compose -f FILE 方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。
如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。
env_file:
  - ./common.env
  - ./apps/web.env
# environment 设置环境变量。你可以使用数组或字典两种格式。
只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据。
environment:
  - RACK_ENV=development
  - SESSION_SECRET
# expose 暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数
expose:
 - "3000"
 - "8000"
# image 镜像名称 指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
image: ubuntu
image: orchardup/postgresql
# logging 配置日志选项
logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"
# 目前支持三种日志类型
driver: "json-file"
driver: "syslog"
driver: "none"
# 配置日志相关参数
options:
  max-size: "200k"
  max-file: "10"
# network_mode 设置网络模式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
# networks 配置容器连接的网络
version: "3"
services:
  some-service:
    networks:
     - some-network
     - other-network
networks:
  some-network:
  other-network:
# 暴露端口信息 使用宿主端口:容器端口 (HOST:CONTAINER) 格式,
# 或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"
 
 注意:当使用 HOST:CONTAINER 格式来映射端口时,
 如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,
 因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。
# sysctls 配置系统内核参数
sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0
sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0
# ulimits 指定容器的 ulimits 限制值。
例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。
  ulimits:
    nproc: 65535
    nofile:
      soft: 20000
      hard: 40000
# volumes 数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式 (HOST:CONTAINER:ro)。
version: "3"
services:
  my_src:
    image: mysql:8.0
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  mysql_data:  
# restart 指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always或者 unless-stopped。
restart: always
# privileged 允许容器中运行一些特权命令。
privileged: true

相关推荐

Spring Boot3 连接 Redis 竟有这么多实用方式

各位互联网大厂的后端开发精英们,在日常开发中,想必大家都面临过系统性能优化的挑战。当系统数据量逐渐增大、并发请求不断增多时,如何提升系统的响应速度和稳定性,成为了我们必须攻克的难题。而Redis,这...

隧道 ssh -L 命令总结 和 windows端口转发配置

摘要:隧道ssh-L命令总结和windows端口转发配置关键词:隧道、ssh-L、端口转发、网络映射整体说明最近在项目中,因为内网的安全密级比较高,只能有一台机器连接内网数据库,推送...

火爆BOOS直聘的13个大厂Java社招面经(5年经验)助你狂拿offer

火爆BOOS直聘的13个大厂Java社招面经(5年经验)助你狂拿offer综上所述,面试遇到的所有问题,整理成了一份文档,希望大家能够喜欢!!Java面试题分享(Java中高级核心知识全面解析)一、J...

「第五期」游服务器一二三面 秋招 米哈游

一面下午2点,35分钟golang内存模型golang并发模型golanggc原理过程channel用途,原理redis数据结构,底层实现跳跃表查询插入复杂度进程,线程,协程kill原理除了kil...

RMQ——支持合并和优先级的消息队列

业务背景在一个项目中需要实现一个功能,商品价格发生变化时将商品价格打印在商品主图上面,那么需要在价格发生变动的时候触发合成一张带价格的图片,每一次触发合图时计算价格都是获取当前最新的价格。上游价格变化...

Redis 中的 zset 为什么要用跳跃表,而不是B+ Tree 呢?

Redis中的有序集合使用的是一种叫做跳跃表(SkipList)的数据结构来实现,而不是使用B+Tree。本文将介绍为什么Redis中使用跳跃表来实现有序集合,而不是B+Tree,并且探讨跳跃表...

一文让你彻底搞懂 WebSocket 的原理

作者:木木匠转发链接:https://juejin.im/post/5c693a4f51882561fb1db0ff一、概述上一篇文章《图文深入http三次握手核心问题【思维导图】》我们分析了简单的一...

Redis与Java整合的最佳实践

Redis与Java整合的最佳实践在这个数字化时代,数据处理速度决定了企业的竞争力。Redis作为一款高性能的内存数据库,以其卓越的速度和丰富的数据结构,成为Java开发者的重要伙伴。本文将带你深入了...

Docker与Redis:轻松部署和管理你的Redis实例

在高速发展的云计算时代,应用程序的部署和管理变得越来越复杂。面对各种操作系统、依赖库和环境差异,开发者常常陷入“在我机器上能跑”的泥潭。然而,容器化技术的兴起,尤其是Docker的普及,彻底改变了这一...

Java开发中的缓存策略:让程序飞得更快

Java开发中的缓存策略:让程序飞得更快缓存是什么?首先,让我们来聊聊什么是缓存。简单来说,缓存是一种存储机制,它将数据保存在更快速的存储介质中,以便后续使用时能够更快地访问。比如,当你打开一个网页时...

国庆临近,字节后端开发3+4面,终于拿到秋招第一个offer

字节跳动,先面了data部门,3面技术面之后hr说需要实习转正,拒绝,之后另一个部门捞起,四面技术面,已oc分享面经,希望对大家有所帮助,秋招顺利在文末分享了我为金九银十准备的备战资源库,包含了源码笔...

“快”就一个字!Redis凭什么能让你的APP快到飞起?

咱们今天就来聊一个字——“快”!在这个信息爆炸、耐心越来越稀缺的时代,谁不希望自己手机里的APP点一下“嗖”就打开,刷一下“唰”就更新?谁要是敢让咱用户盯着个小圈圈干等,那简直就是在“劝退”!而说到让...

双十一秒杀,为何总能抢到?Redis功不可没!

一年一度的双十一“剁手节”,那场面,简直比春运抢票还刺激!零点的钟声一敲响,亿万个手指头在屏幕上疯狂戳戳戳,眼睛瞪得像铜铃,就为了抢到那个心心念念的半价商品、限量版宝贝。你有没有发现一个奇怪的现象?明...

后端开发必看!为什么说Redis是天然的幂等性?

你在做后端开发的时候,有没有遇到过这样的困扰:高并发场景下,同一个操作重复执行多次,导致数据混乱、业务逻辑出错?别担心,很多同行都踩过这个坑。某电商平台就曾因订单创建接口在高并发时不具备幂等性,用户多...

开发一个app需要哪些技术和工具

APP开发需要一系列技术和工具的支持,以下是对这些技术的清晰归纳和分点表示:一、前端开发技术HTML用于构建页面结构。CSS用于样式设计和布局。JavaScript用于页面交互和逻辑处理。React...

取消回复欢迎 发表评论: