当前位置:   article > 正文

Docker-compose项目介绍及命令说明_docker-compose expose

docker-compose expose

目录

一、前言

二、命令对象格式和选项:

三、命令使用说明

四、compose模版文件 

1、模版文件名称:docker-compose.yml,

2、build:

五、Docker-compose使用注意点


一、前言

看书用这个链接 Docker-compose项目介绍及命令说明可复制:
Docker Compose负责快速在集群中部署分布式应用
安装自动补全插件:
允许用户通过一个单独docker-comose.yml模版文件来定义一组相关联的应用容器为一个项目
compose重要概念:
服务:一个应用容器,实际可包括若干运行相同镜像的容器实例。
项目:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义
一个项目可以由多个服务(容器)关联而成,compose面向项目进行管理
运行compose项目:docker-compose up

二、命令对象格式和选项:

sa执行  docker-compose [COMMAND] --help  或者  docker-compose help [COMMAND]  可以查看具体某个命令的使用格式。
docker-compose  命令的基本的使用格式是
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
  • -f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
  • -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
  • --x-networking 使用 Docker 的可拔插网络后端特性
  • --x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
  • --verbose 输出更多调试信息。
  • -v, --version 打印版本并退出。
例如:docker-compose -f docker-compose.yml up

三、命令使用说明

build:
构建(重新构建)项目中的服务容器
docker-compose build [options] [SERVICE...]
服务容器一旦构建便会带上一个标记名,如web项目中的db容器变为web_db
选项包括:
  • --force-rm 删除构建过程中的临时容器。
  • --no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。
  • --pull 始终尝试通过 pull 来获取更新版本的镜像。
options操作命令:
config:验证compose文件格式是否正确,若正确显示配置,若格式错误则报错。
exec:进入指定的容器
down:此命令会停止up命令启动的容器,并移除网络。
help:获得一个命令帮助
images:列出compose文件包含的镜像
kill:
格式为  docker-compose kill [options] [SERVICE...]
通过发送  SIGKILL  信号来强制停止服务容器。
支持通过  -s  参数来指定发送的信号,例如通过如下指令发送  SIGINT  信号。
$ docker-compose kill -s SIGINT
logs:
格式为  docker-compose logs [options] [SERVICE...]
查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过  --no-color  来关闭颜色。
pause:
格式为  docker-compose pause [SERVICE...]
暂停一个服务容器。
port:
格式为  docker-compose port [options] SERVICE PRIVATE_PORT
打印某个容器端口所映射的公共端口。
选项:
  • --protocol=proto 指定端口协议,tcp(默认值)或者 udp。
  • --index=index 如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。
ps:
格式为  docker-compose ps [options] [SERVICE...]
列出项目中目前的所有容器。
选项:
  • -q 只打印容器的 ID 信息。
pull:
格式为  docker-compose pull [options] [SERVICE...]
拉取服务依赖的镜像。
选项:
  • --ignore-pull-failures 忽略拉取镜像过程中的错误。
push
推送服务依赖的镜像到 Docker 镜像仓库。
restart
格式为  docker-compose restart [options] [SERVICE...]
重启项目中的服务。
选项:
  • -t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。
rm
格式为  docker-compose rm [options] [SERVICE...]
删除所有(停止状态的)服务容器。推荐先执行  docker-compose stop  命令来停止容器。
选项:
  • -f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
  • -v 删除容器所挂载的数据卷。
run
格式为  docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
在指定服务上执行一个命令。
默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。
该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照配置自动创建。
两个不同点:
  • 给定命令将会覆盖原有的自动运行命令;
  • 不会自动创建端口,以避免冲突。
如果不希望自动启动关联的容器,可以使用  --no-deps  选项,例如
$ docker-compose run --no-deps web python manage.py shell
将不会启动 web 容器所关联的其它容器。
选项:
  • -d 后台运行容器。
  • --name NAME 为容器指定一个名字。
  • --entrypoint CMD 覆盖默认的容器启动指令。
  • -e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量。
  • -u, --user="" 指定运行容器的用户名或者 uid。
  • --no-deps 不自动启动关联的服务容器。
  • --rm 运行命令后自动删除容器,d 模式下将忽略。
  • -p, --publish=[] 映射容器端口到本地主机。
  • --service-ports 配置服务端口并映射到本地主机。
  • -T 不分配伪 tty,意味着依赖 tty 的指令将无法运行。
