(转)Docker - 使用 compose 编排服务
在园子里看到了这篇关于 compose 的文章,非常好!!转过来,先附上原文地址
http://www.cnblogs.com/52fhy/p/5991344.html
-----
入门示例
一般步骤
1、定义Dockerfile,方便迁移到任何地方;
2、编写docker-compose.yml文件;
3、运行docker-compose up启动服务
示例
准备工作:提前下载好镜像:
docker pull mysql
docker pull wordpress
需要新建一个空白目录,例如wptest。新建一个docker-compose.yml
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迁移过来的,且
web里links是- db:mysql,这里会提示没有给wordpress设置环境变量,这里需要添加环境变量WORDPRESS_DB_HOST和WORDPRESS_DB_PASSWORD。
好,我们启动应用:
# 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
服务后台后,可以使用下列命令查看状态:
# 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
停止服务:
# 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里同时使用image和build是不允许的,version 2则可以,如果同时指定了两者,会将build出来的镜像打上名为image标签。
build
用来指定一个包含Dockerfile文件的路径。一般是当前目录.。Fig将build并生成一个随机命名的镜像。
注意,在
version 1里bulid仅支持值为字符串。version 2里支持对象格式。
build: ./dir
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
context为路径,dockerfile为需要替换默认docker-compose的文件名,args为构建(build)过程中的环境变量,用于替换Dockerfile里定义的ARG参数,容器中不可用。示例:
Dockerfile:
ARG buildno
ARG password
RUN 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.yml
service: webapp
service必须有,file可选。service是需要继承的服务,例如web、database。
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,1
user: 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
命令行参考
$ 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 编排服务的更多相关文章
- docker之compose 编排项目
一.docker-compose 的介绍 docker-compose是一种容器编排工具,可以将多个docker容器关联部署.通过yaml文件,可以描述应用的架构,如使用什么镜像.数据卷.网络.绑定服 ...
- Docker之Compose服务编排
Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...
- (转)Docker之Compose服务编排
转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过 ...
- 使用Docker Compose编排Spring Cloud微服务
文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...
- 使用Docker Compose编排微服务
一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低.维护量比较大. 所以我们可以使用Docker Compose来轻松.高效地管理容器. 一.安装 ...
- Docker(二十六)-Docker Compose编排容器
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- Docker系列之(五):使用Docker Compose编排容器
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- 使用Docker compose编排Laravel应用
前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...
- docker compose 编排
Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...
随机推荐
- spring3: AOP 之切面实例化模型 ——跟我学spring3
所谓切面实例化模型指何时实例化切面. Spring AOP支持AspectJ的singleton.perthis.pertarget实例化模型(目前不支持percflow.percflowbelow ...
- 包嗅探和包回放 —tcpdump、tcpreplay--重放攻击
攻击方式:tcpdump 进行嗅探,获取报文消息:然后用tcpreplay回放攻击 arp欺骗可以使用 arpspoof kali linux有这三个工具 转载地址https://www.cnblog ...
- WPF 通过 CommandParameter 传递当前窗体到 ViewModel
在应用 Command 模式中,需要在View上点击 一个按钮,需要将当前窗体作为参数传递为 command 两种方式传递当前窗体1.通过窗体名称(假设窗体名称为 ThisWindow) < ...
- css: 基础一
1.display有哪些值?说明他们的作用 @1.block:设定元素为块级元素,占据一整行,可设置宽高. @2.inline-block: 设定元素行内块元素,可设置宽高,一行能显示多个. @3.i ...
- react: typescript-webpack项目基本配置
1.webpack.config.js basic const webpack = require('webpack'); const autoprefixer = require('autopref ...
- C++11中提供了std::bind
再来看看std::bind C++11中提供了std::bind.bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的. bind的思想实际上是一种延迟计算的思想,将可调用对象保存 ...
- 深入理解java虚拟机-第七章
第7章 虚拟机类加载机制 类的加载的时机 加载 Loading, 连接 Linking(验证 Verfiication, 准备Preparation, 解析 Resolution) 初始化 Initi ...
- Fedora14使用yum安装mysql
linux下使用yum安装mysql 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mys ...
- Adobe Fireworks CS6是一款集网页图片设计、制作与编辑为一体的专业软件
Adobe Fireworks CS6是一款集网页图片设计.制作与编辑为一体的专业软件,它不仅可以轻松制作出各种动感的Gif.动态按钮.动态翻转等网络图片,还可以轻松实现大图切割,让网页加载的图片显示 ...
- C# 程序部署、调试时间长的解决办法
最近在做数控折弯机项目时,VS2008环境下采用C#..NET Compact Framework开发WinCE.Windows Mobile程序时,编译项目非常慢,看着进度条慢慢刷,有时候需要几分钟 ...