docker-compose常见的参数命令详解

目录
  • 1. Docker Compose 产生背景
  • 2. Docker Compose模板文件
    • 1.environment
    • 2.volumes
    • 3.build
    • 4.depends_on
    • 5.env_file
    • 6.networks
    • 7.ports
    • 8.expose
    • 9.restart
  • 3. docker-compose指令
    • 1.up -d(后台启动)
    • 2.down
    • 3.exec
    • 4.ps
    • 5.top
    • 6.logs -f(实时)
  • 总结

1. Docker Compose 产生背景

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的多种数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。

中文文档:https://yeasy.gitbook.io/docker_practice/compose

2. Docker Compose模板文件

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。下面主要列出几个常见&重要的模板指令,其他指令大家可以自行百度。

默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。

1.environment

设置环境变量,主要是用来配置容器中程序所需要配置的一些参数。你可以使用数组或字典两种格式。

services:
  mysql:
    image: mysql:latest
    ports:
      - 3307:3306
	environment:	# 使用字典格式,类似于 docker run -e MYSQL_ROOT_PASSWORD=root
	  MYSQL_ROOT_PASSWORD: root

也可以使用数组格式:

services:
  mysql:
    image: mysql:latest
    ports:
      - 3307:3306
    environment:	# 使用数组格式
      - MYSQL_ROOT_PASSWORD=root

2.volumes

数据卷所挂载路径设置,挂载数据卷的默认权限是读写(rw)。

你可以在主机上挂载绝对路径,或者挂载相对路径,相对路径是相对于当前正在使用的compose配置文件的目录进行扩展。 相对路径应始终以 . 或者 … 开始。

services:
  mysql:
    image: mysql:latest
    ports:
      - 3307:3306
	environment:	# 使用字典格式,类似于 docker run -e MYSQL_ROOT_PASSWORD=root
	  MYSQL_ROOT_PASSWORD: root
    volumes:
   	  # 挂载绝对路径映射,没有这个路径的话会自动创建
      - /root/docker/composetest/tomcat/app_data:/var/lib/mysql

      # 或者使用相对路径映射,也会自动创建
      - ./app_data:/var/lib/mysql

你还可以使用别名的方式挂载容器数据卷(可以跨多个服务并重用挂载卷,当然使挂载绝对路径或相对路径也可以重用挂载卷),但要注意一点,使用别名的方式挂载需要在顶级volumes关键字中声明挂在卷,否则启动会报错。

services:
  mysql:
    image: mysql:latest
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - my_app_data:/var/lib/mysql
  web1:
    volumes:	# 重用my_app_data
      - my_app_data:/var/lib/mysql
  web2:
    volumes:	# 重用my_app_data
      - my_app_data:/var/lib/mysql

volumes:
  my_app_data:

3.build

指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

services:

  webapp:
    build: ./		# 从当前目录下寻找Dockerfile文件

你也可以使用 context 指令指定 Dockerfile 所在文件夹的路径,使用 dockerfile 指令指定 Dockerfile 文件名,可以使用 args 指令指定构建镜像时往Dockerfile中传入的变量。

services:

  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile_flask
      args:
        buildno: 1

4.depends_on

解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web。

注意:web 服务不会等待 redis、db 完全启动之后才启动。

services:
  webapp:
    build: .
    depends_on:
      - db
      - redis

  redis:
    image: redis:latest

  db:
    image: mysql:latest

5.env_file

从文件中获取环境变量,可以为单独的文件路径或列表。

services:
  mysql:
    image: mysql:latest
    ports:
      - 3307:3306
	env_file: .env		# 仅使用单个env文件

	env_file:		# 通过数组来使用多个env文件
	  - ./common.env
	  - ./apps/web.env
	  - /opt/secrets.env

环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

# common.env: Set development environment
MYSQL_ROOT_PASSWORD=root

6.networks

配置容器连接的网络。

services:
  webapp:
    networks:
      - flask-net

networks:	# 在顶级networks关键字中需要声明,才会在启动时自动创建该网络,否则报错。
  flask-net:

7.ports

暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式。

ports:
 2. "80:80" # 绑定容器的80端口到主机的80端口
 3. "9000:8080" # 绑定容器的8080端口到主机的9000端口
 4. "443" # 绑定容器的443端口到主机的任意端口,容器启动时随机分配绑定的主机端口号

8.expose

暴露端口,但不映射到宿主机,只被连接的服务访问。

和ports的区别是,expose暴露容器给link到当前容器的容器,不会将端口暴露给主机。

9.restart

指定docker容器(服务)总是运行。

services:
  webapp:
    networks:
      - flask-net
	restart: always

3. docker-compose指令

中文文档: https://yeasy.gitbook.io/docker_practice/compose/commands

