当前位置: 首页 > news >正文

广西网站建设营销公司/结构优化是什么意思

广西网站建设营销公司,结构优化是什么意思,wordpress页面加载时间代码,wordpress页面.html【Docker】进阶之路:(十二)Docker Composer Docker Compose 简介安装 Docker Compose模板文件语法docker-compose.yml 语法说明imagecommandlinksexternal_linksportsexposevolumesvolunes_fromenvironmentenv_fileextendsnetpiddnscap_add,c…

【Docker】进阶之路:(十二)Docker Composer

  • Docker Compose 简介
  • 安装 Docker Compose
  • 模板文件语法
    • docker-compose.yml 语法说明
      • image
      • command
      • links
      • external_links
      • ports
      • expose
      • volumes
      • volunes_from
      • environment
      • env_file
      • extends
      • net
      • pid
      • dns
      • cap_add,cap_drop
      • dns_search
      • healthcheck
      • depends_on
      • deploy
      • 完整docker-compose.yml 示例如下:
    • YAML文件格式及编写注意事项
    • Docker Compose 常用命令
      • docker-compose
      • docker-compose up
      • docker-compose ps
      • docker-compose stop
      • docker-compose -h
      • docker-compose down
      • docker-compose logs
      • docker-compose build
      • docker-compose pull
      • docker-compose restart
      • docker-compose rm
      • docker-compose start
      • docker-compose run
      • docker-compose scale
      • docker-compose pause
      • docker-compose kill
      • docker-compose config
      • docker-compose create
      • docker-compose exec
      • docker-compose port
      • docker-compose push
      • docker-compose unpause
      • docker-compose version
    • Docker Compose常用命令汇总清单
  • 使用Docker Compose构建Web应用
    • 1).定义 Python 应用
      • 1.准备项目:
      • 2.创建app.py文件
      • 3.创建Python需求文件composetest/src/requirements.txt
    • 2).创建容器的Dockerfile文件
    • 3).定义docker-compose脚本
    • 4).使用Compose构建并运行应用程序
      • 5).访问我们的网站看看

Docker Compose是一个用来定义和运行复杂应用的 Docker工具。一个使用 Docker 容器的应用 通常由多个容器组成,使用 Docker Compose 则不再需要使用 shell 脚本来启动容器。
Compose通过一个配置文件来管理多个 Docker容器,在配置文件中,所有的容器通过 services 来定义,然后使用 docker-compose 脚本来启动、停止和重启应用,并管理应用中的服务以及所有依 赖服务的容器,非常适合组合使用多个容器进行开发的场景。

Docker Compose 简介

  • Docker Compose 是 Docker 官方的开源项目,负责实现对 Docker容器集群的快速编排。
  • Docker Compose 使用 Python编写,调用 Docker服务提供的 API来对容 器进行管理 。 因此 , 只要所操作的平台支持 Docker API,就可以在其上利用Compose 来进行编排管理。
  • Docker Compose 是一个用来定义和运行复杂应用的 Docker工具。 一个使用Docker 容器的应用, 通常由多个容器组成。Compose 是用于定义和运行多容器 Docker应用程序的工具。通过Compose, 可以使 用YML 文件来配置应用程序需要的所有服务,不再需要使用 shell 脚本来启动容器,使用一个命令就可以从 YML 文件配置中创建并启动所有服务。
  • Compose允许用户通过一个 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的 应用容器为一个项目(project), 即通过配置文件来管理多个 Docker 容器。在配置文件中,所有的 容 器 通 过 services 定义,使用docker-compose 脚本来启动、停止、重启应用,并管理应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
  • YAML的配置文件后缀为.yml, 如 docker-compose.yml。YAML是“YAML Aint a Markup Language” 的 缩 写YAML的语法和其他高级语言类似,可以简单表达清单、散列表、标量等数据形态。 YAML使用空白符号缩进和分行来分隔数据,特别适合用来表达或编辑数据结构、各种配置 文件、调试内容、文件大纲。

Compose使用的3个步骤如下:

  1. 使用 Dockerfile定义应用程序的环境。
  2. 使用docker-compose.yml 定义构成应用程序的服务.这样它们可以在隔离环境中一起运行。
  3. 执行docker-compose up 命令来启动并运行整个应用程序。

Compose模板文件是一个定义服务、网络和数据卷的 YAML 文件。Compose模板文件默认路 径是当前目录下的 docker-compose.yml,可以使用.yml 或.yaml作为文件扩展名。Docker Compose标准模板文件应该包含 version 、services 、networks三大部分,最关键的是services和networks两个部分。docker-compose.yml 的配置示例如下:

#YAML 配置实例
version:·3'
services:web:build:ports:- “5000:5000”volumes:- .:/code-1ogvolume01:/var/1oglinks:-redisredis:image:redis
volumes:1oqvolume01:

安装 Docker Compose

  • MacOS的 Docker桌面版和 Docker Toolbox已经包括Compose和其他 Docker 应用程序,因此 Mac 用户不需要单独安装 Compose 。
  • Windows的Docker 桌面版和Docker Toolbox已经包括Compose和其他 Docker 应用程序,因此Windows 用户也不需要单独安装 Compose。Docker的安装可以参阅【Docker】进阶之路:(三)Docker 安装。
  • Linux上安装Docker Compose,可以从 GitHub 上下载对应的二进制包来使用。
    官方github版本地址:https://github.com/docker/compose/releases

在这里插入图片描述

