Docker - 使用 compose 编排服务

2024-06-11 07:08

本文主要是介绍Docker - 使用 compose 编排服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

入门示例

一般步骤

1、定义Dockerfile,方便迁移到任何地方;
2、编写docker-compose.yml文件;
3、运行docker-compose up启动服务

示例

准备工作:提前下载好镜像:

docker pull mysql
docker pull wordpress

需要新建一个空白目录,例如wptest。新建一个docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '2'
services:
     web:
       image: wordpress:latest
       links:
         - db
       ports:
         - "8002:80"
       environment:
         WORDPRESS_DB_HOST: db:3306
         WORDPRESS_DB_PASSWORD: 123456
     db:
       image: mysql
       environment:
         - MYSQL_ROOT_PASSWORD=123456

 

 

以上命令的意思是新建db和wordpress容器。等同于:

$ docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql
$ docker run --name some-wordpress --link db:mysql -p 8002:80 -d wordpress

注意,如果你是直接从fig迁移过来的,且weblinks- db:mysql,这里会提示没有给wordpress设置环境变量,这里需要添加环境变量WORDPRESS_DB_HOSTWORDPRESS_DB_PASSWORD

好,我们启动应用:

 

1
2
3
4
5
# docker-compose up
Creating wptest_db_1...
Creating wptest_wordpress_1...
Attaching to wptest_db_1, wptest_wordpress_1
wordpress_1 | Complete! WordPress has been successfully copied to / var /www/html

 

 

 

就成功了。浏览器访问 http://localhost:8002(或 http://host-ip:8002)即可。

默认是前台运行并打印日志到控制台。如果想后台运行,可以:

docker-compose up -d

服务后台后,可以使用下列命令查看状态:

1
2
3
4
5
6
7
8
9
10
11
# docker-compose ps
        Name                      Command               State          Ports        
-----------------------------------------------------------------------------------
figtest_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp            
figtest_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8002->80/tcp
# docker-compose logs
Attaching to wptest_wordpress_1, wptest_db_1
db_1        | 2016-10-4T14:38:46.98030Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
db_1        | 2016-10-4T14:38:46.99974Z 0 [Note] mysqld (mysqld 5.7.15) starting as process 1 ...
db_1        | 2016-10-4T14:38:46.27191Z 0 [Note] InnoDB: PUNCH HOLE support available

 

停止服务:

 

1
2
3
# docker-compose stop
Stopping wptest_wordpress_1...
Stopping wptest_db_1...

 

 

 

重新启动服务:

docker-compose restart

docker-compose.yml参考

每个docker-compose.yml必须定义image或者build中的一个,其它的是可选的。

image

指定镜像tag或者ID。示例:

image: redis
image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd

注意,在version 1里同时使用imagebuild是不允许的,version 2则可以,如果同时指定了两者,会将build出来的镜像打上名为image标签。

build

用来指定一个包含Dockerfile文件的路径。一般是当前目录.。Fig将build并生成一个随机命名的镜像。

注意,在version 1bulid仅支持值为字符串。version 2里支持对象格式。

build: ./dirbuild:
 context: ./dir  dockerfile: Dockerfile-alternate  args:  buildno: 1

context为路径,dockerfile为需要替换默认docker-compose的文件名,args为构建(build)过程中的环境变量,用于替换Dockerfile里定义的ARG参数,容器中不可用。示例:


Dockerfile:

ARG buildno
ARG passwordRUN echo "Build number: $buildno"
RUN script-requiring-password.sh "$password"

docker-compose.yml:

build:
  context: .
  args:
 buildno: 1  password: secret build:  context: .  args:  - buildno=1  - password=secret 

command

用来覆盖缺省命令。示例:

command: bundle exec thin -p 3000

command也支持数组形式:

command: [bundle, exec, thin, -p, 3000]

links

用于链接另一容器服务,如需要使用到另一容器的mysql服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同docker run --link。示例:

links:
 - db
 - db:mysql
 - redis

使用了别名将自动会在容器的/etc/hosts文件里创建相应记录:

172.17.2.186  db 172.17.2.186 mysql 172.17.2.187 redis

