linux安装docker-compose 方法一
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
安装docker-compose方法二
CentOS: yum install epel-release -y yum install python-pip -y Ubuntu: apt-get install python-pip -y # 通用命令 pip --version pip install --upgrade pip pip install -U -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose docker-compose version
参考文档:https://docs.docker.com/compose/install/#install-compose
docker-compose常用命令讲解
以官方提供的examples为例
#定义compose的版本,有些参数高版本有,低版本谬 version: "3" #定义服务,可以多个 services: #具体的服务名,其他的服务可以通过该服务名来访问 redis: #第一这个服务使用的镜像一个镜像的版本,默认版本latest,建议不要使用latest image: redis:alpine #定义暴露的端口,若写成6379:6379/tcp则表示将宿主机的6379转发到容器的6379,写成6379或6379/tcp表示docker随机分配一个宿主机端口给容器内的6379 ports: - "6379" #定义网络,frontend为网络名,可以先手动创建,可以使用 aliases为该网络设置别名 networks: - frontend #定义你这个服务的运行方式 deploy: #模式定义,主要两种,全局模式和复制模式(自己翻译的),全局模式将会在所有的Swarm节点上运行一个实例,复制模式则指定运行你在replicas指定的个数。 #也可以理解为容器咋swarm中运行的个数 replicas: 2 #定义服务自动更新的方式 update_config: #定义一次更新容器的个数 parallelism: 2 # 在更新一组之间等待的时间 delay: 10s #定义重启容器的规则, condition: on-failure表示失败立即重启 restart_policy: condition: on-failure #下面只写上面没写过的命令 db: image: postgres:9.4 #定义卷,可以是卷,也可以是目录,可以设置容器内的权限是什么 # 大致格式:src:dest:mode # src: 可以是卷名,宿主机目录等,可以是文件或者目录,若是文件则文件必须存在,否则会是目录的形式挂载 # dest: 容器内的路径,可以是文件可以是目录,若是文件则文件必须存在,否则会是目录的形式挂载 # mode: 权限,只读(ro),可读可写(rw) volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: #定义该server在集群的位置,node.role == manager表示只在manager节点上运行 placement: constraints: [node.role == manager] vote: image: dockersamples/examplevotingapp_vote:before ports: - 5000:80 networks: - frontend #表示服务之间的依赖关系 #作用 :docker-compose up 将以依赖关系启动服务,这里讲先启动redis,再启动vote # docker-compose up SERVICE单独指定时也会根据依赖关系启动redis depends_on: - redis deploy: replicas: 2 update_config: parallelism: 2 restart_policy: condition: on-failure result: image: dockersamples/examplevotingapp_result:before ports: - 5001:80 networks: - backend depends_on: - db deploy: replicas: 1 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure worker: image: dockersamples/examplevotingapp_worker networks: - frontend - backend deploy: mode: replicated replicas: 1 #指定服务标签,这些标签只会在server中设置,不会再容器中设置 labels: [APP=VOTING] restart_policy: condition: on-failure delay: 10s #最大尝试次数 max_attempts: 3 #window:在决定重启是否成功之前等待的时间,默认为立即执行 window: 120s placement: constraints: [node.role == manager] visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" stop_grace_period: 1m30s volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] # 定义这个compose文件中使用的网络 networks: #网络名称,和上文中的保持一致 frontend: backend: # 定义这个compose文件中使用的数据卷 volumes: #数据卷名称,和上文中的保持一致 db-data:
常用命令详解
详情请看官方文档:https://docs.docker.com/compose/compose-file/
build
应用构建是的配置选项
e.g.
build: #指定构建时Dockerfile文件路径或url context: ./dir #使用Dockerfile-alternate代替Dockerfile构建 dockerfile: Dockerfile-alternate #构建参数,只在构建过程中所有的环境变量,在build命令下指定 #可以指定值,如果不指定将使构建环境中的值,详情请看:https://docs.docker.com/compose/compose-file/#args args: buildno: 1
e.g.
build: context: . #构建是需要使用到的镜像列表 cache_from: - alpine:latest - corp/web_app:3.14
e.g.
build: context: . # 标签,向生成的镜像中添加数据 labels: com.example.description: "Accounting webapp" com.example.department: "Finance" com.example.label-with-empty-value: "" build: context: . labels: - "com.example.description=Accounting webapp" - "com.example.department=Finance" - "com.example.label-with-empty-value"
command
覆盖默认的command
command: bundle exec thin -p 3000
或者
command: ["bundle", "exec", "thin", "-p", "3000"]
configs
deploy
3版本中新增功能,用于定义服务运行的配置
详情看官方文档:https://docs.docker.com/compose/compose-file/#deploy
LABELS
3.3新增功能,能够使用VIP和DNS round-robin
LABELS
标签,只会在服务中设置,不会在容器中显示
MODE
模式,有两种global
,replicated
PLACEMENT
定义该节server在集群中的角色
REPLICAS
复制数量
RESOURCES
宿主机资源约束配置,能够限制cup、内存等使用量,可以设置预留空间
UPDATE_CONFIG
更新服务设置,用于轮滚更新
parallelism: 一次更新的数量
delay:每次更新之间的等待时间
failure_action:失败后的策略
devices
depends_on
设置依赖关系,被依赖的服务会先启动
DNS
设置容器的DNS
TMPFS
挂在目录到容器的/tmp
entrypoint
覆盖默认的entrypoint
env_file
通过一个文件设置环境变量,默认文件是 .env,设置的环境变量可以为空会未定义,可以指定多个文件
environment
设置环境变量,直接在compose文件中指定
expose
暴露端口
external_links
不太理解,需要试试
extra_hosts
hosts,在/etc/hosts文件中添加域名解析
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
healthcheck
健康检查
e.g.
healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 1m30s timeout: 10s retries: 3
image
指定构建使用的镜像
logging
服务的日志设置
有"json-file"、"syslog"、"none"三种格式
注意:只有json-file格式可以通过docker-compose up和docker-compose logs 获取到日志,其他的不行
e.g.
logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123" max-size: "200k" max-file: "10"
network_mode
网络模式,有bridge 桥接模式,host 仅主机模式,none 应该是无网络模式,service:[service name]使用和指定service一样的网络模式,container用法同service
network_mode: "bridge" network_mode: "host" network_mode: "none" network_mode: "service:[service name]" network_mode: "container:[container name/id]"
networks
指定加入的网络,该网络可以自己先创建,可以加入多个网络
有bridge、overlay、host、none四种
ALIASES
给网络设置别名
IPV4_ADDRESS, IPV6_ADDRESS
设置IPV4地址,设置IPV6地址,可以只设置其中一个,也可以不设置
ports
暴露的端口
target:容器内的端口
published:公开的端口
protocol:连接协议,可以是tcp和udp
mode:host和ingress两种模式,host在每个节点暴露端口,ingress是swarm模式中的端口,将会被负载均衡(基于轮询)
e.g.
ports: - "3000" - "3000-3005" - "8000:8000" - "9090-9091:8080-8081" - "49100:22" - "127.0.0.1:8001:8001" - "127.0.0.1:5000-5010:5000-5010" - "6060:6060/udp" - target: 80 published: 8080 protocol: tcp mode: host
sysctls
设置内核参数
e.g.
sysctls: net.core.somaxconn: 1024 net.ipv4.tcp_syncookies: 0 sysctls: - net.core.somaxconn=1024 - net.ipv4.tcp_syncookies=0
ulimits
设置ulimits
e.g.
ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000
volumes
挂载主机路径或卷
有三种模式consistent、cached、delegated,consistent是默认模式
e.g.
volumes: # Just specify a path and let the Engine create a volume #只指定一个路径,让docker引擎创建一个卷(匿名卷) - /var/lib/mysql # Specify an absolute path mapping #挂载目录 - /opt/data:/var/lib/mysql # Path on the host, relative to the Compose file #使用相对路径挂载目录 - ./cache:/tmp/cache # User-relative path - ~/configs:/etc/configs/:ro # Named volume #使用命名卷 - datavolume:/var/lib/mysql
restart
重启策略,有4中
restart: "no" restart: always restart: on-failure restart: unless-stopped
卷设置参考信息:https://docs.docker.com/compose/compose-file/#volume-configuration-reference
网络设置参考信息:https://docs.docker.com/compose/compose-file/#network-configuration-reference
配置设置参考信息:https://docs.docker.com/compose/compose-file/#configs-configuration-reference
参考文档:https://docs.docker.com/compose/compose-file/
感谢布小沫大佬的指导