侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker Compose

再见理想
2022-05-25 / 0 评论 / 0 点赞 / 365 阅读 / 2,378 字

官网文档地址:https://docs.docker.com/compose/
docker-compose一些常用命令:
https://cloud.tencent.com/developer/article/1499032
https://www.cnblogs.com/yyxianren/p/10894708.html

一,概述

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖,一个服务当中可包括多个容器实例;
Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

网络

默认情况下docker-compose会建立一个默认的网络,默认名称:

docker-compose.yml 所在目录名称小写形式加上“_default”

  • 作用:定义、运行多个容器;
  • 如何配置YAML 文件;
  • 相关命令;

作用:批量容器编排。

场景:单机下使用!不适用于集群。

compose 重要概念:

  • services:服务,相当于一个容器、应用;
  • 项目:一组关联的容器。所有的容器、服务跑起来是一个完整的项目;

使用步骤:

  1. 定义一个 Dockerfile;
  2. 通过 docker-compose.yml 定义services服务;
  3. 通过 docker-compose up 命令启动项目;

二,docker-compose 安装

$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

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

$ docker-compose --version

三,docker-compose 常用命令

1、Docker-Compose命令格式

[root@iZwz9hdkhnyvzivpk6q3svZ ~]# docker-compose --help
Define and run multi-container applications with Docker.

Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help

Options:
-f, --file FILE             Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME     Specify an alternate project name
(default: directory name)
--verbose                   Show more output
--log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi                   Do not print ANSI control characters
-v, --version               Print version and exit
-H, --host HOST             Daemon socket to connect to

--tls                       Use TLS; implied by --tlsverify
--tlscacert CA_PATH         Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH  Path to TLS certificate file
--tlskey TLS_KEY_PATH       Path to TLS key file
--tlsverify                 Use TLS and verify the remote
--skip-hostname-check       Don't check the daemon's hostname against the
name specified in the client certificate
--project-directory PATH    Specify an alternate working directory
(default: the path of the Compose file)
--compatibility             If set, Compose will attempt to convert keys
in v3 files to their non-Swarm equivalent
--env-file PATH             Specify an alternate environment file

Commands:
build              Build or rebuild services
config             Validate and view the Compose file
create             Create services
down               Stop and remove containers, networks, images, and volumes
events             Receive real time events from containers
exec               Execute a command in a running container
help               Get help on a command
images             List images
kill               Kill containers
logs               View output from containers
pause              Pause services
port               Print the public port for a port binding
ps                 List containers
pull               Pull service images
push               Push service images
restart            Restart services
rm                 Remove stopped containers
run                Run a one-off command
scale              Set number of containers for a service
start              Start services
stop               Stop services
top                Display the running processes
unpause            Unpause services
up                 Create and start containers
  version            Show the Docker-Compose version information

命令选项如下:

  • -f,–file FILE指定Compose模板文件,默认为docker-compose.yml,可以多次指定。
  • -p,–project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
  • -x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 1.9+版本)
  • -x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker 1.9+版本)
  • -verbose输出更多调试信息 -v,
  • –version打印版本并退出

2、docker-compose up

# 命令
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

选项包括:

  • -d 在后台运行服务容器
  • –no-color 不使用颜色来区分不同的服务的控制输出
  • –no-deps 不启动服务所链接的容器
  • –force-recreate 强制重新创建容器,不能与–no-recreate同时使用
  • –no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
  • –no-build 不自动构建缺失的服务镜像
  • –build 在启动容器前构建服务镜像
  • –abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
  • -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
  • –remove-orphans 删除服务中没有在compose文件中定义的容器
  • –scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
  • **-f **指定使用的Compose模板文件,默认为 docker-compose.yml,可以多次指定

3、docker-compose build

# 命令
docker-compose build [options] [--build-arg key=val...] [SERVICE...] 