所以我们在容器里就可以直接使用别名作为服务的主机名。

 

ports

用于暴露端口。同docker run -p。示例:

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

expose

expose提供container之间的端口访问,不会暴露给主机使用。同docker run --expose

expose:- "3000"- "8000"

volumes

挂载数据卷。同docker run -v。示例:

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

volumes_from

挂载数据卷容器,挂载是容器。同docker run --volumes-from。示例:

volumes_from:- service_name- service_name:ro- container:container_name- container:container_name:rw

container:container_name格式仅支持version 2

 

environment

添加环境变量。同docker run -e。可以是数组或者字典格式:

environment:
  RACK_ENV: development
  SESSION_SECRET:environment:  - RACK_ENV=development  - SESSION_SECRET

 

depends_on

用于指定服务依赖,一般是mysql、redis等。
指定了依赖,将会优先于服务创建并启动依赖。

links也可以指定依赖。

 

external_links

链接搭配docker-compose.yml文件或者Compose之外定义的服务,通常是提供共享或公共服务。格式与links相似:

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

注意,external_links链接的服务与当前服务必须是同一个网络环境。

 

extra_hosts

添加主机名映射。

extra_hosts:- "somehost:162.242.195.82"- "otherhost:50.31.209.229"

将会在/etc/hosts创建记录:

162.242.195.82  somehost 50.31.209.229 otherhost

 

extends

继承自当前yml文件或者其它文件中定义的服务,可以选择性的覆盖原有配置。

extends:file: common.ymlservice: webapp

service必须有,file可选。service是需要继承的服务,例如webdatabase

 

net

设置网络模式。同docker的--net参数。

net: "bridge"
net: "none" net: "container:[name or id]" net: "host"

 

dns

自定义dns服务器。

dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9

 

cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir

这些命令都是单个值,含义请参考docker run。

cpu_shares: 73
cpu_quota: 50000
cpuset: 0,1user: postgresql working_dir: /code domainname: foo.com hostname: foo ipc: host mac_address: 02:42:ac:11:65:43 mem_limit: 1000000000 mem_limit: 128M memswap_limit: 2000000000 privileged: true restart: always read_only: true shm_size: 64M stdin_open: true tty: true

 

命令行参考

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
$ docker-compose
Define and run multi-container applications with Docker.
Usage:
   docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
   docker-compose -h|--help
Options:
   -f, --file FILE             Specify an alternate compose file ( default : docker-compose.yml)
   -p, --project-name NAME     Specify an alternate project name ( default : directory name)
   --verbose                   Show more output
   -v, --version               Print version and exit
   -H, --host HOST             Daemon socket to connect to
   --tls                       Use TLS; implied by --tlsverify
   --tlscacert CA_PATH         Trust certs signed only by this CA
   --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
   --tlskey TLS_KEY_PATH       Path to TLS key file
   --tlsverify                 Use TLS and verify the remote
   --skip-hostname-check       Don 't check the daemon' s hostname against the name specified
                               in the client certificate ( for example if your docker host
                               is an IP address)
Commands:
   build              Build or rebuild services
   bundle             Generate a Docker bundle from the Compose file
   config             Validate and view the compose file
   create             Create services
   down               Stop and remove containers, networks, images, and volumes
   events             Receive real time events from containers
   exec               Execute a command in a running container
   help               Get help on a command
   kill               Kill containers
   logs               View output from containers
   pause              Pause services
   port               Print the public port for a port binding
   ps                 List containers
   pull               Pulls service images
   push               Push service images
   restart            Restart services
   rm                 Remove stopped containers
   run                Run a one-off command
   scale              Set number of containers for a service
   start              Start services
   stop               Stop services
   unpause            Unpause services
   up                 Create and start containers
   version            Show the Docker-Compose version information

 

 

 

批处理脚本

# 关闭所有正在运行容器
docker ps | awk  '{print $1}' | xargs docker stop # 删除所有容器应用 docker ps -a | awk '{print $1}' | xargs docker rm # 或者 docker rm $(docker ps -a -q) 

这篇关于Docker - 使用 compose 编排服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050481

相关文章

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el