Docker-docker-compose学习笔记(yaml,实战)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Docker-docker-compose学习笔记(yaml,实战)

什么是docker-compose

docker-compose介绍

Compose 是用于定义和运行多容器 Docker 应用程序的容器编排工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

为什么使用docker-compose?

没有使用docker-compose之前,使用单个的容器来搭建应用会存在以下问题:

  • 批量操作:多个容器一个个的docker run很浪费时间
  • 依赖问题:每个容器的服务可能需要在某个容器启动之后,例如,用到数据库的需要在数据库启动之后
    总之,应用一般是由多个部分组成的,例如,网站可能需要前端、后端、数据库等组成,这时候需要多个容器。docker-compose可以实现将多个容器放到同一网络,并且规定容器启动的顺序。

docker-compose的安装

Linux下的安装方式:

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 --version

如果失败:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

注意:之后容器将称之为服务,需要读者进行思维转换,因为docker-compose是以项目的角度来讲各个微服务连接在一起。

docker-compose的yml文件

一个docker-compose文件就是一个定义了services, networks和 volumes的yml文件。YAML还不会的读者可以看参考。

version

指定本 yml 文件依从 compose 哪个版本制定的。例如,

version: "3.0"

services

应用的各个服务,例如

services:
  tomcat:
    image:  tomcat:8.0
    ports:
      - 8080:8080
    networks:
      - mynet
    depends_on:
      - mysqldb
  mysqldb:
    image: mysql:5.7.20
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - /root/mysql/conf:/etc/mysql/conf.d
      - /root/mysql/logs:/logs
      - /root/mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    networks:
      - mynet
  myapp:
    build: ./myapp/Dockerfile
    entrypoint: "python myapp.py"
networks:
    - mynet

image

使用的镜像,类似docker run指定的镜像

build

与image不一起使用,通过,指定为构建镜像上下文路径,例如,

./dir/Dockerfile

类似docker build命令,若不经常修改还是建议打包为镜像

container_name

容器名字,容器名字不可以重复,因为会根据名字对应到容器的ip,类似DNS。

ports

端口映射,类似docker run时的-p选项

environments

代表当前容器启动指定的环境,类似docker run -e MYSQL_ROOT_PASSWORD=root

env_file

指定保存环境变量的文件

depends_on

解决服务先后启动问题,也就是服务之间的依赖。例如,依赖数据库的服务可以depends_on数据库服务,这样就会先启动数据库服务。

command

覆盖容器启动后默认执行的命令,就是覆盖Docker file的CMD

entrypointment

cap_add,cap_drop

添加或删除容器拥有的宿主机的内核功能。

cgroup_parent

为容器指定父 cgroup 组,意味着将继承该组的资源限制。

networks

docker-compose的命令

docker-compose [-f=…] [options] [COMMAND] [ARGS…]

-f

-f, --file FILE

指定使用的 Compose 模板文件,默认为 docker-compose.yml

up

up [options] [SERVICE...]

对整个项目的操作,创建或启动服务,并关联服务相关容器的一系列操作,大部分时候都可以直接通过该命令来启动一个项目。默认启动的容器都在前台,当通过 Ctrl-C 停止命令时,所有容器将会停止。

选项:

  • -d 在后台运行服务容器。

down

停止 up 命令所启动的容器,并移除网络

ps

docker-compose ps [options] [SERVICE...]

列出项目中目前的所有容器。

选项:

  • -q 只打印容器的 ID 信息。

start

docker-compose start [SERVICE...]

启动已经存在的服务容器。

stop

docker-compose stop [options] [SERVICE...]

停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

选项:

  • -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

logs

docker-compose logs [options] [SERVICE...]

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

该命令在调试问题的时候十分有用。

博主认为掌握up 、down、logs就足够了,更多命令查看参考

实战(nginx反向代理与负载均衡)

如果你没有前端容器镜像,可以下载我的阿里云上的,来复现

docker pull registry.cn-hangzhou.aliyuncs.com/lady_killer9/next_demo:v1
docker pull registry.cn-hangzhou.aliyuncs.com/lady_killer9/next_demo:v2

nginx.conf的配置见文章:安全运维-Nginx服务器就该这么玩~

docker-compose.yaml 如下

version: "3.0"
services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80
    networks:
      - mynet
    depends_on:
      - next_demo1
      - next_demo2
    volumes:
      - /root/nginx_volume/conf:/etc/nginx
      - /root/nginx_volume/logs:/var/log/nginx
  next_demo1:
    image: 4fc6f31080a3
    container_name: next_demo1
    ports:
      - "8080:3000"
    networks:
      - mynet
  next_demo2:
    image: bd6502482fda
    container_name: next_demo2
    ports:
      - "8081:3000"
    networks:
      - mynet
networks:
    mynet:

参考

docker官方文档-compose file

docker官方文档-compose命令

docker官方文档-docker-compose安装

GitBook-Docker从入门到实践

菜鸟教程-YAML入门教程

菜鸟教程-docker-compose

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
3月前
|
供应链 测试技术 开发者
用 Docker 轻松部署 ERPNext 15:多场景实战指南
ERPNext 15 是一款功能全面的开源企业资源规划系统,结合 Docker 容器化部署,具备高效、灵活、低成本等优势。适用于小微企业数字化起步、多分支机构协同办公、开发者测试环境搭建、短期项目管理及企业内部培训等多种场景。模块化设计支持按需扩展,满足不同规模企业需求,是实现高效企业管理的理想选择。
用 Docker 轻松部署 ERPNext 15:多场景实战指南
|
4月前
|
安全 Java Docker
Docker 部署 Java 应用实战指南与长尾优化方案
本文详细介绍了Docker容器化部署Java应用的最佳实践。首先阐述了采用多阶段构建和精简JRE的镜像优化技术,可将镜像体积减少60%。其次讲解了资源配置、健康检查、启动优化等容器化关键配置,并演示了Spring Boot微服务的多模块构建与Docker Compose编排方案。最后深入探讨了Kubernetes生产部署、监控日志集成、灰度发布策略以及性能调优和安全加固措施,为Java应用的容器化部署提供了完整的解决方案指南。文章还包含大量可落地的代码示例,涵盖从基础到高级的生产环境实践。
180 3
|
5月前
|
关系型数据库 MySQL 数据库
Docker Compose-实战
Docker Compose-实战
153 5
|
6月前
|
Ubuntu Linux Docker
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
189 27
|
10月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
233 3
实战~如何组织一个多容器项目docker-compose
|
10月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
917 7
|
11月前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
299 0
|
11月前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
120 0