scale:
格式为  docker-compose scale [options] [SERVICE=NUM...]
设置指定服务运行的容器个数。
通过  service=num  的参数来设置数量。例如:
$ docker-compose scale web=3 db=2
将启动 3 个容器运行 web 服务,2 个容器运行 db 服务。
一般的,当指定数目多于该服务当前实际运行容器,将新创建并启动容器;反之,将停止容器。
选项:
-t, --timeout TIMEOUT  停止容器时候的超时(默认为 10 秒)
start
格式为  docker-compose start [SERVICE...]
启动已经存在的服务容器。
stop
格式为  docker-compose stop [options] [SERVICE...]
停止已经处于运行状态的容器,但不删除它。通过  docker-compose start  可以再次启动这些容器。
选项:
  • -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
top
查看各个服务容器内运行的进程。
unpause
格式为  docker-compose unpause [SERVICE...]
恢复处于暂停状态中的服务。
up
格式为  docker-compose up [options] [SERVICE...]
该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
链接的服务都将会被自动启动,除非已经处于运行状态。
默认情况, docker-compose up  启动的容器都在前台,控制台将会同时打印所有容器的输出信息
crtl-c 停止命令,所有容器会停止
如果使用  docker-compose up -d ,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项
如果用户不希望容器被停止并重新创建,可以使用  docker-compose up --no-recreate 这样将只会启动处于停止状态的容器,而忽略已经运行的服务
如果用户只想重新部署某个服务,可以使用  docker-compose up --no-deps -d <SERVICE_NAME>  来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。
选项:
  • -d 在后台运行服务容器。
  • --no-color 不使用颜色来区分不同的服务的控制台输出。
  • --no-deps 不启动服务所链接的容器。
  • --force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
  • --no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
  • --no-build 不自动构建缺失的服务镜像。
  • -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

四、compose模版文件 

1、模版文件名称:docker-compose.yml,

格式:YAML

  1. version:'3'
  2. services:
  3. webapp:
  4. images:
  5. ports:
  6. -"80:80 "
  7. volumes:
  8. -"/data"

每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。

如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置

2、build:

1、指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)

  1. version: '3'
  2. services:
  3. webapp:
  4. build: ./dir

2、可用context指令指定Dockerfile所在文件夹路径

使用dockerfile指令指定Dockerfile文件名

使用arg指令指定构建镜像时的变量

  1. version: '3'
  2. servives:
  3. webapp:
  4. build:
  5. context: ./dir
  6. dockerfile:Docker-alternate
  7. args:
  8. buildno:1

3、使用cache_from指定构建镜像的缓存

  1. build:
  2. context: .
  3. cache_from:
  4. -alpine:latest

4、cap_add,cap_drop:指定容器的内核能力分配

让容器拥有所有能力:

  1. cap_add:
  2. -ALL
  3. 去掉NET_ADMIN:
  4. cap_drop:
  5. -NET_ADMIN

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

command:echo "hello"

6、cgroup_parent:指定父cgroup组,即继承该组的资源限制

例如,创建了一个 cgroup 组名称为 cgroups_1。

cgroup_parent: cgroups_1

7、container_name:指定容器名称。默认使用项目名称_服务名称_序号

cotainer_name:docker-web-container

注:指定容器名称后,该服务将无法进行扩展,因为Docker不允许多个容器具有相同的名称

8、devices:指定设备映射关系

  1. devices:
  2. -" /dev/ttyUSB1:/dev/ttyUSB0"

9、depends_on:解决容器的依赖,启动问题

例如先启动redis db再启动web

  1. version: '3'
  2. serivices:
  3. web:
  4. build: .
  5. depends_on:
  6. -db
  7. -redis
  8. redis:
  9. images:redis
  10. db:
  11. images:postgres

注:web服务不会等待redis db完全启动后才启动

10、dns:自定义DNS服务,可以是一个值,也可以是一个列表

  1. dns: 8.8.8.8
  2. dns:
  3. -8.8.8.8
  4. -114.114.114.114

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

  1. dns_search: example.com
  2. dns_search:
  3. -domain1.example.com
  4. -domain2.example.com

12、tmpfs:挂载一个tmpfs文件系统到容器

  1. tmpfs: /run
  2. tmpfs:
  3. - /run
  4. - /tmp

13、env_file:从环境中获取环境变量,可以为单独文件路径或列表

如果通过 docker-compose -f FILE 方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。

