Docker Compse单机编排

一.Docker Compse 介绍

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YAML 文件来配置应用程序的服务、网络和卷,然后使用单个命令创建和启动所有服务。这使得在开发、测试和部署过程中管理多容器应用程序变得更加简单。

github地址: GitHub - docker/compose: Define and run multi-container applications with Docker

官方地址: https://docs.docker.com/compose/

1.yml 语言

AML 文件格式及编写注意事项

YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。

类似于 json 数据描述语言,语法比 json 简单的很多。

YAML 数据结构通过缩进来表示,连续的项目通过减号来表示, 键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来

2.使用YAML时需要注意下面事项

  • 大小写敏感

  • 通过缩进表示层级关系

  • 不支持制表符 tab 键缩进,只能使用空格缩进

  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格

  • 用 # 号注释

  • 符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -

  • 如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思

指令 作用 演示
build 指定构建上下文和可选的Dockerfile用于构建镜像。 build: context: /opt/test dockerfile: Dockerfile
dockerfile 指定Dockerfile的路径。通常在build部分中使用。 dockerfile: Dockerfile.prod
context 指定构建上下文的路径,即包含Dockerfile和构建上下文的目录路径 context: /opt/test
image 指定用于服务/容器的镜像名称。 image: myapp:latest
command 覆盖由镜像指定的默认命令 command: ["python", "app.py"]
container_name 为容器指定自定义名称。 container_name: my_container
deploy 指定部署选项,如副本和放置 deploy: replicas: 3
environment 为服务指定环境变量 environment: - DEBUG=true
networks 指定连接服务的网络 networks: - frontend - backend
network_mode 指定容器的网络模式 network_mode: "host"
ports: 将容器端口映射到主机端口 ports: - "8080:80"
volumes 挂载主机或其他容器的卷 volumes: - "nginx-data:/usr/local/nginx/html
volumes_from 从另一个服务/容器挂载卷 volumes_from: - data-container
hostname: 指定主机名 hostname: my-container
sysctls 为容器设置内核参数 sysctls: - net.core.somaxconn=1024
restart 重启策略 restart: always
depends_on 指定该服务依赖的其他服务 depends_on: - mysql

3.常用指令

命令只能在docker-compose.yml的目录下执行

命令 解释
build #构建镜像
bundle #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备份文件
config -q #查看当前配置,没有错误不输出任何信息
create #创建服务,较少使用
down #停止和删除所有容器、网络、镜像和卷
events #从容器接收实时事件,可以指定json 日志格式,较少使用
exec #进入指定容器进行操作
help #显示帮助细信息
images #显示镜像信息,较少使用
kill #强制终止运行中的容器
logs #查看容器的日志
pause #暂停服务
port #查看端口
ps #列出容器,较少使用
pull #重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用
push #上传镜像
restart #重启服务,较少使用
rm #删除已经停止的服务
run #一次性运行容器
scale #设置指定服务运行的容器个数
start #启动服务 ,较少使用
stop #停止服务,较少使用
top #显示容器运行状态
unpause #取消暂定
up #创建并启动容器 ,较少使用

二.安装和准备

1.安装Docker Compose

yum安装

复制代码
yum install  epel-release.noarch  -y
yum -y install docker-compose

二进制安装

复制代码
chmod +x /usr/local/bin/docker-compose
ln  -s   /usr/local/bin/docker-compose   /usr/bin

2.查看命令格式

官方文档: https://docs.docker.com/compose/reference/

bash 复制代码
docker-compose --help
Define and run multi-container applications with Docker.
Usage:
 docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
 docker-compose -h|--help
#选项说明:  
-f,--file FILE #指定Compose 模板文件,默认为docker-compose.yml
-p,--project-name NAME #指定项目名称,默认将使用当前所在目录名称作为项目名。
--verbose   #显示更多输出信息
--log-level LEVEL    #定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL) 
--no-ansi #不显示ANSI 控制字符
-v, --version #显示版本

#以下为命令选项,需要在docker-compose.yml|yaml 文件所在在目录里执行
build  #构建镜像
bundle #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备份文件
config  -q #查看当前配置,没有错误不输出任何信息
create #创建服务,较少使用
down #停止和删除所有容器、网络、镜像和卷
events #从容器接收实时事件,可以指定json 日志格式,较少使用
exec #进入指定容器进行操作
help #显示帮助细信息
images #显示镜像信息,较少使用
kill #强制终止运行中的容器
logs #查看容器的日志
pause #暂停服务
port #查看端口
ps #列出容器,较少使用
pull #重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用
push #上传镜像
restart #重启服务,较少使用
rm #删除已经停止的服务
run #一次性运行容器
scale  #设置指定服务运行的容器个数
start #启动服务 ,较少使用
stop #停止服务,较少使用
top #显示容器运行状态
unpause #取消暂定
up #创建并启动容器 ,较少使用

显示 docker-compose 拉起的容器

3.docker compse 文件格式

官方文档: https://docs.docker.com/compose/compose-file/

docker compose 文件是一个yaml格式的文件,所以注意行首的缩进很严格默认docker-compose命令会调用当前目录下的docker-compose.yml的文件,因此一般执行docker-compose命令前先进入docker-compose.yml文件所在目录

docke- compose文件的格式很不同版本,版本不同,语法和格式有所不同,参看以下列表