1.up -d(后台启动)

该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。

docker-compose up -d · # 不写服务名,默认启动docker-compose.yml所有服务
docker-compose up -d 服务名 # 启动docker-compose.yml的对应服务

     默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。但是不会更新已经打好的镜像,如果镜像错误,不能通过 docker-compose up 更新镜像,只能先删除镜像。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。

2.down

此命令将会停止 up 命令所启动的容器,并移除网络,但是不会移除已经打好的镜像。

docker-compose down · # 不写服务名,默认停止docker-compose.yml所有服务
docker-compose down 服务名 # 停止docker-compose.yml的对应服务

3.exec

进入指定的容器。和docker的exec命令一样。

docker-compose exec 服务名 bash

4.ps

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

docker-compose ps # 列出所有运行的服务
docker-compose ps -q # 只列出容器的ID信息
选项:
-q 只打印容器的 ID 信息。

5.top

查看所有服务容器内运行的进程,或者查看指定服务名的容器内运行的进程。

docker-compose top
docker-compose top 服务名

6.logs -f(实时)

查看所有服务容器,或指定服务容器的日志输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 --no-color 来关闭颜色。该命令在调试问题的时候十分有用。

docker-compose logs # 输出所有服务容器的日志
docker-compose logs 服务名 # 输出对应服务的日志
docker-compose logs -f 服务名 # 实时输出对应服务的日志

其他命令参考中文文档手册。

总结

