docker-compose详解

docker-compose详解1 安装 官方 curl Lhttps github com docker compose releases download 1 25 1 docker compose uname s uname m o usr local bin docker composechmod x usr local bin docker compose 或者使用包管理工具

1 安装:

官方:

curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose

或者使用包管理工具:

apt-get install docker-compose

2 使用场景

docker-compose用来单机上编排容器(定义和运行多个容器,使容器能互通)

Eg:前端和后端部署在一台机器上,现在直接通过编写docker-compose文件对多个服务(可定义依赖,按顺序启动服务)同时进行启动/停止/更新

注:

docker-compose将所管理的容器分为3层结构:project  service  container

docker-compose.yml组成一个project,project包括多个service,每个service定义了容器运行的镜像(或构建镜像),网络端口,文件挂载,参数,依赖等,每个service包括同一个镜像多个容器实例

即 project 包含 service ,service 包含 container 

3 编写docker-compose.yml

官网地址:https://docs.docker.com/compose/compose-file/

version: '3' services: back: image: backService:1.0 container_name: back environment: - name=tom - DB_PATH=jdbc:sqlite:/data/ns.db restart: always privileged: true ports: - "9000:9000" networks: - "net" volumes: - "/root/k3s.kube.config:/k3s.kube.config" - "/root/data:/data" - "/etc/network/interfaces:/etc/network/interfaces" front: image: front:1.0 container_name: front restart: always ports: - "10087:80" networks: - "net" volumes: - "/root/nginx.conf:/etc/nginx/nginx.conf" networks: net: driver: bridge

version:指定 docker-compose.yml 文件的写法格式

services:多个容器集合environment:环境变量配置,可以用数组或字典两种方式

environment: RACK_ENV: "development" SHOW: "ture" ------------------------- environment: - RACK_ENV="development" - SHOW="ture"

image:指定服务所使用的镜像

version: '2' services: redis: image: redis:alpine

expose:定义容器用到的端口(一般用来标识镜像使用的端口,方便用ports映射

expose: - "3000" - "8000"

ports:定义宿主机端口和容器端口的映射,可使用宿主机IP+宿主机端口进行访问 宿主机端口:容器端口

ports: # 暴露端口信息 - "宿主机端口:容器暴露端口" - "5000" - "8081:8080"

注:仅指定容器端口时,宿主机将会随机选择端口 

volumes:卷挂载路径,定义宿主机的目录/文件和容器的目录/文件的映射  宿主机路径:容器路径

volumes: - "/var/lib/mysql" - "hostPath:containerPath" - "root/configs:/etc/configs" 

depend_on: 规定service加载顺序,例如数据库服务需要在后台服务前运行

extra_hosts:类似于docker里的–add-host参数 配置DNS域名解析(域名和IP的映射)

extra_hosts: - "googledns:8.8.8.8" - "dockerhub:52.1.157.61"

相当于在容器种的/etc/hosts文件里增加

8.8.8.8 googledns 52.1.157.61 dockerhub

restart: always :配置重启,docker每次启动时会启动该服务

restart: always

privileged: true :开启特权模式

privileged: true

user: root :指定容器运行的用户名

user: root

links:将指定容器连接到当前连接,可以设置别名,已废弃,推荐使用networks

networks

可参考:https://www.cnblogs.com/jsonhc/p/7823286.html

networks:
  net1:
    driver: bridge




front里可以直接用back替换IP访问back

logging:日志服务

driver:默认json-file,可选syslog

logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123"

network_mode:设置网络模式

network_mode: "bridge" network_mode: "host" network_mode: "none" network_mode: "service:[service name]" network_mode: "container:[container name/id]"

bridge:默认,需要单独配置ports映射主机port和服务的port,并且开启了容器间通信

host:和宿主机共享网络,比如service是8081端口,无需配置ports,直接可以用主机IP:8081访问

 

cap_add cap_drop:赋予/删除 容器某些能力

可运行 man 7 capabilities 查看所有能力

build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 路径

注:如果指定build同时也指定image,那么会从build里构建,镜像的名字和tag将取image指定的

build: . image: webapp:tag

command:覆盖容器启动后默认执行的命令

command: bundle exec thin -p 3000 ---------------------------------- command: [bundle,exec,thin,-p,3000]

 

4 docker-compose命令:

官网地址:https://docs.docker.com/compose/reference/overview/

注意:

以下都需要在docker-compose.yml所在目录下执行,且名字就是默认的docker-compose.yml,否则需要加上 -f yml地址

Eg:  docker-compose -f /usr/docker/docker-compose1.yml ps

* 表示常用

* docker-compose pull:拉取服务里定义的镜像

* docker-compose ps :列出project所有运行容器(容器名 = 目录名_service_index  index表示容器序数,从1开始) 

Eg:

docker-compose详解

docker-compose build:构建/重新构建所有镜像

当某个service的Dockerfile改变时,即镜像发生改变需要重新生成时,如果仅仅是docker-compose.yml改变,只需要up重新启动project即可

docker-compose start [serviceName]:启动已存在但停止的所有service

(可选)serviceName:表示启动某一个service

* docker-compose up -d(相当于 build + start  构建(容器)并启动(容器)整个project的所有service

-d:后台进程

–scale:指定服务运行的容器个数(如果服务有对外的端口就不能指定多个容器,因为端口已经被占用)   Eg:docker-compose up -d –scale web=1 –scale redis=2

docker-compose stop [serviceName]:停止运行的service

(可选)serviceName:表示停止某一个service

docker-compose rm -f [serviceName]:删除已停止的所有service

(可选)serviceName:表示删除已停止某一个service(可以用docker-compose up重新构建service)

-f :删除不在询问

* docker-compose down -v(相当于 stop + rm:停止并移除整个project的所有services

-v :删除挂载卷和volunme的链接

* docker-compose logs [serviceName]:查看服务内所有容器日志输出,

加上serviceName表示输出某一个service的日志

-f:实时输出日志

docker-compose run service command:在某个服务上运行命令

Eg:docker-compose run web ping www.baidu.com

docker-compose详解

* docker-compose exec [serviceName] sh:进入到某个容器

–index:2  :当服务内有多个容器时,需要指定第几个,默认是第一个  Eg:docker-compose exec –index=2 web sh

docker-compose详解

docker-compose restart [serviceName]: 重启服务

docker-compose config验证和查看compose文件

docker-compose images列出所用的镜像

docker-cpmpose scale设置服务个数 Eg:docker-compose scale web=2 worker=3 

docker-compose pause [serviceName]暂停服务

docker-compose unpause [serviceName]恢复服务

常见流程:

启动:创建docker-compose.yaml  ->  docker-compose pull  -> docker-compose up -d

更新:docker-compose down -v -> docker-compose pull -> docker-compose up -d 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219650.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:12
下一篇 2026年3月17日 下午10:12


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号