首页 > 其他分享 >docker-compose一步帮你搞定n个容器

docker-compose一步帮你搞定n个容器

时间:2023-12-12 10:55:05浏览次数:27  
标签:容器 搞定 compose 服务 demo mysql docker

‍# 一、docker-compose简介

docker-compose是docker提供的一个命令行工具,用来定义和运行由多个容器组成的应用。

为什么需要docker-compose?

一般我们一个完整的应用部署包括几个服务:Web应用、MySQL服务、Redis服务,有的可能用到Kafka服务、Prometheus服务等等。

那么如何管理这么多服务呢?我们就需要docker-compose来帮我们实现批量管理容器服务。

接下来我们来看看docker-compose是如何批量管理容器服务的?这就说道docker-compose.yml了。

docker-compose.yml可以同时管理多个container,包括他们之间的关系、使用已存在的image还是自己build新的镜像 、各种网络端口定义、储存空间定义等。

然后我们可以用docker compose up -d完成应用所有容器的创建和启动。

ok,重点来了,我们来看看如何使用docker compose吧。

使用dockercompose 基本上分为三步:

1.使用Dockerfile定义镜像;

2.使用docker-compose.yml定义组成的应用程序的服务;

3.运行docker compose up启动并运行程序;

二、docker-compose.yml详解

一份标准配置文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分。

1.version:docker-compose 文件版本,可在https://docs.docker.com/compose/compose-file/compose-versioning/ 查看docker-compose文件版本支持特定的 Docker 版本。

2.services:服务名称,自定义。

3.networks:定义网络。实现了网络隔离。

三、docker-compose.yml的demo

以下定义了docker-compose-demo和 docker-compose-mysql-demo两个容器,相关指令解释可查看后面的注释。

version : '3'                                      #compose文件版本支持特定的Docker版本
services:                                          #本工程的服务配置列表
 
  docker-compose-demo:                             #服务名,自定义
    container_name: docker-compose-container-demo  #容器名

    build:                                         #基于Dockerfile文件构建镜像时使用的属性
      context: .                                   #代表当前目录,也可以指定绝对路径[/path/test/Dockerfile]或相对路径[../test/Dockerfile],尽量放在当前目录,便于管理
      dockerfile: Dockerfile-demo                  #指定Dockerfile文件名
    ports:                                         
      - "5555:6666"                                #指定宿主机端口映射到本容器的端口
    volumes:                                        
      - .:/tmp                        
             #目录挂载
    depends_on:                                    #本服务启动,依赖于mysql,也就是mysql优先于docker-compose-demo启动
      - mysql

    restart: always                                #是否随docker服务启动重启
    networks:                                      #加入指定网络
      - my-network                                 #自定义的网络名
    environment:                                   #设置容器的环境变量
      - TZ=Asia/Shanghai                           #这里设置容器的时区为亚洲上海,也就解决了容器通过compose编排启动的时区问题
 
  mysql:                                           #服务名,自定义
    container_name: docker-compose-mysql-demo      #容器名
    image: mysql:5.7                               #指定基于mysql:5.7镜像为基础镜像来构建镜像。ports:
      - "33061:3306"
    command: [                                           #使用command可以覆盖容器启动后默认执行的命令
            '--character-set-server=utf8mb4',            #设置数据库表的数据集
            '--collation-server=utf8mb4_unicode_ci',     #设置数据库表的数据集
            '--default-time-zone=+8:00'                  #设置mysql数据库的时区问题
    ]
    environment:           
      MYSQL_DATABASE: swapping                            #设置初始的数据库名
      MYSQL_ROOT_PASSWORD: 398023                         #设置root连接密码
      MYSQL_ROOT_HOST: '%'
    restart: always
    networks:
      - my-network
networks:                        
  my-network:                                             #自定义的网络

四、docker-compose常用命令

#启动
docker-compose -f /data/docker-compose/docker-compose.yml up -d  

#ps:列出所有运行容器
docker-compose ps

#logs:查看服务日志输出
docker-compose logs

#build:构建或者重新构建服务
docker-compose build

