关于docker环境中的docker compose 使用up d命令~

docker-compose示例与命令介绍
时间: 16:13:47
&&&& 阅读:1759
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&一、docker-compose.yml示例
version: ‘2‘
#指定compose版本
image: vmware/harbor-log
#指定镜像名称
container_name: harbor-log
#启动后的容器名称
restart: always
#down掉自动重启
#宿主机和容器关联的目录
- /var/log/harbor/:/var/log/docker/
#映射出来的端口
image: library/registry:2.5.0
container_name: registry
restart: always
- /data/registry:/storage
- ./common/config/registry/:/etc/registry/
environment:
#设置环境变量
- GODEBUG=netdns=cgo
#容器内执行命令
["serve", "/etc/registry/config.yml"]
depends_on:
driver: "syslog"
#指定日志设备的容器
syslog-address: "tcp://127.0.0.1:1514" #日志连接地址
tag: "registry"
YAML 模板文件
默认的模板文件是&docker-compose.yml,其中定义的每个服务都必须通过&image&指令指定镜像或&build&指令(需要 Dockerfile)来自动构建。
其它大部分指令都跟&docker run&中的类似。
如果使用&build&指令,在&Dockerfile&中设置的选项(例如:CMD,&EXPOSE,&VOLUME,&ENV&等) 将会自动被获取,无需在&docker-compose.yml&中再次设置。
指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose&将会尝试拉去这个镜像。
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
指定&Dockerfile&所在文件夹的路径。&Compose&将会利用它自动构建这个镜像,然后使用这个镜像。
build: /path/to/build/dir
覆盖容器启动后默认执行的命令。
command: bundle exec thin -p 3000
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名&(SERVICE:ALIAS)&格式都可以。
- db:database
使用的别名将会自动在服务容器中的&/etc/hosts&里创建。例如:
172.17.2.186
172.17.2.186
172.17.2.187
相应的环境变量也将被创建。
external_links
链接到 docker-compose.yml 外部的容器,甚至 并非&Compose&管理的容器。参数格式跟&links&类似。
external_links:
- project_db_1:mysql
- project_db_1:postgresql
暴露端口信息。
使用宿主:容器&(HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
- "49100:22"
- "127.0.0.1:"
注:当使用&HOST:CONTAINER&格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为&YAML将会解析&xx:yy&这种数字格式为 60 进制。所以建议采用字符串格式。
暴露端口,但不映射到宿主机,只被连接的服务访问。
仅可以指定内部端口为参数
卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
volumes_from
从另一个服务或容器挂载它的所有卷。
volumes_from:
- service_name
- container_name
environment
设置环境变量。你可以使用数组或字典两种格式。
只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过&docker-compose -f FILE&指定了模板文件,则&env_file&中路径会基于模板文件路径。
如果有变量名称与&environment&指令冲突,则以后者为准。
env_file: .env
- ./common.env
- ./apps/web.env
- /opt/secrets.env
环境变量文件中每一行必须符合格式,支持&#&开头的注释行。
# common.env: Set Rails/Rack environment
RACK_ENV=development
基于已有的服务进行扩展。例如我们已经有了一个 webapp 服务,模板文件为&common.yml。
# common.yml
build: ./webapp
environment:
- DEBUG=false
- SEND_EMAILS=false
编写一个新的&development.yml&文件,使用&common.yml&中的 webapp 服务进行扩展。
# development.yml
file: common.yml
service: webapp
environment:
- DEBUG=true
image: postgres
后者会自动继承 common.yml 中的 webapp 服务及相关环节变量。
设置网络模式。使用和&docker client&的&--net&参数一样的值。
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
跟主机系统共享进程命名空间。打开该选项的容器可以相互通过进程 ID 来访问和操作。
pid: "host"
配置 DNS 服务器。可以是一个值,也可以是一个列表。
dns: 8.8.8.8
cap_add, cap_drop
添加或放弃容器的 Linux 能力(Capabiliity)。
- NET_ADMIN
- SYS_ADMIN
dns_search
配置 DNS 搜索域。可以是一个值,也可以是一个列表。
dns_search: example.com
dns_search:
- domain1.example.com
- domain2.example.com
working_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:
privileged: true
restart: always
stdin_open: true
&三、docker-compose基本用法
定义好服务以后,在项目的目录启动这些服务,可以执行:
docker-compose up
这样会启动,在compose文件下定义的所有服务。由于这是第一次启动这个服务,所以可以看到它是creating,也就是去创建相关的东西。首先会创建这个服务使用的网络,这里是叫做「beckdocker_default」的网络,然后是dog和cat的服务,这些网络和服务的名字,默认会加上一个前缀,由于在创建应用的时候没有指定名字,所以会默认使用项目目录的名字,后面还有一个数字的后缀。最后会有一个「Attaching to …」,将网络应用到服务上。
启动成功后,在浏览器访问一下。8080对应的是dog的服务,8081是cat的服务。
回到终端,可以看到服务的访问日志,日志的开头会有服务的名字,标志着日志是从哪个服务来的:
如果希望服务在后台运行,可以使用-d选项(也就是detach):
docker-compose up -d
服务的生命周期
查看正在运行的服务
docker-compose ps
停止一个服务
docker-compose stop [服务名]
如果后面不加服务名,会停止所有的服务。
启动某一个服务
docker-compose start [服务名]
如果后面不加服务名,会启动所有的服务。
查看服务运行的log
docker-compose logs -f
加上-f选项,可以持续跟中服务产生的log。
进入服务容器中
docker-compose exec dog bash
docker-compose rm
注意这个docker-compose rm不会删除应用的网络和数据卷。查看一下网络,可以看到应用创建的网络「beckdocker_default」,如果要删除所有的这些,可以使用:
docker-compose down
会提示我们删除网络 beckdocker_default。
三、Networks
网络决定了服务之间以及服务和外界之间如何去通信,在执行docker-compose up的时候,docker会默认创建一个默认的网络,创建的服务也会默认地属于这个默认网络。服务和服务之间,可以使用服务的名字进行通信。也可以自己创建网络,并将服务属于到这个网络之中,这样服务之间可以相互通信,而外界就不能够与这个网络中的服务通信,可以保持隔离性。
下面登录dog服务去连接cat服务,登录到cat服务连接dog服务:
可以通过服务的名称进行连接。
自定义网络
1、在networks中先定义一个名为animal,类型为bridge的网络:
version: ‘2‘
image: nginx
- "8080:80"
image: nginx
- "8081:80"
driver: bridge
2、让dog和cat服务使用这个网络:
**version: ‘2‘
image: nginx
- "8080:80"
- "animal"
image: nginx
- "8081:80"
- "animal"
driver: bridge
3、再增加一个叫pig的服务,使用默认网络,来体现于自定义网络的隔离性:
version: ‘2‘
image: nginx
- "8080:80"
- "animal"
image: nginx
- "8081:80"
- "animal"
image: nginx
- "8082:80"
- "default"
driver: bridge
4、重新启动应用
5、登录cat服务,尝试去连接dog服务和pig服务:
因为cat与dog同在animal网络,所以可以通过名字连接,而pig在default网络中,所以不能。
四、Volumes
在compose文件中,还可以指定一些有名字的数据卷,让服务去使用。方法是:在与networks同级的地方,添加volumes,接着是数据卷的名字,下面使用driver去指定数据卷的类型。
定义好数据卷后,就将这个数据卷交给一个服务去使用。可以用volumes给服务指定需要使用的数据卷:
& &- nest:/mnt
以dog服务为例,volumes下指定使用的数据卷,冒号左边是数据卷名称,冒号右边是挂载到的docker对应目录位置。接着给cat服务也添加同样的数据卷。
回到终端,执行docker-compose up -d,下面测试一下数据卷:
因为cat与dog服务都使用nest的数据卷,所以在dog中/mnt目录下创建的data1,在cat服务的/mnt目录下可以看到。
指定位置的数据卷
dog和cat都是一个web服务,现在我想将主机的某一个位置当做是服务的一个内容,那么我们可以去创一个指定位置的数据卷。首先可以在当前目录,创建./app/web文件夹,在里面创建个index.html。
编辑内容:
内容编辑好后,就给dog与cat服务指定数据卷,冒号左边是主机上的目录,冒号右边是服务内挂载的目录:
说明:/usr/share/nginx/html 目录是nginx默认主机的根目录,也就是nginx欢迎界面的目录。
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文地址:http://www.cnblogs.com/boshen-hzb/p/6433564.html
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!UDN-企业互联网技术人气社区
后使用快捷导航没有帐号?
浏览&&:&15648
回复&&:&0
回复的帖子
一、Compose安装  在安装compose之前,要确保已经安装了docker1.3或以上版本
  在Linux64位系统上安装compose:  curl -L
... cker-compose-`uname -s`-`uname -m` & /usr/local/bin/-compose
  chmod +x /usr/local/bin/docker-compose&&12
  注:当然可以选择安装command completion(见二)
  uname -s和uname -m中的两个引号是键盘上ESC下面的那个按键
  此时,compose已经安装成功,使用命令docker-compose --version可以查看
  如果是在OS X系统上,则需要执行如下步骤(未亲测):
  二、Compose命令补全
  安装命令补全确保bash completion已经安装,如果当前使用非最小安装的Linux,bash completion已经OK了,如果是在MAC上,可以使用brew install bash-completion来安装
  将completion脚本放在/etc/bash_completion.d/(在MAC上是/usr/local/etc/bash_completion.d/)
  curl -L
... bash/docker-compose & /etc/bash_completion.d/docker-compose1
  在下次登录时,Completion功能已经可以使用
  可用的补全取决于在命令行的输入,会补全:
  * 可用的docker-compose命令
  * 对于某一特别命令可用的选项
  * 在一个给定的上下文条件(比如:具有运行或停止状态的实例的服务或者基于镜像的服务 VS 基于Dockerfile的服务)下,给出有可行的服务名称,对于docker-compose scale,补全服务名称时会自动有”=”附加上去
  * 对于可选项的参数,比如:docker-compose kill -s会完成一些信号,比如SIGUP和SIGUSR1
  拥有了这项功能以后,Compose更快更少输入了呢!Happy working!
  三、Compose使用实例在本例中将会实现启动nginx服务及一个数据卷容器,并将该数据卷容器作为nginx的静态文件
  1.创建compose文件夹   sudo mkdir composetest
  cd composetest
  2.创建docker-compose.yml文件
  touch docker-compose.yml
  vim docker-compose.yml
  在docker-compose.yml中输入以下内容:
  dvc:&&
   image: debian:wheezy
   volumes:&&
  &&- /www:/usr/share/nginx/html:ronginx:
   image: nginx:latest
  &&volumes_from:
&&   - dvc&&ports:
  3.启动
  docker-compose up -d
  注:使用命令docker-compose ps查看运行状况
  四、CLI 说明(docker-compose 命令)大多数Compose命令都是运行于一个或多个服务的,如果服务没有指定,该命令将会应用到所有服务,如果要获得所有可用信息,使用命令:docker-compose [COMMAND] --help,下面是命令(COMMAND)的说明:
  创建或者再建服务
  服务被创建后会标记为project_service(比如composetest_db),如果改变了一个服务的Dockerfile或者构建目录的内容,可以使用docker-compose build来重建它
  显示命令的帮助和使用信息
  通过发送SIGKILL的信号强制停止运行的容器,这个信号可以选择性的通过,比如:
  docker-compose kill -s SIGKINT
  显示服务的日志输出
  为端口绑定输出公共信息
  显示容器
  拉取服务镜像
  删除停止的容器
  在服务上运行一个一次性命令,比如:
  docker-compose run web python manage.py shell
  设置为一个服务启动的容器数量,数量是以这样的参数形式指定的:service=num,比如:
  docker-compose scale web=2 worker=3
  启动已经存在的容器作为一个服务
  停止运行的容器而不删除它们,它们可以使用命令docker-compose start重新启动起来
  为一个服务构建、创建、启动、附加到容器
  连接的服务会被启动,除非它们已经在运行了
  默认情况下,docker-compose up会集中每个容器的输出,当存在时,所有的容器会停止,运行docker-compose up -d会在后台启动容器并使它们运行
  默认情况下,如果服务存在容器的话,docker-compose up会停止并再创建它们(使用了volumes-from会保留已挂载的卷),如果不想使容器停止并再创建的话,使用docker-compose up --no-recreate,如果有需要的话,这会启动任何停止的容器
  选项–verbose
  显示更多输出
  –version
  显示版本号并退出
  -f,–file FILE
  指定一个可选的Compose yaml文件(默认:docker-compose.yml)
  -p,–project-name NAME
  指定可选的项目名称(默认:当前目录名称)
  五、docker-compose.yml命令说明每一个定义在docker-compose.yml中的服务必须明确指定一个image或者build选项,这与docker run命令行中输入的是对应相同的,对于docker run,在Dockerfile文件中指定的选项(比如CMD、EXPOSE、VOLUME、ENV)是默认的,因此不必在docker-compose.yml中再指定一次
  标明image的ID,这个image ID可以是本地也可以是远程的,如果本地不存在,Compose会尝试去pull下来
  image: ubuntu&&image: orchardup/postgresql&&image: a4bc65fd&&123
  该参数指定Dockerfile文件的路径,该目录也是发送到守护进程的构建环境(这句有点),Compose将会以一个已存在的名称进行构建并标记,并随后使用这个image
  build: /path/to/build/dir&&1
  command
  重写默认的命令
  command: bundle exec thin -p 3000&&1
  连接到其他服务中的容器,可以指定服务名称和这个链接的别名,或者只指定服务名称
  links:&&
  - db&&
  - db:database&&
  - redis&&1234
  此时,在容器内部,会在/etc/hosts文件中用别名创建一个条目,就像这样:
  172.17.2.186&&db&&
  172.17.2.186&&database&&
  172.17.2.186&&redis&&123
  环境变量也会被创建,关于环境变量的参数,会在后面讲到
  external_links
  连接到在这个docker-compose.yml文件或者Compose外部启动的容器,特别是对于提供共享和公共服务的容器。在指定容器名称和别名时,external_links遵循着和links相同的语义用法
  external_links:&&
  - redis_1&&
  - project_db_1:mysql&&
  - project_db_1:postgresql&&1234
  暴露端口,指定两者的端口(主机:容器),或者只是容器的端口(主机会被随机分配一个端口)
  注:当以 主机:容器 的形式来映射端口时,如果使容器的端口小于60,那可能会出现错误,因为YAML会将 xx:yy这样格式的数据解析为六十进制的数据,基于这个原因,时刻记得要将端口映射明确指定为字符串
  ports:&&
  - &3000&& &- &&& &- &49100:22&& &- &127.0.0.1:&&&12345
  expose
  暴露端口而不必向主机发布它们,而只是会向链接的服务(linked service)提供,只有内部端口可以被指定
  expose:&&
  - &3000&& &- &8000&&&123
  volumes
  挂载路径最为卷,可以选择性的指定一个主机上的路径(主机:容器),或是一种可使用的模式(主机:容器:ro)
  volumes_from:&&
  - service_name&&
  - container_name&&123
  environment
  加入环境变量,可以使用数组或者字典,只有一个key的环境变量可以在运行Compose的机器上找到对应的值,这有助于加密的或者特殊主机的值
  environment:&&
   RACK_ENV: development&&
&&  SESSION_SECRET:&&
  environments:&&
   - RACK_ENV=development&&
   - SESSION_SECRET&&123456
  env_file
  从一个文件中加入环境变量,该文件可以是一个单独的值或者一张列表,在environment中指定的环境变量将会重写这些值
  env_file:&&
  &&- .env&&RACK_ENV: development&&12345
  网络模式,可以在docker客户端的--net参数中指定这些值
  net: &bridge&&&net: &none&&&net: &container:[name or id]&&&net: &host&&&1234
  自定义DNS服务,可以是一个单独的值或者一张列表
  dns: 8.8.8.8&&
  dns:&&
&&  - 8.8.8.8& & - 9.9.9.9&&1234
  cap_add,cap_drop
  加入或者去掉容器能力,查看man 7 capabilities 可以有一张完整的列表
  cap_add:
   - ALL&&cap_drop:&&
   - NET_ADMIN& & - SYS_ADMIN&&123456
  dns_search
  自定义DNS搜索范围,可以是单独的值或者一张列表
  dns_search: example.com&&dns_search:&&
  &&- dc1.example.com&&
&&  - dc2.example.com&&1234
  working_dir,entrypoint,user,hostname,domainname,mem_limit,privileged,restart,stdin_open,tty,cpu_shares
  上述的每一个都只是一个单独的值,和docker run中对应的参数是一样的
  cpu_shares: 73working_dir: /codeentrypoint: /code/entrypoint.shuser: postgresqlhostname: foodomainname: foo.commem_limit: privileged: truerestart: alwaysstdin_open: truetty: true&&
  六、Compose环境变量说明环境变量已经不再是用来连接服务的推荐方法了,相反,应该使用链接名称(默认情况下是链接服务的名称)作为主机名称来连接,这可以查看docker-compose.yml的更多细节
  Compose使用Docker links来暴露服务的容器给其他的。每一个链接的容器都使用了一组环境变量,这每一组环境变量都是以容器名称的大写字母开头的
  要查看服务可用的环境变量,运行docker-compose run SERVICE env
  name_PORT
  完整URL,如:DB_PORT=tcp//172.17.0.5:5432
  name_PORT_num_protocol
  完整URL,如:DB_PORT_5432_TCP=tcp://172.17.0.5:5432
  name_PORT_num_protocol_ADDR
  容器的IP地址,如:DB_PORT_5432_TCP_ADDR=172.17.0.5
  name_PORT_num_protocol_PORT
  暴露的端口号,如:DB_PORT_5432_TCP_PORT=5432
  name_PORT_num_protocol_PROTO
  协议(tcp或者udp),如:DB_PORT_5432_TCP_PROTO=tcp
  name_NAME
  完全合格的容器名称,如:DB_1_NAME=/myapp_web_1/myapp_db_1
电话:010-
地址:北京市海淀区北清路68号
移动客户端下载
微信公众号:yonyouudn
扫描右侧二维码关注我们
专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041
京公网网备安4
Powered by Discuz!Docker&Compose笔记
Docker Compose概述
Compose的前身是Fig。
Compose是用于在Docker内定义和运行多容器应用程序的工具。使用Compos,可以在一个文件内定义多容器应用程序,然后使用一个命令运行应用。
Compose对开发环境、交付准备服务器(staging
servers)和持续集成(CI)很有帮助,不建议用于生产环境。
使用Compose基本上是三步流程:
通过一个Dockerfile定义应用环境,以便在其他地方复制;
在docker-compose.yml中定义组成应用的服务,因此他们可以在一个隔离的环境一起运行;
最后,运行docker-compose
up,Compose将启动并运行整个应用。
docker-compose.yml大概是这个样子的:
image: redis
Compose包含管理应用整个生命周期的命令:
启动、停止和重建服务
查看运行的服务状态
对运行的服务的日志输出生成数据流
对一个服务运行一次性命令
Docker Compose安装
curl -L https://github.com/docker/compose/releases/download/VERSION_NUM/docker-compose-`uname -s`-`uname -m` & /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
Docker Compose命令
更新整个应用
mryqu$ docker-compose stop
# stop the containers
mryqu$ docker-compose pull
# download updated images
mryqu# docker-compose up -d
# creates new containers and starts them
更新单个服务
mryqu$ docker-compose stop foo
# stop the foo service
mryqu$ docker-compose pull foo
# download foo service
mryqu$ docker-compose up -d foo
# start the new foo service
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我的yaml文件如下:
version: '2'
image: ubuntu:latest
container_name: demo_ubuntu
运行命令:
sudo docker-compose up -d
启动的容器状态为exit 0,不是正常的up状态
来源: Docker 技术问答
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我发现使用redis镜像可以保持up状态,但是ubuntu却不行,不知道有谁能解释一下这种情况
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
加上启动的命令就行了, 比如/bin/bash
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。使用 docker-compose.yml 快速搭建php开发环境
<span type="1" blog_id="1895753" userid='
分享到朋友圈
好的文章,和好友一起分享

我要回帖

更多关于 docker compose build 的文章

 

随机推荐