Docker——compose

在实际生产环境中,一个应用往往由许多服务构成,而 docker 的最佳实践是一个容器只运行一个进程,因此运行多个微服务就要运行多个容器。多个容器协同工作需要一个有效的工具来管理他们,定义这些容器如何相互关联。compose 应运而生。

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过一个YAML文件来配置应用程序的服务、网络和卷,然后使用一个命令即可创建并启动所有容器

下载地址: https://github.com/docker/compose/releases

在 Docker Compose 的世界里,主要有三个核心概念:

  • 服务 (Services):定义应用中的各个组件。每个服务对应一个或多个容器(通常是一个容器),你可以指定它使用哪个镜像、暴露哪些端口、需要哪些环境变量等。

  • 网络 (Networks) :定义容器之间如何通信。Compose 会自动为你的应用创建一个默认网络,容器之间可以通过服务名直接互相访问,这解决了手动链接容器的麻烦。

  • 卷 (Volumes):用于持久化存储数据。当容器删除后,卷中的数据不会丢失,这对于数据库等服务至关重要

解决的核心痛点
  • 简化操作 :将原本需要多条 docker run 命令的复杂操作,简化成一条 docker compose up

  • 环境一致性:通过一个配置文件固化所有容器的配置,确保开发、测试、生产环境高度一致,解决"在我电脑上明明是好的"这类问题。

  • 依赖管理 :通过 depends_on 配置项,可以定义服务之间的启动顺序,确保数据库等依赖服务先启动

1、创建docker-compose文件

root@Anolis2 compose# cat docker-compose.yaml

version: '1.0'

services:

httpd:

restart: always

image: nginx

container_name: my-nginx

ports:

  • 8888:80

environment:

TZ: Asia/Shanghai

volumes:

  • /webroot:/var/www/html

2、启动删除

启动

root@Anolis2 compose# docker-compose up -d

WARN0000 /opt/compose/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion

+ up 2/2

✔ Network compose_default Created 0.3s

✔ Container my-nginx Started

删除

root@Anolis2 compose# docker-compose down

WARN0000 /opt/compose/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion

+ down 2/2

✔ Container my-nginx Removed 0.2s

✔ Network compose_default Removed
查看

root@Anolis2 compose# docker-compose ps

-f动态查看日志

root@Anolis2 compose# docker-compose logs -f

关键字:

image

指定为镜像名称或者镜像ID,如果本地不存在则自动拉取

image: httpd

image: a2b2c3d4

ports

暴露的端口(推荐字符串形式)

ports:

  • "3000"

  • "80:80"

  • "127.0.0.1:80:80"

sysctls

配置容器内核参数

sysctls:

net.core.somaxconn: 1024

net.ipv4.tcp_syncookies: 0

sysctls:

  • net.core.somaxconn=1024

  • net.ipv4.tcp_syncookies=0

volumes

数据卷所挂载的路径设置,可以设置为宿主机路径,并可以设置访问模式(HOST:CONTAINER:ro)

volumes: #绝对路径映射

  • /var/www/html

  • /webroot:/var/www/html

  • ~/webroot:/var/www/html:ro

networks

定义网桥

配置容器连接的网络

environment:

MYSQL_ROOT_PASSWORD: 123456

command: 覆盖镜像默认命令

docker run --name redis -d redis redis-server --appendonly yes

ulimits:

指定容器的ulimits限制的值

如: 进程最大数: 65535 soft软限制 应用可以修改 硬限不能超过

depends_on:

解决容器的依赖,启动顺序的问题

healthcheck:

检查命令,检查容器是否健康运行

build:

配合Dockerfile使用

查看网桥

root@Anolis2 compose# docker network ls

NETWORK ID NAME DRIVER SCOPE

4cf9a5498e7e bridge bridge local

048a56fdbe2b compose_default bridge local

14c5ca7b6bf7 docker_gwbridge bridge local

f514dce8f745 host host local

vx087gslj0a0 ingress overlay swarm

76ff95406838 my-bridge-141 bridge local

fece4dc44e5b my-net bridge local

ca515278a1e2 none null local

示例:

复制代码
redis:
  image: redis:5.0.10
  container_name: redis
  ports:
    - "6379:6379"
  volumes:
    - redisdata:/data
  command: "redis-server --appendonly yes"

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

services:
  httpd:
    image: httpd
    container_name: apache
    depends_on:
      - db #服务名
      - redis
  redis:
    image: redis
  db:
    image: mysql

healthcheck:
  test: ['CMD', 'curl', '-f', 'http://localhost']
  interval: 30s
  timeout: 10s

version: '1.0'
services:
  httpd:
    restart: always
    build:                #构建自定义镜像
      context: ../        #dockerfile路径
      dockerfile: Dockerfile #指定dockerfile名字      

    container_name: myweb
    ports:
      - 80:80
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /webroot:/var/www/html
相关推荐
晚风吹长发5 分钟前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ21314 分钟前
Docker Compose 安装与配置指南
运维·docker·容器
麦聪聊数据29 分钟前
企业数据市场建设(四):流程闭环与价值运营,让数据市场真正转起来
运维·数据库
是潮汕的灿灿展吖1 小时前
Centos离线部署nfs操作
linux·运维·centos
FII工业富联科技服务1 小时前
从灯塔工厂到AI Factory新模式:AI正在重构制造业的四大核心能力
大数据·运维·人工智能·重构·ar·制造
小五传输1 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
jun_bai1 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器
BullSmall1 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
AAA@峥1 小时前
CentOS7 搭建 ELK 企业级日志集群:从部署到日志可视化完整实战
运维·elk·centos
ZKNOW甄知科技2 小时前
燕千云深度集成飞书:以AI之力,开启无感IT运维体验
大数据·运维·网络·数据库·人工智能·低代码·集成学习