Docker Compose容器编排
目录Docker Compose概述compose特点单个主机上的多个隔离环境创建容器时保留卷数据仅重新创建已更改的容器变量和在环境之间移动组合yml文件格式docker compose配置常用字段docker compose常用命令Docker compose部署Nginx服务总结...
目录
Docker Compose概述
根据官方文档,大概翻译了一些
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,可以从你的配置中创建并启动所有服务
Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流程。
使用 Compose 基本上是一个三步过程:
-
使用 a 定义您的应用程序的环境,Dockerfile以便可以在任何地方复制它。
-
定义构成您的应用程序的服务,docker-compose.yml 以便它们可以在隔离环境中一起运行。
-
运行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)