一、docker compose 入门
1.两个重要概念
项目:(project)有多个服务共同组成一个完整业务单元 定义docker-compose.yml文件中
服务:(service)一个服务对应一个应用容器 在一个项目中可以存在多个服务
2、第一个docker-compose程序
a.创建一个docker-compose.yml文件
b.在配置文件中定义一个项目存在哪些服务
version: "3.0"
services:
tomcat: #服务名唯一
image: tomcat:latest #创建当前这个服务使用镜像是谁
ports:
- 8080:8080
c.运行docker-compose
docker-compose up 启动这个项目的所有服务 必须确保运行命令的目录存在docker-compose.yml
二、docker compose命令模板
1.image
指定为镜像名称或ID。如果镜像在本地不存在,Compose将会尝试拉取这个镜像
image: ubuntu
image: prchardup/postgresql
image: a4bc65fd
2.network
配置容器连接的网络
version: "3"
services:
some-service:
networks:
- some-network.
- other-network
networks:
some-network:
other-network:
external: #使用外部网桥
true
3.ports
暴露端口信息
使用宿主端口: 容器端口(HOST: CONTAINER)格式,或者仅仅指定容器的端口都可以
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
4.volumes
数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式
(HOST:CONTAINER:ro)
该指令中路径支持相对路径
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
5、container_name: #相当于run的 --name
指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式
container_name: docker_web_container
6.environment
设置环境变量。你可以使用数组或字典两种格式
只给定名称的变量会自动获取运行Compose主机上对应变量的值,可以用来防止泄露不必要的数据
7、command # run 镜像之后用来覆盖容器内容默认命令
覆盖容器启动后默认执行的命令
command: echo "hello world"
8、env_file
从文件中获取环境变量,可以为单独的文件路径或列表
如果通过 docker-compose -f FILE 方式来指定Compose模板文件,则 env_file 中变量的路径会基于模板文件路径
如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。
env_file: .env
env_fileL
- ./common.env
- ./apps/web.env
- ./opt/secrets.env
环境变量文件中每一行必须符合格式,支持 # 开头的注释行
PROG_ENV=development
9、depends_on
解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web
version: '3'
services:
web:
build:
depends_on
- db
- redis
redis:
image: redis
db:
image: postgres
10、healthcheck
通过命令检查容器是否健康运行
healthcheck:
test: ["CMD","curl","-f","http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
11、sysctls # 用来修改容器中系统内部参数 并不是必须 有些服务启动受容器内操作系统参数限制可能会无法启动必须通过修改容器中参数才能启动
配置容器内核参数
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
12、ulimits # 用来修改容器中系统内部参数
指定容器的ulimits限制值。
例如:指定最大进程数为65535,指定文件句柄数20000(软限制,应用可以随时修改,不能超过硬限制)和40000(系统硬限制,只能root用户提高)
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
三、docker compose 中的build命令
1、build 指令
作用:用来将指定dockerFile打包成对应镜像,然后在运行该镜像
四、docker compose 中指令
1、常用指令
1、up 指令
作用:用来启动所有docker-compose服务
选项:-d 后台启动所有服务
2、down 指令
作用:用来关闭所有docker-compose服务
3、exec 指令
作用:进入指定的ip
docker-compose exec redis(docker-compose.yml 中声明服务id) bash
4、ps 指令
作用:列出项目中的所有容器
5、restate 指令
作用:重启项目中的服务,如果不写服务id,默认重启所有服务
docker-compose restart [服务id]
6、rm 指令
作用:用来删除项目服务
docker-compose rm -fv [服务id] 注意:谨慎操作 -v删除服务的数据卷