0
点赞
收藏
分享

微信扫一扫

Docker Compose容器编排

卿卿如梦 2022-01-30 阅读 40

目录

Docker Compose概述

        compose特点

                单个主机上的多个隔离环境

                创建容器时保留卷数据

                仅重新创建已更改的容器

                变量和在环境之间移动组合

yml文件格式

        docker compose配置常用字段

        docker compose常用命令

Docker compose部署Nginx服务

总结


Docker Compose概述

根据官方文档,大概翻译了一些

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

Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流程。

使用 Compose 基本上是一个三步过程:

  1. 使用 a 定义您的应用程序的环境,Dockerfile以便可以在任何地方复制它。

  2. 定义构成您的应用程序的服务,docker-compose.yml 以便它们可以在隔离环境中一起运行。

  3. 运行docker compose up,Docker compose 命令启动并运行整个应用程序。也可以docker-compose up使用 docker-compose 二进制文件运行。

Compose 具有用于管理应用程序整个生命周期的命令:

  • 启动、停止和重建服务
  • 查看运行服务的状态
  • 流式传输正在运行的服务的日志输出
  • 在服务上运行一次性命令

        compose特点

Compose 使其有效的特点是:

  • 单个主机上多个隔离环境
  • 创建容器时保留数据卷数据
  • 仅重新创建已更改的容器
  • 变量和环境之间移动组合

                单个主机上的多个隔离环境

Compose 使用项目名称将环境彼此隔离。您可以在几个不同的上下文中使用此项目名称:

  • 在开发主机上,创建单个环境的多个副本,例如当您想要为项目的每个功能分支运行稳定副本时
  • 在 CI 服务器上,为了防止构建相互干扰,您可以将项目名称设置为唯一的构建号
  • 在共享主机或开发主机上,以防止可能使用相同服务名称的不同项目相互干扰

默认项目名称是项目目录的基本名称。您可以使用-p命令行选项或 COMPOSE_PROJECT_NAME环境变量设置自定义项目名称。

默认项目目录是 Compose 文件的基本目录。可以使用--project-directory命令行选项定义它的自定义值。

                创建容器时保留卷数据

Compose 会保留您的服务使用的所有卷。运行时docker-compose up ,如果它找到以前运行的任何容器,它会将卷从旧容器复制到新容器。此过程可确保您在卷中创建的任何数据都不会丢失。

                仅重新创建已更改的容器

Compose 缓存用于创建容器的配置。当您重新启动未更改的服务时,Compose 会重新使用现有容器。重复使用容器意味着您可以非常快速地更改您的环境。

                变量和在环境之间移动组合

Compose 支持 Compose 文件中的变量。您可以使用这些变量为不同的环境或不同的用户定制自己的组合。

可以使用该字段或通过创建多个 Compose 文件来扩展Compose 文件

yml文件格式

YAML是一种标记语言很直观的数据序列化格式文件格式及编写注意事项

●不支持制表符tab键缩进,需要使用空格缩进·

●通常开头缩进2个空格

●字符后缩进1个空格,如冒号、逗号、横杆

●用#号注释

●如果包含特殊字符用单引号引起来

●布尔值必须用引号括起来

        docker compose配置常用字段

字段描述
build dockerfile context指定Dockerfile文件名构建镜像上下文路径
image指定镜像
command执行命令,覆盖默认命令
container name指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale(副本集)
deploy指定部署和运行服务相关配置,只能在Swarm模式使用
environment添加环境变量
networks加入网络
ports暴露容器端口,与-p相同,但端口不能低于60
volumes挂载宿主机路径或命令卷
restart重启策略,默认no,always,no-failure,unless-stoped
hostname容器主机名

        docker compose常用命令

字段描述
build重新构建服务
ps列出容器
up创建和启动容器
exec在容器里面执行命令
scale指定一个服务容器启动数量
top显示容器进程
logs查看容器输出
down删除容器、网络、数据卷和镜像
stop/start/restart停止/启动/重启服务

Docker compose部署Nginx服务

下载compose

