Docker-compose(创建容器)
Docker-compose(创建容器)
样例
version: "2"
services:
spark-dashboard:
build:
context: .
container_name: spark-dashboard
image: docker.io/sitoi/spark-dashboard
environment:
- SPARK_TYPE=master
ports:
- 5000:5000
redis:
image: docker.io/redis:4
ports:
- '6379:6379'
volumes:
- ./db/redis:/data
command: >
--requirepass password
neo4j:
image: docker.io/neo4j:3.3
ports:
- "7474:7474"
- "7687:7687"
volumes:
- ./db/neo4j:/data/
docker-compose 命令
大多数 Compose 命令都是运行于一个或多个服务的,如果服务没有指定,该命令将会应用到所有服务,
如果要获得所有可用信息,使用命令:docker-compose [COMMAND] --help,下面是命令(COMMAND)的说明:
build
创建或者再建服务
服务被创建后会标记为 project_service (比如 composetest_db),
如果改变了一个服务的 Dockerfile 或者构建目录的内容,可以使用 docker-compose build 来重建它
help
显示命令的帮助和使用信息
kill
通过发送 SIGKILL 的信号强制停止运行的容器,这个信号可以选择性的通过,比如:
docker-compose kill -s SIGKINT
logs
显示服务的日志输出
port
为端口绑定输出公共信息
ps
显示容器
pull
拉取服务镜像
rm
删除停止的容器
run
在服务上运行一个一次性命令,比如:
docker-compose run web python manage.py shell
scale
设置为一个服务启动的容器数量,数量是以这样的参数形式指定的:service=num,比如:
docker-compose scale web=2 worker=3
start
启动已经存在的容器作为一个服务
stop
停止运行的容器而不删除它们,它们可以使用命令docker-compose start重新启动起来
up
为一个服务构建、创建、启动、附加到容器
连接的服务会被启动,除非它们已经在运行了
默认情况下,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.yaml 文件说明
每一个定义在 docker-compose.yml 中的服务必须明确指定一个 image 或者 build 选项,
这与 docker run 命令行中输入的是对应相同的,对于docker run,
在 Dockerfile 文件中指定的选项(比如 CMD、EXPOSE、VOLUME、ENV)是默认的,因此不必在 docker-compose.yml 中再指定一次
image
标明 image 的 ID,这个 image ID 可以是本地也可以是远程的,如果本地不存在,Compose 会尝试去 pull 下来
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
build
该参数指定 Dockerfile 文件的路径,该目录也是发送到守护进程的构建环境(这句有点),Compose 将会以一个已存在的名称进行构建并标记,并随后使用这个 image
build: /path/to/build/dir
command
覆盖容器启动后默认执行的命令
command: bundle exec thin -p 3000
links
连接到其他服务中的容器,可以指定服务名称和这个链接的别名,或者只指定服务名称
links:
- db
- db:database
- redis
此时,在容器内部,会在 /etc/hosts 文件中用别名创建一个条目,就像这样:
172.17.2.186 db
172.17.2.186 database
172.17.2.186 redis
环境变量也会被创建,关于环境变量的参数,会在后面讲到
external_links
连接到在这个 docker-compose.yml 文件或者 Compose 外部启动的容器,特别是对于提供共享和公共服务的容器。
在指定容器名称和别名时,external_links 遵循着和 links 相同的语义用法
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
ports
暴露端口信息。
使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
注:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,
因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。
expose
暴露端口而不必向主机发布它们,而只是会向链接的服务 linked service 提供,只有内部端口可以被指定
expose:
- "3000"
- "8000"
volumes
挂载路径最为卷,可以选择性的指定一个主机上的路径(主机:容器),或是一种可使用的模式(主机:容器:ro)
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
volumes_from
从另一个服务或容器挂载它的所有卷。
volumes_from:
- service_name
- container_name
environment
加入环境变量,可以使用数组或者字典,只有一个 key 的环境变量可以在运行 Compose 的机器上找到对应的值,这有助于加密的或者特殊主机的值
environment:
RACK_ENV: development
SESSION_SECRET:
environments:
- RACK_ENV=development
- SESSION_SECRET
env_file
从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过 docker-compose -f FILE 指定了模板文件,则 env_file 中路径会基于模板文件路径。
如果有变量名称与 environment 指令冲突,则以后者为准。
env_file:
- .env
RACK_ENV: development
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
cap_add,cap_drop
加入或者去掉容器能力,查看man 7 capabilities 可以有一张完整的列表
cap_add:
- ALL
cap_drop:
- NET_ADMIN
- SYS_ADMIN
dns_search
自定义DNS搜索范围,可以是单独的值或者一张列表
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.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: 1000000000
privileged: true
restart: always
stdin_open: true
tty: true
Compose 环境变量说明
环境变量已经不再是用来连接服务的推荐方法了,相反,应该使用链接名称(默认情况下是链接服务的名称)作为主机名称来连接,这可以查看 docker-compose.yaml 的更多细节
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
Docker-compose(创建容器)的更多相关文章
- Docker Compose 创建yml 简单试例
Docker Compose 创建yml 简单试例 Docker Compose 文件使用格式版本需要与Docker版本对应可在官网内查找 查找地址:https://docs.docker.com/c ...
- Docker | Compose创建mysql容器
本文通过Docker Compose来创建mysql容器 在linux服务器上创建文件,用于管理容器 mkdir docker-mysql cd docker-mysql vim docker-com ...
- 使用docker compose编排容器
一.安装docker compose 二进制包安装 1.安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可 # curl -L https:/ ...
- Docker学习笔记之使用 Docker Compose 管理容器
0x00 概述 通过之前的介绍,我们已经基本掌握了构建.运行容器的方法,但这还远远不够,由于 Docker 采用轻量级容器的设计,每个容器一般只运行一个软件,而目前绝大多数应用系统都绝不是一个软件所能 ...
- Docker(二十六)-Docker Compose编排容器
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- Docker系列之(五):使用Docker Compose编排容器
1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...
- Docker Compose 多容器应用
Docker Compose是一个用来定义并运行复杂应用程序的工具.用Compose,你可以在一个文件中定义多个容器应用程序,然后只需一条命令就可以完成使其运行所需的所有操作. 一个使用Docker容 ...
- Docker深入浅出系列 | Docker Compose多容器实战
目录 前期准备 Docker Compose是什么 为什么要用Docker Compose Docker Compose使用场景 Docker Compose安装 Compose Yaml文件结构 C ...
- .Net Core微服务入门全纪录(八)——Docker Compose与容器网络
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 前言 上一篇[.Net Core微服务入门全纪录(七)--IdentityServer4-授权认证]中使用IdentityServer4 ...
- Docker Compose之容器编排开发初探
1.前言 Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 是一个用于定义和运行多个 Docker 应用 ...
随机推荐
- vux中XDialog组件,修改weui-mask(半透明遮罩)
场景:XDialog组件的遮罩的透明度是background: rgba(0, 0, 0, 0.6);而期望是75%的透明度: 项目构成:vue,vux 最终实现效果: 思路:首先想到了修改组件下we ...
- Web自动化遇到shadowDOM节点操作(还没试)
近期有同学在做web自动化的时候,发现页面上有些元素,在selenium中无法通过xpath来定位,各种原因找了半天,都没找到解决方案. 最后发现元素在一个叫做shadow-root的节点下面. 如下 ...
- Springboot配置连接两个数据库
背景: 项目中需要从两个不同的数据库查询数据,之前实现方法是:springboot配置连接一个数据源,另一个使用jdbc代码连接. 为了改进,现在使用SpringBoot配置连接两个数据源 实现效果: ...
- jzy3D从入门到弃坑_3使用jzy3D0.9画2D散点图--多条线条
jzy3D从入门到弃坑_3 使用jzy3D0.9画2D散点图--多条线条 觉得有用的话,欢迎一起讨论相互学习~Follow Me 主要思路 将多个线条的二维数组读入Scatter对象 存入到同一个画布 ...
- openshift 使用curl命令访问apiserver
openshift版本:openshift v3.6.173.0.5 使用oc(同kubectl)命令访问apiserver资源的时候,会使用到/root/.kube/config文件中使用的配置. ...
- 【剑指offer】数组在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数. 分析:数组有序,采用二分查找无疑 两种方法,时间复杂度差不多,都是利用二分查找,不过统计k出现的次数有所不同而已 方法1:二分查找k,找到任意一个k的下 ...
- Python之路【第二十三篇】:数据库基础
数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性, ...
- rancher部署kubernets集群
docker的安装 先添加docker源 sudo apt update sudo apt install docker.io docker更换国内镜像 1.配置脚本如下: #!/bin/bashca ...
- Android apk逆向:反编译,回编译,签名,打包。
Android apk逆向:反编译,回编译,签名,打包流程. 第一步: apk 反编译. 1) 打开命令行窗口,输入java -version, 检测当前java版本,若版本较低, 则下载JAVA S ...
- RabbitMQ之消息模式
目的: 消息如何保证100%的投递 幂等性概念 Confirm确认消息 Return返回消息 自定义消费者 前言: 想必知道消息中间件RabbitMQ的小伙伴,对于引入中间件的好处可以起到抗高并发,削 ...