如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。

  1. env_file: .env
  2. env_file:
  3. - ./common.env
  4. - ./apps/web.env
  5. - /opt/secrets.env
  6. PROG_EMV=development

14、environment:设置环境变量,可以使用数组或字典两种格式

只给定名称的变量会自动获取运行compose主机上对应变量的值,可以用来防止泄漏不必要的数据

environment:

RACK_ENV:deveploment

SESSION_SECRET

如果变量名称或者值中用到true|false,yes|no等布尔表达式词汇,最好放在引号里

15、expose:暴露端口,但不映射到宿主机,只被连接的服务访问

只可以指定内部端口为参数

  1. expose:
  2. -"3000"
  3. -"8000"

16、链接到docker-compose.yml外部容器,甚至并非compose管理的外部容器

  1. external_links:
  2. -redis_1
  3. -project_db_1:mysql
  4. -project_db_1:postgresql

17、extra_hosts

类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息。

extra_hosts: - "googledns:8.8.8.8" - "dockerhub:52.1.157.61"

会在启动后的服务容器中 /etc/hosts 文件中添加如下两条条目。

8.8.8.8 googledns52.1.157.61 dockerhub

18、healthcheck

通过命令检查容器是否健康运行

healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 1m30s timeout: 10s retries: 3

19、image

指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

image: ubuntuimage: orchardup/postgresql

20、labels

为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息。

labels: com.startupteam.description: "webapp for a startup team" com.startupteam.department: "devops department" com.startupteam.release: "rc3 for v1.0"

21、logging

配置日志选项。

logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123"

目前支持三种日志驱动类型。

driver: "json-file"driver: "syslog"driver: "none"

options 配置日志驱动的相关参数。

options: max-size: "200k" max-file: "10"

22、network_mode

设置网络模式。使用和 docker run 的 --network 参数一样的值。

network_mode: "bridge"network_mode: "host"network_mode: "none"network_mode: "service:[service name]"network_mode: "container:[container name/id]"

23、networks

配置容器连接的网络。

version: "3"services: some-service: networks: - some-network - other-networknetworks: some-network: other-network:

24、pid

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

pid: "host"

25、ports

暴露端口信息。

使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"

注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。

26、secrets

存储敏感数据,例如 mysql 服务密码。

version: "3.1"services:mysql: image: mysql environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password secrets: - db_root_password - my_other_secretsecrets: my_secret: file: ./my_secret.txt my_other_secret: external: true

27、security_opt

指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)。例如配置标签的用户名和角色名。

security_opt: - label:user:USER - label:role:ROLE

28、stop_signal

设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM 停止容器。

stop_signal: SIGUSR1

29、ulimits

指定容器的 ulimits 限制值。

例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。

ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000

30、volumes

数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。

该指令中路径支持相对路径。

volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro

五、Docker-compose使用注意点

在使用Docker Compose时,需要注意以下几点:

  1. 版本兼容性:确保使用的Docker Compose版本与Docker引擎版本兼容。可以查看官方文档了解哪些版本是兼容的。

  2. 环境变量配置:在docker-compose.yml文件中,可以设置环境变量,这些环境变量可以在容器中使用。但是,需要注意环境变量的引用方式。

  3. 网络配置:Docker Compose 默认创建一个私有网络,容器之间可以通过容器名称来互相通信。如果需要与外部进行通信,可以通过端口映射来实现。

  4. 数据卷挂载:使用-v选项或--mount选项可以将数据卷挂载到容器中。需要注意数据卷对应的位置必须存在,否则会导致容器启动失败。

  5. 容器依赖关系:在Docker Compose中,可以指定容器之间的依赖关系。如果容器A依赖容器B,必须先启动容器B,再启动容器A。

  6. 缩放服务:Docker Compose可以通过指定副本数的方式来扩展服务。需要注意,副本数必须小于等于可用的物理资源。

  7. 指定容器命令:通过command选项可以指定容器启动时运行的命令。需要注意,这个命令将覆盖容器中的默认命令。

  8. 环境变量文件:可以将环境变量保存到文件中,并在docker-compose.yml文件中通过env_file选项进行引用。

  9. 多环境支持:可以通过指定不同的docker-compose文件来支持多个环境的部署。比如,docker-compose-dev.yml和docker-compose-prod.yml。

  10. 容器重启策略:可以通过restart选项指定容器出现故障时的重启策略。常用的策略有no、always、on-failure和unless-stopped等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/180450
推荐阅读
相关标签
  

闽ICP备14008679号