[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.21.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

创建一个测试目录

[root@localhost ~]# mkdir test

结构大体如下 

[root@localhost ~/test]# tree
.
└── compose_nginx
    ├── docker-compose.yml
    ├── nginx
    │   ├── Dockerfile
    │   └── nginx-1.15.9.tar.gz
    └── wwwroot
        └── index.html

3 directories, 4 files

编写yml文件

[root@localhost ~/test/compose_nginx]# cat docker-compose.yml
version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1314:80
      - 2580:443
    networks:
      - cluster
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  cluster:

Dockerfile文件

[root@localhost ~/test/compose_nginx/nginx]# cat Dockerfile
FROM centos:7 as build
ADD nginx-1.15.9.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.9
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &>/dev/null && \
      yum clean all && \
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
       ./configure --prefix=/usr/local/nginx &>/dev/nuil && \
        make &>/dev/null && \
        make install &>/dev/null && \
        rm -rf /mnt/nginx-1.15.9
FROM centos:7
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
COPY --from=build /usr/local/nginx /usr/local/nginx
CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;"]

index.html文件

[root@localhost ~/test/compose_nginx/wwwroot]# cat index.html
this is xiaobin first docker compose

运行

[root@localhost ~/test/compose_nginx]# docker-compose -f docker-compose.yml up -d
Building nginx
Step 1/9 : FROM centos:7 as build
 ---> eeb6ee3f44bd
Step 2/9 : ADD nginx-1.15.9.tar.gz /mnt
 ---> 250ae0c6dec2
Step 3/9 : WORKDIR /mnt/nginx-1.15.9
 ---> Running in 111652508c7f
Removing intermediate container 111652508c7f
 ---> 50c455161330
Step 4/9 : RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &>/dev/null &&       yum clean all                            && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc &&        ./configure --prefix=/usr/lo                           cal/nginx &>/dev/nuil &&         make &>/dev/null &&         make install &>/dev/null &&         rm -rf /mn                           t/nginx-1.15.9
 ---> Running in c78e0cd749c3
Loaded plugins: fastestmirror, ovl
Cleaning repos: base extras updates
Cleaning up list of fastest mirrors
Removing intermediate container c78e0cd749c3
 ---> a7d34a938fe2
Step 5/9 : FROM centos:7
 ---> eeb6ee3f44bd
Step 6/9 : EXPOSE 80
 ---> Running in 452a82532ac7
Removing intermediate container 452a82532ac7
 ---> 58351b0aaeb6
Step 7/9 : VOLUME ["/usr/local/nginx/html"]
 ---> Running in 43ec47184966
Removing intermediate container 43ec47184966
 ---> 81786e63ec57
Step 8/9 : COPY --from=build /usr/local/nginx /usr/local/nginx
 ---> 5d31587f9dad
Step 9/9 : CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;"]
 ---> Running in f10c92bb8449
Removing intermediate container f10c92bb8449
 ---> 5cb6aef432c2
Successfully built 5cb6aef432c2
Successfully tagged compose_nginx_nginx:latest
WARNING: Image for service nginx was built because it did not already exist. To rebuild this image you must                            use `docker-compose build` or `docker-compose up --build`.
Creating compose_nginx_nginx_1 ... done

查看容器

测试 

[root@localhost ~/test/compose_nginx/wwwroot]# curl 192.168.37.107:1314
this is xiaobin first docker compose

 那么我们怎么知道哪些容器是docker-compose创建的

使用docker-compose ps命令

[root@localhost ~/test/compose_nginx]# docker-compose ps
        Name                       Command               State                                   Ports
--------------------------------------------------------------------------------------------------------------------------------------
compose_nginx_nginx_1   /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:2580->443/tcp,:::2580->443/tcp,
                                                                 0.0.0.0:1314->80/tcp,:::1314->80/tcp

需要注意,必须在有yml目录下才能使用,不然会提示你找不到........

[root@localhost ~]# docker-compose ps
ERROR:
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml

总结

       docker compose是docker的一个应用程序工具,通过YAML 文件来配置应用程序的服务

        注意yml书写格式,scale副本集在之后的Kubernetes中有很大用处。

举报

相关推荐

0 条评论