到此这篇关于docker-compose常见的参数命令详解的文章就介绍到这了,更多相关docker-compose参数命令内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker compose部署minio服务

    目录 介绍 单机版部署 纠删码模式部署 分布式部署 介绍 最近才知道minio这个对象存储服务中间件,简直相见恨晚,只怪我见识太短浅(哭泣脸). 说得通俗易懂点,minio的作用就是用来存储文件的,比如图片.视频.音频等各种类型的文件. 那么问题来了,java本身就可以直接把文件写到磁盘里面,为什么还要用minio呢? minio有完善的文件管理功能,包括针对文件的上传,下载,删除等 minio有强大的纠删功能,即便磁盘损坏,在一定程度上时可以避免丢失文件的 minio有完善的权限管理功能,它可

  • 使用docker-compose部署mysql的完整步骤

    目录 前言 一.docker-compose简介 二.部署步骤 1. 在/root 目录下新建目录docker-compose,在/root/docker-compose目录下新建mysql文件件 2 准备挂载文件 3.编写docker-compose.yml文件 4. 启动 总结 前言 虽然docker部署环境比自己下载安装包要方便不少,但是docker的命令还有挂载目录在每次启动容器的时候都去找命令对使用者是很不友好的,而且有时候要启动多个容器的时候显然一个个的启动是很麻烦的.所以如果可以事

  • Docker Compose+Nestjs构建Dapr Redis发布订阅分布式应用

    目录 Dapr(分布式应用程序运行时)介绍 实战 Dapr 的 Redis 发布/订阅应用 1. 创建项目 2. 创建 Dapr Placement 服务 3. 创建 Redis Publish 服务 4. 创建 Dapr Pub-Sub 组件 5. 创建 Redis Dapr Sidecar 6. 创建 NestJS Server 7. 为 NestJS 订阅服务器创建 Dockerfile 8. 将 NestJS 订阅服务添加到 docker-compose 文件 9. 创建 Dapr 订阅

  • 教你如何将应用从docker-compose迁移到k8s中

    目录 工具推荐 操作步骤 安装kompose 转换yaml 调整 部署到k8s 公司之前有一些应用是通过docker-compose部署,最近领导让我将其迁移到k8s中.我已经初步完成任务,现记录其操作过程,分享给各位朋友. 工具推荐 当我接到这个任务,我的第一感觉是要参考docker-compose.yaml中的信息,手写一套k8s的yaml部署文件.这样当然是可行的,但是效率比较低,且需要同时熟悉docker-compose和k8s的yaml文件的结构.后来我发现了一个专门的迁移工具,可方便

  • 详解docker compose搭建lnmpr环境实现

    目录 使用docker-compose搭建lnmpr环境 介绍 软件架构 Compose 简介 具体文件内容docker-compose.yml 使用说明 使用docker-compose搭建lnmpr环境 本文环境 docker20.10,PHP8.1(含扩展)+ Nginx1.22 + MySQL8.0 + Mongo6.0 + Redis6.0 + Swoole2.0 介绍 docker-compose搭建PHP8.1(含扩展)+ Nginx1.22 + MySQL8.0 + Mongo6

  • Docker系列compose ymal文件解析学习

    目录 docker-compose.yml 文件 Dockerfile 文件解析 docker-compose.yml 文件 yml文件格式与json类似,采用缩进的形式来区别上下级关系,支持多种数据类型,字符,布尔,整数,日期,时间等,详细语法大家有兴趣的可以自己去查查看 上一回的docker-compose.yml 文件示例如下 # yaml 配置 version: '1.18' services: web: build: ./main.go ports: - "8080:8080"

  • docker-compose常见的参数命令详解

    目录 1. Docker Compose 产生背景 2. Docker Compose模板文件 1.environment 2.volumes 3.build 4.depends_on 5.env_file 6.networks 7.ports 8.expose 9.restart 3. docker-compose指令 1.up -d(后台启动) 2.down 3.exec 4.ps 5.top 6.logs -f(实时) 总结 1. Docker Compose 产生背景 Compose 项

  • Docker Compose搭建Wordpress服务实现详解

    目录 前言 编写docker-compose.yaml 注意点 前言 最近在研究wordpress独立建站,在项目部署的时候也踩了一些坑,为了避免再次踩坑,特此通过此文章记录一下. 编写docker-compose.yaml 此次建站采用的是docker compose的方式来部署wordpress项目,我们可以进入DockerHub官网找到wordpress镜像: 根据官方文档提供的信息,最终我们可以编写出如下docker-compose.yaml: version: "3.1" s

  • docker备份linux系统的命令详解

    tar备份系统 sudo tar cvpzf backup.tgz --exclude=/proc --exclude=/mnt --exclude=/sys --exclude=/backup.tgz / 更多linux备份方法参考https://www.jb51.net/article/151167.htm 编写dockerflie 新建目录Dockerfile,在Dockerfile目录下编辑Dockerfile脚本,如下内容: FROM scratch COPY rootfs / RUN

  • Docker Compose部署及基础使用详解

    一 Docker Compose概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配置中创建并启动所有服务. Compose适用于所有环境:生产,登台,开发,测试以及CI工作流程. 使用Compose基本上是一个三步过程: 在Dockerfile中定义您的应用程序环境,以便可以在任何地方进行再生产. 定义构成应用程序的服务,docker-compose.yml 以便它们可以在隔离环

  • Docker Swarm 服务编排之命令详解

    一.简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理.同样在Swarm集群中,可以使用docker stack 将一组相关联的服务进行编排管理. Docker stack 也是一个yaml文件,和一份docker-compose.yml文件差不多,指令也基本一致.但是与compose相比其不支持build.links和network_mode.Docker stack有一个新的指令deploy. 注:stack不支持的指令

  • Docker基础命令详解

    docker基本概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上. Docker是一个重新定义了程序开发测试.交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的"Build once,Run anywhere" 创建镜像 创建镜像的方法有三种: 基于已有的容器创建 基于本地模板导入 基于dockerfile 基于已有的容器创建 主要使用docker

  • Docker 最常用的镜像命令和容器命令详解

    本文列出了 Docker 使用过程中最常用的镜像命令和容器命令,以及教大家如何操作容器数据卷,实现容器数据的备份.熟练练习这些命令以后,再来一些简单的应用部署练习,大家就可以学习 Docker 的镜像构建.备份恢复迁移.镜像仓库.网络.集群等等更多的内容. 镜像相关命令 官方文档:https://docs.docker.com/reference/ 查看镜像 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZ

  • Docker 打包python的命令详解

    最近用Python写了一段爬虫程序,为了隔离其运行环境,易于分发,把项目打包成Docker镜像 Dockerfile FROM python:2.7.12-alpine ADD ./src /job CMD ["python", "/job/main.py"] 构建命令 $ docker build -t job . 运行 $ docker run -d --name job job 比较简单 以上所述是小编给大家介绍的Docker 打包python的命令详解,希望

  • docker版es、milvus、minio启动命令详解

    1.es启动命令: docker run -itd -e TAKE_FILE_OWNERSHIP=1111 -v /data/elasticsearch/data:/usr/share/elasticsearch/data -p 9200:9200 --name es elasticsearch:6.4.2 需要添加环境变量 TAKE_FILE_OWNERSHIP,值随意. 含义请参考我的另一篇文章://www.jb51.net/article/200198.htm 挂载目录用来存储es的数据.

  • Python argparse模块实现解析命令行参数方法详解

    argparse是Python的一个标准模块,用于解析命令行参数,即解析sys.argv中定义的参数.实现在:传送门 argparse模块还会自动生成帮助和使用信息,即在最后加-h或--help.当用户输入的参数无效时,会触发error,并给出出错原因. python test_argparse.py -h python test_argparse.py --help 使用argparse的步骤: 1.创建解析器:argparse.ArgumentParser(),ArgumentParser是

随机推荐