docker compose基础

docker compose基础

一、docker compose 入门 1.两个重要概念 项目:(project)有多个服务共同组成一个完整业务单元 定义docker-compose.yml文件中 服务:(service)一个服务对应一个应用容器 在一个项目中可以存在多个服务 2、第一个docker-compose程序 a.创建一

一、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删除服务的数据卷

评论