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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的