运行以下命令以下载Docker Compose的当前稳定版本:

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
sudo chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
  • 要安装其他版本的Compose, 请替换中间的版本号(v2.23.3)。

看出是否下载成功:

[root@docker ~]# ll $DOCKER_CONFIG/cli-plugins
总用量 58304
-rwxr-xr-x. 1 root root 59699273 1210 13:38 docker-compose
[root@docker ~]# 

测试是否安装成功:

[root@docker ~]# docker-compose -v
Docker Compose version v2.23.3
[root@docker ~]# 
  • 注意:对于 alpine, 需要以下依赖包:py-pip 、python-dev 、libffi-dev 、openssl-dev libc-dev 和 make。

模板文件语法

默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过image指令来指定镜 像,也可以通过build指令(需要Dockerfile)来自动构建。

docker-compose.yml 语法说明

image

指定为镜像名称或镜像ID。如果镜像不存在,Compose 将尝试从网络拉取该镜像,例如:

  • image:ubuntu
  • image:orchardup/postgresql
  • image:a4bc65fd
    指定服务的镜像名,若本地不存在,则 Compose 会去仓库拉取这个镜像:
services:web:image:nginx
build

指定 Dockerfile 所在文件夹的路径:

build:./dir

Compose 将会利用这个路径自动构建镜像,然后使用该镜像。

command

覆盖容器启动后默认执行的命令:

command:bundle exec thin -p 3000 

links

链接到其他服务容器,使用服务名称(同时作为别名)或服务别名(SERVICE:ALIAS) 都可以:

links:-db-db:database-redis

注意: 使用别名时会自动在服务器中的/etc/hosts里创建,比如172.17.2.186 db, 相应的环 境变量也会被创建。

external_links

链接到 docker-compose.yml 外部的容器,甚至不是Compose管理的容器。参数格式和links
似。external_links 文件内容如下:

-redis_1-project_db_1:mysql-pr oject_db_2:sqlserver

ports

ports 用于暴露端口信息。格式如下:

宿主机器端口:容器端口(HOST:CONTAINER)

或者仅仅指定容器的端口(宿主机将会随机分配端口)也可以:

ports:- "3306"        #指定容器端口- "8080:80" #宿主机端口:容器端口- "127.0.0.1:8090:8001"

注 意:当使用HOST:CONTAINER 格式来映射端口时,如果使用的容器端口小于60,则可 能会得到错误的结果,因为YAML 将会解析xx:yy这种数字格式为六十进制,所以建议采用字符串格式。

expose

暴露端口,与posts 不同的是expose 只能暴露端口而不能映射到主机,只供外部服务连接使用;
仅可以指定内部端口为参数。

expose:- "8000"

volumes

设置数据卷挂载的路径。格式为:

宿主机路径:容器路径(host:container)

还可以加上访问模式(host;container:ro), 其中ro 就是 readonly 的意思,表示只读模式。

volumes:- /var/lib/mysql:/var/lib/mysql- /configs/mysql:/etc/configs/:ro

volunes_from

挂载另一个服务或容器的所有数据卷。

volunes_from:- services_name- container_name

environment

设置环境变量,可以是数组或字典两种格式。
如果只给定变量的名称,则会自动加载它在Compose主机上的值,可以用来防止泄露不必要的数据 。

environment:- RACK_ENV=development- SESSION_SECRET

env_file

从文件中获取环境变量,可以为单独的文件路径或列表。如果通过docker-compose-f FILE指定了模板文件,则env_file中路径会基于模板文件路径。如果有变量名称与 environment 指令冲突,以后者为准。

env_file:.env 
env_file:- ./common.env- ./apps/web.env- /opt/secrets.env

环境变量文件中每一行都必须有注释,支持#开头的注释行:

#common.env:Set       Rails/Rack       environment
RACK_ENV=development

extends

基于已有的服务进行服务扩展。比如,已经有了一个webapp服务,模板文件为common.yml:

#common.yml
webapp:
build: ./webapp
environment:- DEBUG=false- SEND_EMAILS=false

编写一个新的 development.yml文件,使用common.yml 中的webapp 服务进行扩展。
development.yml 文件内容如下:

web:
extends:
file: common.yml
service:webapp:ports:- "8080:80"links:- dbenvelopment:- DEBUG=truedb:image: mysql:5.7

后者会自动继承 common.yml 中 的webapp 服务及相关的环境变量。

net

设置网络模式,使用和docker client 命令的–net 参数一样的值。

#容器默认链接的网络,是所有 Docker  安装时都默认安装的docker0  网络
net:"bridge"
#容器定制的网格栈
net:"none"
#使用另一个容器的网络配置
net:"container:[name or id]"
#在宿主机网络栈上添加一个容器,容器中的网络配置会与宿主机的一样
net:"host"

Docker 会为每个节点自动创建三个网络:
● bridge:容器默认连接的网络,是所有Docker安装时都默认安装的docker0网 络 。
● none:容器定制的网络栈。
● host:在宿主机网络栈上添加一个容器,容器中的网络配置会与宿主机的一样。

pid

和宿主机系统共享进程命名空间,打开该选项的容器可以通过进程id 来相互访问和操作。

pid: "host"

dns

配置 DNS 服务器,可以是一个值,也可以是一个列表。

dns: 8.8.8.8
dns:- 8.8.8.8- 114.114.114.114

cap_add,cap_drop

添加或放弃容器的Linux 能力(Capability)。

cap_add:- ALL
cap_drop:- NET_ADMIN- SYS_ADMIN

