Docker Compose
当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容易出错,此时推荐使用docker 单机编排工具 docker-compose
docker-compose 是 docker 容器的一种单机编排服务,docker-compose 是一个管理多个容器的工具,比如: 可以解决容器之间的依赖关系,就像启动一个nginx 前端服务的时候会调用后端的tomcat,那就得先启动tomcat,但是启动tomcat 容器还需要依赖数据库,那就还得先启动数据库,docker-compose 可以用来解决这样的嵌套依赖关系,并且可以替代docker命令对容器进行创建、启动和停止等手工的操作
因此,如果说docker命令就像linux的命令,docker compse就像shell脚本,可以自动的执行容器批量操作,从而实现自动化的容器管理,或者说docker命令相当于ansible命令,那么docker compose文件,就相当于ansible-playbook的yaml文件
docker-compose 项目是Docker 官方的开源项目,负责实现对Docker 容器集群的快速编排,docker-compose 将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)
github地址: https://github.com/docker/compose
官方地址: https://docs.docker.com/compose/
-
-
通过缩进表示层级关系
-
不支持制表符 tab 键缩进,只能使用空格缩进
-
缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
-
用 # 号注释
-
符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
-
指令 | 作用 | 演示 |
---|---|---|
build | 指定构建上下文和可选的Dockerfile用于构建镜像。 | build: context: /opt/test dockerfile: Dockerfile |
dockerfile | 指定Dockerfile的路径。通常在build部分中使用。 | dockerfile: Dockerfile.prod |
context | 指定构建上下文的路径,即包含Dockerfile和构建上下文的目录路径 | context: /opt/test |
image | 指定用于服务/容器的镜像名称。 | image: myapp:latest |
command | 覆盖由镜像指定的默认命令 | command: ["python", "app.py"] |
container_name | 为容器指定自定义名称。 | container_name: my_container |
deploy | 指定部署选项,如副本和放置 | deploy: replicas: 3 |
environment | 为服务指定环境变量 | environment: - DEBUG=true |
networks | 指定连接服务的网络 | networks: - frontend - backend |
network_mode | 指定容器的网络模式 | network_mode: "host" |
ports: | 将容器端口映射到主机端口 | ports: - "8080:80" |
volumes | 挂载主机或其他容器的卷 | volumes: - "nginx-data:/usr/local/nginx/html |
volumes_from | 从另一个服务/容器挂载卷 | volumes_from: - data-container |
hostname: | 指定主机名 | hostname: my-container |
sysctls | 为容器设置内核参数 | sysctls: - net.core.somaxconn=1024 |
restart | 重启策略 | restart: always |
depends_on | 指定该服务依赖的其他服务 |
解释 | |
---|---|
build | #构建镜像 |
bundle | #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备份文件 |
config -q | #查看当前配置,没有错误不输出任何信息 |
create | #创建服务,较少使用 |
down | #停止和删除所有容器、网络、镜像和卷 |
events | #从容器接收实时事件,可以指定json 日志格式,较少使用 |
exec | #进入指定容器进行操作 |
help | #显示帮助细信息 |
images | #显示镜像信息,较少使用 |
kill | #强制终止运行中的容器 |
logs | #查看容器的日志 |
pause | #暂停服务 |
port | #查看端口 |
ps | #列出容器,较少使用 |
pull | #重新拉取镜像,镜像发生变化后,需要重新拉取镜像,较少使用 |
push | #上传镜像 |
restart | #重启服务,较少使用 |
rm | #删除已经停止的服务 |
run | #一次性运行容器 |
scale | #设置指定服务运行的容器个数 |
start | #启动服务 ,较少使用 |
stop | #停止服务,较少使用 |
top | #显示容器运行状态 |
unpause | #取消暂定 |
up |
yum install epel-release.noarch -y yum -y install docker-compose
chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin
docker-compose ps
mkdir /mnt/docker-compose cd /mnt/docker-compose/ vim docker-compose.yml
server-nginx-web: image: nginx container_name: web1 expose: - 80 - 443 ports: - "80:80" - "443:443"
docker-compose config
docker-compose up -d
docker-compose down
docker-compose kill
docker-compose rm
server-nginx-web: image: nginx container_name: web1 expose: - 80 - 443 ports: - "8001:80" - "8443:443" server-tomcat: image: tomcat container_name: tomcat1
docker-compose config -q
# -q 静默不输出
启动
docker-compose up -d
FROM centos:centos7.9.2009 LABEL author="zhou cloud" \ version="1.0" \ description="test" RUN rm -rf /etc/yum.repos.d/ ADD qh.repo /etc/yum.repos.d/ RUN yum -y install gcc gcc-c++ make automake pcre pcre-devel zlib zlib-devel openssl openssl-devel wget ADD nginx-1.18.0.tar.gz /usr/local/src RUN cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install COPY index.html /apps/nginx/html EXPOSE 80 CMD ["-g","daemon off;"] ENTRYPOINT ["/apps/nginx/sbin/nginx"]
docker build -t c7:n3 docker run -d -p 80:80 --name web1 c7:n1 #dockerfile目录下执行
编写 compose 文件
vim /opt/compose_nginx/docker-compose.yml services: nginx: container_name: web1 hostname: nginx build: context: /data/dockerfile/system/centos/centos7/ dockerfile: Dockerfile ports: - 1216:80 - 1217:443 networks: mynet: ipv4_address: 172.18.0.10 volumes: - ./wwwroot:/usr/local/nginx/html networks: mynet: driver: bridge ipam: config: - subnet: 172.18.0.0/16 services: 定义了要运行的服务。 nginx: Nginx 服务的配置。 container_name: 指定容器的名称为 web1。 hostname: 指定容器的主机名为 nginx。 build: 指定了构建 Nginx 容器所需的上下文和 Dockerfile。 ports: 将主机端口 1216 映射到容器的 80 端口,将主机端口 1217 映射到容器的 443 端口。 networks: 将服务连接到名为 lnmp 的自定义网络。 volumes: 将主机上的 ./wwwroot 目录挂载到容器中的 /usr/local/nginx/html 目录。 networks: 定义了自定义网络。 lnmp: 自定义网络的配置。 driver: 网络驱动程序为 bridge。 ipam: IP 地址管理配置。 config: 子网配置,指定了 IP 地址范围。
cd /opt/compose_nginx/ docker-compose -f docker-compose.yml up -d ---------------------------------------------------------------------------------------------------------- -f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml -p, --project-name NAME :指定项目名称,默认使用目录名称 -d :在后台运行 ---------------------------------------------------------------------------------------------------------- docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b48dceee248f compose_nginx_nginx "/run.sh" About a minute ago Up About a minute 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_nginx_1 cd /opt/compose_nginx/ docker-compose ps #必须在docker-compose.yml所在目录执行此命令 docker-compose -f docker-compose.yml up -d
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程