#start:启动指定服务已存在的容器
docker-compose start docker-compose-demo

#stop:停止已运行的服务的容器
docker-compose stop docker-compose-demo

#rm:删除指定服务的容器
docker-compose rm docker-compose-demo

#up:构建、启动容器
docker-compose up

#-d:后台运行
docker-compose up -d

#stop:停止容器
docker-compose stop

标签:容器,搞定,compose,服务,demo,mysql,docker
From: https://www.cnblogs.com/safe-rabbit/p/17867537.html

相关文章

  • CentOS安装Docker
    官方文档:https://docs.docker.com/engine/install/centos/确定是CentOS7及以上版本卸载旧版本yumremovedocker\ docker-client\ docker-client-latest\ docker-common\ docker-latest\ docker-latest-logrotate\ docker-logrotate\ docker-engineyum安......
  • Linux Redhat 7 下 Docker 离线安装部署
    LinuxRedhat7 下Docker离线安装部署 Docker安装前要Docker官网:服务器版:https://docs.docker.com/engine/install/#serverDocker离线二进制tgz压缩包下载地址:https://download.docker.com/linux/static/stable/x86_64/例如:docker-23.0.6.tgzDocker离线rpm包下载地......
  • docker部署PostgreSQL数据库(带有postgis插件)
    1、拉PostgreSQL(带有postgis插件)镜像dockerpullmdillon/postgis2、启动数据库容器dockerrun--namepostgis-ePOSTGRES_PASSWORD=postgis-p5432:5432-dmdillon/postgis:latest参数解释:--namepostgis为容器指定一个名称;-p5432:5432:指定端口映射,格式为:......
  • docker问题 dubbo-admin浏览器错误
    问题描述:zookeeper容器配置成功,dubbo-admin容器配置成功。使用dockerps显示两个容器都启动成功且映射端口没有出错。在虚拟机中ping本机和在本机中ping虚拟机都显示正常接通。使用浏览器访问dubbo-admin时浏览器无法显示。解决方案:修改docker配置文件vim/etc/docker/da......
  • docker安装mysql
    1.下载mysql镜像#dockerpullmysql:8.0 2.检查下载的镜像#sudodockerimages 3.创建实例dockerrun-p3307:3306--namemysql\-v/mydata/mysql/log:/var/log/mysql\-v/mydata/mysql/data:/var/lib/mysql\-v/mydata/mysql/conf:/etc/mysql\-eMYSQL_ROO......
  • ubuntu 下 docker 中部署 jenkins,并配置安卓 python 开发环境
    1、ubuntu中下载AndroidSdk#安装unzip工具sudoaptupdatesudoaptinstallunzip#下载AndroidSDKwgethttps://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip#解压unzipcommandlinetools-linux-7302050_latest.zip-dandroid......
  • docker部署Prometheus、grafana、node_exporter、cadvisor
    安装Prometheusdockerrun-d--name=prometheus-p9090:9090-v/tmp/prometheus.yml:/etc/prometheus/prometheus.ymlprom/prometheus安装node_exporterdockerrun-d--net="host"--pid="host"--userns="host"-v"/:/host:ro,rslav......
  • Docker的安装
    初识Docker​ 这里推荐一个Docker中午文档何为Docker​ Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及OverlayFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔......
  • 上传到服务的jar包怎么使用docker运行部署
    将已经打好包的springboot的jar包手动上传到服务器,然后运维怎么构建容器并发布呢要使用Docker部署一个已经上传的JavaJAR包,你需要创建一个Dockerfile,并在里面编写必要的指令来设置运行环境和启动你的应用。以下是一个基本步骤的概述,以及一个示例Dockerfile。基本步骤:创建Do......
  • Docker下的资源限制问题
    Docker下的资源限制问题问题背景公司某产品出现了一个奇怪的OOM错误提示.问题现象是前台产品提示OOMcannotcreatenativethread但是同时查看机器的资源和容器cadviser的资源,资源限制都很少.内存远远没有到达瓶颈,并且看gclog也没有看到很多GC信息所以怀疑......