三.演示

1.启动单台容器

docker compose 文件可在任意目录,创建文件名为docker-compose.yml 配置文件,要注意前后的缩进

bash 复制代码
[root@localhost harbor]#mkdir /mnt/docker-compose
[root@localhost harbor]#cd  /mnt/docker-compose/
[root@localhost docker-compose]#vim docker-compose.yml
#准备yml文件
server-nginx-web:
  image: nginx
  container_name: web1
  expose:
   - 80
   - 443
  ports:
    - "8080:80"
    - "8443:443"

2.检测语法

bash 复制代码
docker-compose  config

3.启动

bash 复制代码
docker-compose up
#docker-compose start
#docker-compose up -d
后台启动
docker-compose  ps

4.关闭

4.1 使用docker-compose down 会将容器直接删除 镜像也会删除

bash 复制代码
docker-compose down
docker-compose  ps
docker ps -a

4.2 使用docker-compose kill 只是退出容器

bash 复制代码
docker-compose kill
docker ps -a
docker-compose  ps

4.3 只删除停止的容器

bash 复制代码
docker-compose rm

5.查看事件 docker-compose events

bash 复制代码
docker-compose  events
#json 格式
#docker-compose events --json

6.启动多个容器

bash 复制代码
server-nginx-web:
  image: nginx
  container_name: web1
  expose:
   - 80
   - 443
  ports:
    - "8001:80"
    - "8443:443"
server-mysql:
  image: mysql
  container_name: mysql1

[root@localhost docker-compose]#docker-compose config -q
# -q 静默不输出 
启动
docker-compose up -d
docker ps -a

7.调用dockerfile 文件执行编排

bash 复制代码
FROM  centos:centos7.9.2009
LABEL author="zhou cloud"  \
      version="1.0"       \
      description="test"
RUN   rm -rf  /etc/yum.repos.d/
ADD   qh.repo   /etc/yum.repos.d/
RUN   yum -y install gcc gcc-c++ make automake pcre pcre-devel zlib  zlib-devel openssl openssl-devel wget
ADD   nginx-1.18.0.tar.gz   /usr/local/src
RUN   cd  /usr/local/src/nginx-1.18.0  && ./configure  --prefix=/apps/nginx  && make   &&  make install
COPY  index.html    /apps/nginx/html
EXPOSE 80
CMD   ["-g","daemon off;"]
ENTRYPOINT   ["/apps/nginx/sbin/nginx"]



[root@localhost centos7]#docker  build   -t  c7:n3   .
[root@localhost centos7]#docker run  -d  -p 80:80 --name web1  c7:n1

编写compse 文件

bash 复制代码
vim /opt/compose_nginx/docker-compose.yml 

services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: /data/dockerfile/system/centos/centos7/
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      mynet:
        ipv4_address: 172.18.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  mynet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16
        
    

services: 定义了要运行的服务。

nginx: Nginx 服务的配置。

container_name: 指定容器的名称为 web1。

hostname: 指定容器的主机名为 nginx。

build: 指定了构建 Nginx 容器所需的上下文和 Dockerfile。

ports: 将主机端口 1216 映射到容器的 80 端口,将主机端口 1217 映射到容器的 443 端口。

networks: 将服务连接到名为 lnmp 的自定义网络。

volumes: 将主机上的 ./wwwroot 目录挂载到容器中的 /usr/local/nginx/html 目录。

networks: 定义了自定义网络。

lnmp: 自定义网络的配置。

driver: 网络驱动程序为 bridge。

ipam: IP 地址管理配置。

config: 子网配置,指定了 IP 地址范围。

cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d
----------------------------------------------------------------------------------------------------------
-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME :指定项目名称,默认使用目录名称
-d :在后台运行
----------------------------------------------------------------------------------------------------------

docker ps -a
CONTAINER ID   IMAGE                 COMMAND     CREATED              STATUS              PORTS                                         NAMES
b48dceee248f   compose_nginx_nginx   "/run.sh"   About a minute ago   Up About a minute   0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp   compose_nginx_nginx_1

cd /opt/compose_nginx/
docker-compose ps					#必须在docker-compose.yml所在目录执行此命令


docker-compose -f docker-compose.yml up -d
相关推荐
阿巴阿巴boer1 分钟前
用wsl搭建远程linux服务器
linux·运维·服务器·ssh
lisanmengmeng41 分钟前
docker 方式安装部署禅道zentao(五)
运维·docker·容器
程序员老赵1 小时前
AdguardHome Docker 容器化部署指南
docker·dns
wanhengidc1 小时前
云手机的硬件依赖性如何?
运维·服务器·智能手机·云计算
piaoroumi2 小时前
UVC调试
linux·运维·前端
VekiSon2 小时前
Linux系统编程——标准IO
linux·运维·服务器
Evan芙2 小时前
DNS服务器类型,解析答案,正反解析域,资源记录定义总结
运维·服务器
露临霜2 小时前
Docker安装nginx
nginx·docker·容器
wanhengidc2 小时前
巨椰 云手机办公便利性高
运维·服务器·安全·智能手机·云计算
Saniffer_SH2 小时前
【每日一题】PCIe答疑 - 接大量 GPU 时主板不认设备或无法启动和MMIO的可能关系?
运维·服务器·网络·人工智能·驱动开发·fpga开发·硬件工程