dns_search

配置 DNS 搜索域,可以是一个值也可以是一个列表。

dns_search: example.com
dns_search:- domain1.example,com\ - domain2.example.comworking_dir,entrypoint,user,hostname,domainname,mem_limit,privileged,restart,stdin_open,tty,cpu_shares

这些都和 docker run命令支持的选项类似。

cpu_shares: 73
working_dir: /code
entrypoint: /code/entrypoint,sh
user: postgresql
hostname: foo
domainname: foo.com
mem_limit:1000000000
privileged: true
stdin_open: true
tty: true

healthcheck

健康检查,这是非常有必要的,等服务准备好以后再上线,避免更新过程中出现短暂的无法访 问的问题。

healthcheck:test: ["CMD","curl","-f","http://localhost/alive"]interval: 5stimeout: 3s

其实大多数情况下健康检查的规则都会写在 Dockerfile 中:

FROM nginx
RUN apt-get update 6k apt-get install -y curl sk rm -rf /var/lib/apt/lists/*
HEALTHCHECK --interval=5s --timeout=3s CMD curl -f http://localhost/alive || exit 1

depends_on

依赖的服务,优先启动,示例如下:

depends_on:- redis

deploy

都在这个节点下部署相关的配置,示例如下:

deploy:mode:  replicated replicas: 2restart_policy:condition: on-failuremax_attempts: 3update_config:delay: 5sorder: start-first #默认为 stop-first,推荐设置先启动新服务再终止旧的resources:limits:cpus: "0.50"memory: 1g
deploy:mode: global # 不推荐全局模式(仅个人意见)placement:constraints: [node.role == manager]

若非特殊服务,以上各节点的配置就能够满足大部分部署场景了。

完整docker-compose.yml 示例如下:

version: '3.5'
services:nacos1:restart: alwaysimage: nacos/nacos-server:$(NACOS_VERSION)container_name: nacos1privileged: trueports:- "8001:8001"- "8011:9555"deploy:resources:limits:cpus: '0.50'memory: 1024Menv_file:- ./nacos.envenvironment:NACOS_SERVER_IP: $(NACOS_SERVER_IP_ 1)NACOS_APPLICATION_PORT: 8001NACOS_SERVERS: $(NACOS_SERVERS)volumes:- ./logs_01/:/home/nacos/logs/- ./data_01/:/home/nacos/data/- ./config/:/home/nacos/config/networks:- ha-network-overlaynacos2:restart: alwaysimage: nacos/nacos-server:$(NACOS_VERSION)container_name: nacos2privileged: trueports:- "8002:8002"- "8012:9555"deploy:resources:limits:cpus: '0.50'memory: 1024Menv_file:- ./nacos.envenvironment:NACOS_SERVER_IP: $(NACOS_SERVER_IP_2)NACOS_APPLICATION_PORT: 8002NACOS_SERVERS: $(NACOS_SERVERS)volumes:- ./1ogs_02/:/home/nacos/1ogs/- ./data_02/:/home/nacos/data/- ./config/:/home/nacos/config/networks:- ha-network-overlaynacos3:restart: alwaysimage: nacos/nacos-server:$(NACOS_VERSION)container_name: nacos3privileged: trueports:- "8003:8003"- "8012:9555"deploy:resources:limits:cpus: '0.50'memory: 1024Menv_file:- ./nacos.envenvironment:NACOS_SERVER_IP: $(NACOS_SERVER_IP_3)NACOS_APPLICATION_PORT: 8003NACOS_SERVERS: $(NACOS_SERVERS)volumes:- ./1ogs_03/:/home/nacos/1ogs/- ./data_03/:/home/nacos/data/- ./config/:/home/nacos/config/networks:ha-network-overlay:external: true

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

使用 Compose 对 Docker 容器进行编排管理时,需要编写 docker-compose.yml文件,初次编写时容易遇到一些比较低级的问题,导致执行 docker-compose up 时出现解析 YAML 文件错误。

比较常见的原因是YAML对缩进的严格要求。YAML文件换行后的缩进不允许使用tab键字符, 只能使用空格,而空格的数量也有要求。经过实际测试,发现每一行增加一个空格用于缩进是正常的。

YAML是一种标记语言,它可以很直观地展示数据序列化格式,可读性高。YAML类似于XML数据描述语言,但语法比XML简单得多。YAML数据结构通过缩进来表示,连续的项目通过减号 来表示,键值对用英文冒号分隔,数组用方括号([])括起来hash用花括号({})括起来。

使用 YAML时需要注意以下事项:

  • 使用缩进表示层级关系时,不支持tab键缩进,只能使用空格键缩进。
  • 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
  • 通常开头缩进2个空格。
  • 字符后缩进1个空格,如冒号(:)空格、逗号(,)空格、横杠(-)空格、文本之间 的空格。
  • 用#号注释。
  • 如果包含特殊字符用单引号(!')引起来,
  • 布尔值必须用双引号(”“)引起来,
  • 区分大小写。
  • 字符串可以不用引号标注。

Docker Compose 常用命令

docker-compose

命令格式为:

docker-compose [-f<arg?…] [options] [COMMAND] [ARGS…]

选项包括:

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

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: 停止容器时的超时时间(默认为10s)。
  • –remove-orphans: 删除服务中没有在Compose 文件中定义的容器。
  • -scale SERVICE=NUM:设置服务运行容器的个数,将覆盖在 Compose 中通过scale指定的参数,见下文scale命令的讲解。

docker-compose up 启动所有服务。这个命令一定要记住,每次启动都要用到。
docker-compose up -d 在后台启动所有服务。-f 指定使用的Compose模板文件,默认为docker-compose.yml, 可以多次指定。

docker-compose -f docker-compose.yml up -d

docker-compose ps

命令格式为:

docker-compose ps [options][SERVICE…]

docker-compose ps 命令可以列出项目中目前的所有容器。

docker-compose stop

命令格式为:

docker-compose stop [options][SERVICE…]

选项包括:

  • -t,–timeout TIMEOUT: 停止容器时的超时时间(默认为10s)。
    docker-compose stop 命令用于停止正在运行的容器,可以通过 docker-compose start 命令再次启动。

docker-compose -h

命令格式为:

docker-compose -h 

命令用于查看帮助。

docker-compose down

用于停止和删除容器、网络、数据卷、镜像。
命令格式为:

docker-compose down [options]

选项包括:

  • –rmi type:删除镜像,类型必须是:1. all, 删除Compose文件中定义的所有镜像;2. local, 删除镜像名为空的镜像。
  • -v,–volumes:删除已经在 Compose 文件中定义的和匿名的附在容器上的数据卷。
  • –remove-orphans:删除组合文件中未定义的服务的容器。
  • -t,–timeout TIMEOUT:以秒为单位指定关机超时时间,默认值为10s。

docker-compose logs

命令格式为:

docker-compose logs [options][SERVICE…]

默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过–no-color
选项来关闭颜色。
选项包括:

docker-compose build

用于构建(重新构建)项目中的服务容器。
命令格式为:

docker-compose build [options] [-build-arg key=val…] [SERVICE…] 

选项包括:

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

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

docker-compose pull

用于拉取服务依赖的镜像。
命令格式为:

docker-compose pull [options][SERVICE…]

选项包括:

  • –ignore-pull-failures:忽略拉取镜像过程中的错误。
  • –parallel:多个镜像同时拉取。
  • –quiet:拉取镜像过程中不打印进度信息。

docker-compose restart

用于重启项目中的服务。
命令格式为:

docker-compose restart [options][SERVICE…]

选项包括:

  • -t,–timeout TIMEOUT: 指定重启前停止容器的超时时间(默认为10s)。

docker-compose rm

用于删除所有(停止状态的)服务容器。
命令格式为:

docker-compose rm [options][SERVICE…]

选项包括:

  • -f,–force: 强制直接删除,包括非停止状态的容器。
  • -s,–stop : 在删除容器前先停止容器。
  • -v,–volumes: 删除容器所挂载的数据卷。
    使用此命令时,推荐先执行 docker-compose stop 命令来停止容器。

docker-compose start

用于启动已经存在的服务容器。
命令格式为:

docker-compose start [SERVICE…]

docker-compose run

用于在指定服务上执行一个命令。
命令格式为:

docker-compose run [options] [-v VOLUME…] [-p PORT…] [-e KEY=VAL…] [SERVICE] [COMMAND][ARGS…]

例如在指定容器上执行一个 ping 命令:

docker-compose run ubuntu ping www.baidu.com

docker-compose scale

用于删除所有(停止状态的)服务容器。
命令格式为:

docker compose scale [options] [SERVICE=NUM…]

通过 service=num的参数设置指定服务运行容器的个数,例如设置指定服务 web 、db 运行的容 器个数;

docker-compose scale web=3 db=2

选项包括:

  • -t,–timeout TIMEOUT:关闭超时时间,默认为10s。

提示:官方提示不推荐使用此命令。请使用带有-scale选项的up 命令。但需要注意,up 与-scale 选项一起使用时,与scale 命令有一些细微的差异,因为它包含了up 命令的行为。例如:

docker-compose up -scale web=2 db=3

docker-compose pause

用于暂停一个服务容器。
命令格式为:

docker-compose pause [SERVICE…]

docker-compose kill

用于通过发送 SIGKILL信号来强制停止服务容器。支持通过-s 参数来指定发送的信号,例如通 过如下指令发送SIGINT 信号:

docker-compose  kill -s SIGINT

命令格式为:

docker-compose kill [options][SERVICE…]

docker-compose config

用于验证并查看 Compose 文件配置。
命令格式为:

docker-compose config [options]

选项包括:

  • –resolve-image-digests:将镜像标签标记为摘要。
  • -q,quiet:只验证配置,不输出。当文件配置正确时,不输出任何内容;当文件配置 错误时,输出错误信息。
  • –services:打印服务名, 一行一个。
  • –volumes:打印数据卷名, 一行一个。

docker-compose create

用于为服务创建容器。
命令格式为:

docker-compose create [options][SERVICE…]

选项包括:

  • -force-recreate: 重新创建容器,即使配置和镜像没有改变。不兼容-no-recreate 参数。
  • –no-recreate:如果容器已经存在,则不需要重新创建。不兼容-force-recreate 参数。
  • –no-build:不创建镜像,即使缺失。
  • –build:创建容器前,生成镜像。

docker-compose exec

命令格式为:

docker-compose exec [options]SERVICE COMMAND [ARGS…]

选项包括:

  • -d:分离模式,后台运行命令。
  • –privileged:获取特权。
  • –user USER: 指定运行的用户。
  • -T: 禁用分配 TTY, 默认docker-compose exec分配 TTY。
  • –index=index: 当一个服务拥有多个容器时,可通过该参数登录该服务下的任何服务,例如:docker-compose exec --index=1 web /bin/bash ,Web 服务中包含多个容器。

docker-compose port

用于显示某个容器端口所映射的公共端口。
命令格式为:

docker-compose port [options] SERVICE PRIVATE PORT

选项包括:

  • –protocol-proto:指定端口协议,TCP ( 默认值 ) 或者UDP。
  • –index=index:如果同意服务存在多个容器,那么指定命令对象容器的序号(默认为1)

docker-compose push

用于推送服务依赖的镜像。
命令格式为:

docker-compose push [options][SERVICE…]

选项包括:

  • –ignore-push-failures: 忽略推送镜像过程中的错误。

docker-compose unpause

用于恢复处于暂停状态中的服务。
命令格式为:

docker-compose unpause [SERVICE…]

docker-compose version

用于打印版本信息。
命令格式为:

docker-compose version

Docker Compose常用命令汇总清单

  • docker-compose COMMAND --help:获得一个命令的帮助。o docker-compose up-d nginx:构建并启动nignx容器。
  • docker-compose exec nginx bash:登录到nginx容器中。
  • docker-compose down:此命令将会停止up命令所启动的容器,并移除网络。
  • docker-compose ps:列出项目中目前的所有容器。o docker-compose restart nginx:重新启动nginx容器。
  • docker-compose build nginx:构建镜像。
  • docker-compose build --no-cache nginx:不带缓存构建镜像。
  • docker-compose top:查看各个服务容器内运行的进程。
  • docker-compose logs-fnginx:查看nginx的实时日志。
  • docker-compose images:列出Compose文件包含的镜像。
  • docker-compose config:验证文件配置,当文件配置正确时,不输出任何内容配置错误时,输出错误信息。
  • docker-compose events–json nginx:以JSON的形式输出nginx容器的Docker日
  • docker-compose pause nginx:暂停nignx容器。
  • docker-compose unpause nginx:恢复ningx容器。
  • docker-compose rm nginx:删除容器(删除前必须关闭容器,执行stop)。
  • docker-compose stop nginx:停止nignx容器。
  • docker-compose start nginx:启动nignx容器。
  • docker-compose restart nginx:重启项目中的nignx容器。
  • docker-compose run-no-deps -rm php-fpm php-v:在php-fpm中不启动关联容器,并当容器执行完成php-v后删除容器。

使用Docker Compose构建Web应用

通过docker-compose命令构建一个在Docker中运行的基于Python Flask框架的Web应用。
Docker 镜像提供了Python或Redis, 不需要重复安装。

1).定义 Python 应用

1.准备项目:

创建目录如下:

[root@docker ~]# mkdir -p composetest
[root@docker ~]# mkdir -p composetest/src
[root@docker ~]# mkdir -p composetest/docker

目录结构如下:

[root@docker ~]# tree composetest
composetest
├── docker
│   └── docker-compose.yml
├── Dockerfile
└── src├── app.py└── requirements.txt2 directories, 4 files
[root@docker ~]# 

2.创建app.py文件

在文件最下放添加

[root@docker ~]# vi composetest/src/app.py 
[root@docker ~]# cat composetest/src/app.py 
from flask import Flask
from redis import Redisapp = Flask(__name__)
redis = Redis(host='redis',port=6379)@app.route('/')
def  hello():count= redis.incr('hits')return 'Hello World!I have been seen {} times.\n'.format(count)if __name__  == "__main__":app.run(host="0.0.0.0",debug=True)
[root@docker ~]# 

3.创建Python需求文件composetest/src/requirements.txt

[root@docker ~]# vi composetest/src/requirements.txt 
[root@docker ~]# cat composetest/src/requirements.txt 
flask
redis
[root@docker ~]# 

2).创建容器的Dockerfile文件

上面已经介绍了示例项目的目录结构,现在可在 composetest/目录中创建 Dockerfile 文件:若不使用默认的 docker-compose.yml 文件名:S docker-compose -f server.yml up -d然后在浏览器中输入 http://0.0.0.0:5000/ 查看运行的应用程序。

[root@docker ~]# vi composetest/Dockerfile 
[root@docker ~]# cat composetest/Dockerfile 
FROM python:3.7
COPY src /opt/src
WORKDIR /opt/src
RUN pip install -r requirements.txtCMD ["python", "app.py"]
[root@docker ~]# 

Dockerfile文件描述了如下信息:

  • 从Python 3.7的镜像开始构建一个容器镜像。
  • 复制src(即compose_test/src)目录到容器中的/opt/src目录。
  • 将容器的工作目录设置为/opt/src(通过docker exec -it your docker_container_id bash进入容器后的默认目录)。
  • 安装Python依赖关系。
  • 将容器的默认命令设置为python app.py。

3).定义docker-compose脚本

在composetest/docker/目录下创建docker-compose.yml文件,并在里面定义服务,内容如下:

[root@docker ~]# vi composetest/docker/docker-compose.yml 
[root@docker ~]# cat composetest/docker/docker-compose.yml 
version: "3"
services:web:build: ../ports:- "5000:5000"volumes:- ../src:/opt/srcredis:image: "redis:3.0.7"
[root@docker ~]# 

该Compose文件定义了两个服务,即定义了web和redis两个容器。

  1. web容器
    使用当前docker-compose.yml文件所在目录的上级目录(compose_test/Dockerfile)中的Dockerfile构建镜像。将容器上的暴露端口5000映射到主机上的端口5000。这里我们使用Flask Web服务器的默认端口5000。
  2. redis容器
    redis服务使用从Docker Hub提取的官方redis镜像3.0.7版本。

4).使用Compose构建并运行应用程序

在composetest/docker/目录下执行docker-compose.yml文件:

[root@docker docker]# docker-compose up
[+] Running 2/0✔ Container docker-redis-1  Created                                                                                                                                                                                                                                                                                                   0.0s ✔ Container docker-web-1    Created                                                                                                                                                                                                                                                                                                   0.0s 
Attaching to redis-1, web-1
redis-1  | 1:C 10 Dec 08:18:14.652 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis-1  |                 _._                                                  
redis-1  |            _.-``__ ''-._                                             
redis-1  |       _.-``    `.  `_.  ''-._           Redis 3.0.7 (00000000/0) 64 bit
redis-1  |   .-`` .-```.  ```\/    _.,_ ''-._                                   
redis-1  |  (    '      ,       .-`  | `,    )     Running in standalone mode
redis-1  |  |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
redis-1  |  |    `-._   `._    /     _.-'    |     PID: 1
redis-1  |   `-._    `-._  `-./  _.-'    _.-'                                   
redis-1  |  |`-._`-._    `-.__.-'    _.-'_.-'|                                  
redis-1  |  |    `-._`-._        _.-'_.-'    |           http://redis.io        
redis-1  |   `-._    `-._`-.__.-'_.-'    _.-'                                   
redis-1  |  |`-._`-._    `-.__.-'    _.-'_.-'|                                  
redis-1  |  |    `-._`-._        _.-'_.-'    |                                  
redis-1  |   `-._    `-._`-.__.-'_.-'    _.-'                                   
redis-1  |       `-._    `-.__.-'    _.-'                                       
redis-1  |           `-._        _.-'                                           
redis-1  |               `-.__.-'                                               
redis-1  | 
redis-1  | 1:M 10 Dec 08:18:14.653 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis-1  | 1:M 10 Dec 08:18:14.653 # Server started, Redis version 3.0.7
redis-1  | 1:M 10 Dec 08:18:14.653 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis-1  | 1:M 10 Dec 08:18:14.653 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis-1  | 1:M 10 Dec 08:18:14.653 * DB loaded from disk: 0.000 seconds
redis-1  | 1:M 10 Dec 08:18:14.653 * The server is now ready to accept connections on port 6379
web-1    |  * Serving Flask app 'app'
web-1    |  * Debug mode: on
web-1    | WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
web-1    |  * Running on all addresses (0.0.0.0)
web-1    |  * Running on http://127.0.0.1:5000
web-1    |  * Running on http://172.18.0.3:5000
web-1    | Press CTRL+C to quit
web-1    |  * Restarting with stat
web-1    |  * Debugger is active!
web-1    |  * Debugger PIN: 692-582-753
web-1    | 192.168.40.1 - - [10/Dec/2023 08:18:18] "GET / HTTP/1.1" 200 -
web-1    | 192.168.40.1 - - [10/Dec/2023 08:18:18] "GET /favicon.ico HTTP/1.1" 404 -
web-1    | 192.168.40.1 - - [10/Dec/2023 08:18:22] "GET / HTTP/1.1" 200 -

若是要后台运行:s docker-compose up -d
若不使用默认的 docker-compose.yml 文件名:S docker-compose -f server.ym up -d
黄色部分是文件名
使用更新的 Compose 文件构建应用程序,运行以下命令:

docker-compose  up  -d

使用 docker-compose ps 来查看当前正在运行的内容:

[root@docker docker]# docker-compose up -d
[+] Running 2/2✔ Container docker-redis-1  Started                                                                                                                                                                                                                                                                                                   0.0s ✔ Container docker-web-1    Started                                                                                                                                                                                                                                                                                                   0.0s 
[root@docker docker]# docker-compose  ps
NAME             IMAGE         COMMAND                   SERVICE   CREATED         STATUS         PORTS
docker-redis-1   redis:3.0.7   "docker-entrypoint.s…"   redis     8 minutes ago   Up 6 seconds   6379/tcp
docker-web-1     docker-web    "python app.py"           web       8 minutes ago   Up 6 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp
[root@docker docker]# 

停止docker-compoer

[root@docker docker]# docker-compose down 
[+] Running 3/3✔ Container docker-redis-1  Removed                                                                                                                                                                                                                                                                                                   0.2s ✔ Container docker-web-1    Removed                                                                                                                                                                                                                                                                                                   0.3s ✔ Network docker_default    Removed                                                                                                                                                                                                                                                                                                   0.2s 
[root@docker docker]# 

5).访问我们的网站看看

在这里插入图片描述

相关文章:

【Docker】进阶之路:(十二)Docker Composer

【Docker】进阶之路&#xff1a;&#xff08;十二&#xff09;Docker Composer Docker Compose 简介安装 Docker Compose模板文件语法docker-compose.yml 语法说明imagecommandlinksexternal_linksportsexposevolumesvolunes_fromenvironmentenv_fileextendsnetpiddnscap_add,c…...

MES安灯管理:优化生产监控的重要工具

一、MES安灯管理的概念 MES安灯管理是一种基于物理安灯和数字化管理的生产异常管理工具。它通过物理安灯和数字化系统的结合&#xff0c;实现对生产异常的实时监控和及时反馈&#xff0c;从而帮助企业快速响应和解决生产异常&#xff0c;提高生产效率和产品质量。 二、MES系统…...

Unity中URP Shader 的 SRP Batcher

文章目录 前言一、SRP Batcher是什么二、SRP Batcher的使用条件1、可编程渲染管线2、我们用URP作为例子3、URP 设置中 Use SRP Batcher开启4、使 SRP Batcher 代码路径能够渲染对象5、使着色器与 SRP Batcher 兼容&#xff1a; 三、不同合批之间的区别BuildIn Render Pipeline下…...

十四 动手学深度学习v2计算机视觉 ——转置矩阵

文章目录 基本操作填充、步幅和多通道再谈转置卷积不填充&#xff0c;步幅为1填充为p&#xff0c;步幅为1填充为p&#xff0c;步幅为s 基本操作 填充、步幅和多通道 填充&#xff1a; 与常规卷积不同&#xff0c;在转置卷积中&#xff0c;填充被应用于的输出&#xff08;常规卷…...

Spark-Streaming+Kafka+mysql实战示例

文章目录 前言一、简介1. Spark-Streaming简介2. Kafka简介二、实战演练1. MySQL数据库部分2. 导入依赖3. 编写实体类代码4. 编写kafka主题管理代码5. 编写kafka生产者代码6. 编写Spark-Streaming代码7. 查看数据库8. 代码下载总结前言 本文将介绍一个使用Spark Streaming和Ka…...

C++改写为C

stm使用中&#xff0c;经常能见到CPP的示例&#xff0c;这些是给arduino&#xff0c;esp32用的&#xff0c;stm32 也支持cpp但是你就想用c怎么办呢&#xff0c;比如我在新手的时候&#xff1a;&#xff1a; 这个双冒号就难住了英雄好汉 比如这是个cpp的 如果类不多的情况下 改写…...

抖去推--短视频剪辑、矩阵无人直播saas营销工具一站式开发

抖去推是一款短视频剪辑和矩阵无人直播SAAS营销工具一站式开发平台。它提供了以下功能和特点&#xff1a; 1. 短视频剪辑&#xff1a;抖去推提供了一系列的剪辑工具&#xff0c;包括自动剪辑、特效制作、配音配乐等&#xff0c;可以帮助用户轻松制作出高质量的短视频。 2. 矩阵…...

HBase 详细图文介绍

目录 一、HBase 定义 二、HBase 数据模型 2.1 HBase 逻辑结构 2.2 HBase 物理存储结构 ​2.3 数据模型 2.3.1 Name Space 2.3.2 Table 2.3.3 Row 2.3.4 Column 2.3.5 Time Stamp 2.3.6 Cell 三、HBase 基本架构 架构角色 3.1 Master 3.2 Region Server 3.3 Zo…...

Hanlp自然语言处理如何再Spring Boot中使用

一、HanLP HanLP (Hankcs NLP) 是一个自然语言处理工具包&#xff0c;具有功能强大、性能高效、易于使用的特点。HanLP 主要支持中文文本处理&#xff0c;包括分词、词性标注、命名实体识别、依存句法分析、关键词提取、文本分类、情感分析等多种功能。 HanLP 可以在 Java、Py…...

MySQL 是什么?

MySQL官方网站&#xff08;http://www.mysql.com/&#xff09;提供关于MySQL软件的最新信息。 MySQL是一个数据库管理系统。 数据库是一种结构化的数据集合。它可以是从简单的购物清单到图片库&#xff0c;再到企业网络中的大量信息等任何形式。要添加、访问和处理存储在计算…...

yarn link使用(npm link)

使用场景 前端开发中&#xff0c;两个项目相互依赖时&#xff0c;使用yarn link(npm link)链接 例如&#xff1a;A项目依赖于本司自己的UI库B&#xff0c;当我们修改了UI库B中的某些代码时&#xff0c;需本地验证后再发布到私服&#xff0c;此时A项目与UI项目B通过yarn link连…...

Docker容器讲解

Docker是一个开源的容器化平台&#xff0c;可以用来在轻量级容器中打包、部署和运行应用程序。Docker的基本概念包括容器、镜像、仓库和服务。 容器是一个独立运行的应用程序包&#xff0c;包括应用程序及其依赖项、运行时环境和配置等。容器相互隔离&#xff0c;可以在不同的…...

three.js模拟太阳系

地球的旋转轨迹目前设置为了圆形&#xff0c;效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div c…...

WPF仿网易云搭建笔记(1):项目搭建

文章目录 前言项目地址动态样式组合样式批量样式覆盖Prism新建UserControler修改Material Design 笔刷收放列表可以滚动的StackPanel列表点击展开或折叠 实现效果 前言 今天接着继续细化代码&#xff0c;把整体框架写出来 项目地址 WPF仿网易云 Gitee仓库 动态样式 【WPF】C#…...

DDOS 攻击是什么?有哪些常见的DDOS攻击?

DDOS简介 DDOS又称为分布式拒绝服务&#xff0c;全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载&#xff0c;导致服务不可用&#xff0c;从而造成服务器拒绝正常流量服务。就如酒店里的房间是有固定的数量的&#xff0c;比如一个酒店有50个房间&am…...

未来应用从何而来:认知力延伸、边界突破、回归云与产业

文 | 智能相对论 作者 | 沈浪 或许&#xff0c;谁也没想到未来应用来的如此之快&#xff0c;现如今传统应用从开发到体验&#xff0c;已经进入了一个前所未有的颠覆性改革阶段。 不久前&#xff0c;美国人工智能公司OpenAI举办开发者大会。在现场&#xff0c;公司创始人Sam …...

vue零基础

vue 与其他框架的对比 框架设计模式数据绑定灵活度文件模式复杂性学习曲线生态VueMVVM双向灵活单文件小缓完善ReactMVC单向较灵活all in js大陡丰富AngularMVC双向固定多文件较大较陡&#xff08;Typescript&#xff09;独立 更多对比细节&#xff1a;vue 官网&#xff1a;ht…...

html中一个div中平均一行分配四个盒子,可展开与收起所有的盒子

html中一个div中平均一行分配四个盒子&#xff0c;可展开与收起所有的盒子 1.截图显示部分 2.代码展示部分 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…...

Python虚拟环境指南:告别依赖地狱

一、背景 在SAAS&#xff08;软件即服务&#xff09;平台中&#xff0c;用户使用自行定制的Python脚本已经成为司空见惯的做法&#xff0c;然而&#xff0c;由于不同用户对Python三方库的需求各不相同&#xff0c;而底层服务器一般只安装了一个Python版本。举例来说&#xff0…...

【Jeecg Boot 3 - 第二天】第2节 前后端docker部署云服务器

更新完成&#xff0c;点击下面章节进入 一、后端部署 1.1、后端 docker-compose 部署 JEECGBOOT 1.2、jar 包和 lib 依赖分离&#xff0c;部署包缩小100倍 二、前端部署 2.1、nginx 部署 JEECGBOOT VUE3 2.2、开启Nginx压缩&#xff0c;解决前端访问慢问题...

2020年第九届数学建模国际赛小美赛A题自由泳解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 A题 自由泳 原题再现&#xff1a; 在所有常见的游泳泳姿中&#xff0c;哪一种最快&#xff1f;哪个冲程推力最大&#xff1f;在自由泳项目中&#xff0c;游泳者可以选择他们的泳姿&#xff0c;他们通常选择前面的爬行。然而&#xff0c;游泳…...

双端队列和优先级队列

文章目录 前言dequedeque底层设计迭代器设计 priority仿函数数组中的第k个最大元素优先级队列模拟实现pushpop调整仿函数存储自定义类型 前言 今天要介绍比较特殊的结构&#xff0c;双端队列。 还有一个适配器&#xff0c;优先级队列。 deque 栈的默认容器用了一个deque的东西…...

c#读取CSV文件跟Excel导入成DataTble

1.读取CSV文件 /// <summary>/// 读取CSV文件/// </summary>/// <param name"fileName">文件路径</param>public static DataTable ReadCSV(string fileName){DataTable dt new DataTable();FileStream fs new FileStream(fileName, FileM…...

Python编程技巧 – 单字符函数

Python编程技巧 – 单字符函数 Python Programming Skills – Single Character Function By JacksonML 0. 前言 Python有其内建(built-in)的一系列函数&#xff0c;其中&#xff0c;有两个函数为长度为一的字符设计。这样的函数是单字符函数&#xff0c;尽管它们操作的对象…...

xcode-文件

IOSDeviceSupoprt 共享缓存库 当你使用新的 iOS 设备连接到 Xcode 时&#xff0c;Xcode 会自动下载并存储相应版本的设备支持文件。 每个 iOS 版本都有一个对应的设备支持文件集&#xff0c;这些文件包含有关设备架构和操作系统的信息&#xff0c;以便 Xcode 能够正确地调试和…...

云原生之深入解析网络服务Istio、eBPF和RSocket Broker

一、服务治理 ① “服务治理”简介 在微服务时代&#xff0c;一个复杂的应用程序被分解为多个组件化、协作和连接的单元&#xff0c;服务往往会承担越来越多的业务责任&#xff0c;这使得服务治理的难度前所未有&#xff0c;仅仅依靠微服务框架级的治理是不够的&#xff0c;构…...

文件系统和磁盘调度

文件系统 概述 文件系统&#xff1a;一种用于持久性存储的系统抽象 在存储器上&#xff1a;组织、控制、导航、访问和检索数据大多数计算机包含文件系统 文件&#xff1a;文件系统中一个单元的相关数据在操作系统中的抽象 文件系统功能 分配文件磁盘空间 管理文件块管理空…...

C++ stringOJ练习题

目录 把字符串转换成整数 反转字符串 字符串中的第一个唯一字符 字符串最后一个单词的长度 找出字符串中第一个只出现一次的字符 字符串相加 字符串最后一个单词长度 字符串相乘 反转字符串3 反转字符串2 验证回文串 把字符串转换成整数 通过遍历字符串并逐位转换…...

解决问题:ImportError: cannot import name ‘_update_worker_pids‘

在复现一些较早年份文献时&#xff0c;网络架构是较早的Pytorch模型&#xff0c;现阶段的高版本不兼容&#xff0c;所以就得安装比如低版本的torch0.4.0以解决问题。 目录 一、问题1.1 问题分析 二、解决办法2.1 Pytorch安装2.2 torchvision安装2.3 测试是否安装成功 三、总结…...

【面试总结】Java面试题目总结(一)

&#xff08;以下仅为个人见解&#xff0c;如果有误&#xff0c;欢迎大家批评并指出错误&#xff0c;谢谢大家&#xff09; 1.项目中的验证码功能是如何实现的&#xff1f; 第一步&#xff1a;在项目的pom.xml文件中导入 EasyCaptcha 的依赖&#xff1b; <dependency>…...