构建(重新构建)项目中的服务容器。
选项包括:

  • –compress 通过gzip压缩构建上下环境
  • –force-rm 删除构建过程中的临时容器
  • –no-cache 构建镜像过程中不使用缓存
  • –pull 始终尝试通过拉取操作来获取更新版本的镜像
  • -m, –memory MEM为构建的容器设置内存大小
  • –build-arg key=val为服务设置build-time变量

服务容器一旦构建,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务。

4,常用

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

#停止正在运行的容器,可以通过docker-compose start 再次启动
docker-compose stop

# 停止和删除容器、网络、卷、镜像。
docker-compose down

# 启动已经存在的服务容器
docker-compose start

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

#验证并查看compose文件配置
docker-compose config

#打印版本信息
docker-compose version

#显示各个容器运行的进程情况
docker-compose stop [options] [SERVICE...]

#恢复处于暂停状态中的服务
docker-compose unpause [SERVICE...]

#删除所有(停止状态的)服务容器,推荐先执行docker-compose stop命令来停止容器
docker-compose rm [options] [SERVICE...]

#在指定容器上执行一个ping命令
docker-compose run ubuntu ping www.baidu.com

四,Yaml 规则

docker-compose.yml
配置文件详细文档:https://docs.docker.com/compose/compose-file/#services-top-level-element

整个配置文档可理解为3层:

# 第一层:docker-compose版本信息,向下兼容docker版本
version: "3.9"

# 第二层:服务配置
services:
  服务1:
    depends_on:
    images:
    build: 
    ports:
        - "80:80"
    network:
  服务2:
    ...
   
# 第三层:其它配置  网络、卷等
volumes:
networks:
configs:
  • image:指定为镜像名或镜像ID,如果镜像在本地不存在,Compose将会尝试拉取这个镜像
  • container_name: 指定容器名称。默认 项目名称_服务名称_序号 格式;
  • depends_on:解决容器的依赖、启动先后,容器之间的通讯的问题;
  • links:连接到其他容器。注意:不推荐使用该指令,建议自定义网络,或者使用 version: ‘2’ 和更高版本的docker-compose.yml 直接定义自定义网络并使用;
  • environment:设置环境变量。可以使用数组或字典两种格式。只给定名称的变量会自动获取运行Compose主机上对应变量的值,可以用来防止泄露不必要的数据;
  • volumes:容器挂载;
  • expose: 暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数;
  • ports:等同于-p,暴露端口信息;
  • cmd:指定这个容器启动的时候执行的命令;
  • entrypoint:指定这个容器启动的时候执行的命令;
  • user:指定容器中运行应用的用户名;
  • working_dir:指定容器中工作目录;
  • restart:指定容器退出后的重启策略为始终重启。在生产环境中推荐配置为 always 或者 unless-stopped;

五,实战-部署 ymzhaoke 项目

项目情况:ymzhaoke 是一个java项目,依赖一个 redis 中间件。

第一步:编写 Dockerfile 文件

FROM openjdk:8-jdk-alpine
COPY *.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar","-Xms512m","-Xmx512m"]

第二步:docker-compose.yml 配置文件:

version: "3.8"
services:
  ymzhaoke-api:
    build: .
    image: ymzhaoke-api
    container_name: ymzhaoke-api
    depends_on:
      - redis6379
    ports:
      - "8686:8686"
  redis6379:
    image: "redis:latest"
    container_name: redis6379
    ports:
      - "6379:6379"
    volumes:
      - ./conf/redis.conf:/usr/local/etc/redis/redis.conf
    restart: on-failure
    command: redis-server --requirepass Aa123456 --protected-mode no --appendonly yes

第三步:上传文件

将 ymzhaoke 项目构建后的 jar 包、Docker 文件、docker-compose.yml 文件上传到服务器的同一目录下。
image.png

第四步:启动命令

docker-compose up -d --build

image.png
启动成功后可通过 docker-compose ps 命令查看。

0

评论区