首页 > 其他分享 >Docker Compose

Docker Compose

时间:2024-08-08 17:08:02浏览次数:8  
标签:容器 compose 80 指定 nginx Compose Docker docker

一、Docker Compse介绍

当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容易出错,此时推荐使用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/

1.使用 YAML 时需要注意下面事项(AML 文件)

  • 大小写敏感

  • 通过缩进表示层级关系

  • 不支持制表符 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 指定该服务依赖的其他服务 depends_on: - mysql

2.常用指令

命令只能在docker-compose.yml的目录下执行

命令解释
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 #创建并启动容器 ,较少使用

二、安装和准备

1.安装Docker Compose

yum安装

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

 

2.查看命令格式

官方文档: https://docs.docker.com/compose/reference/

3.显示 docker-compose 拉起的容器

docker-compose ps

三、启动单台容器

1.准备yml文件

docker compose 文件可在任意目录,创建文件名为docker-compose.yml 配置文件,要注意前后的缩进

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"

2.检测语法

docker-compose  config

3.启动

docker-compose up -d

4.关闭

 

使用docker-compose down 会将容器直接删除 镜像也会删除

docker-compose down

使用docker-compose kill 只是退出容器

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

五、调用 dockerfile文件 执行编排

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

 

 

 

标签:容器,compose,80,指定,nginx,Compose,Docker,docker
From: https://www.cnblogs.com/hxqwe/p/18349313

相关文章

  • Tool-Docker-以ubuntu:latest为例
    Tool-Docker-以ubuntu:latest为例Ubuntu-Installdockersearchubuntu:查询镜像dockerpullubuntu[:version]:拉取镜像dockerimages:查看镜像dockerps-a:查看当前容器状态dockerrun-itd--namecontainer-nameimages-name[:version]/bin/bash:运行容器dockerexec......
  • 构建用于测试负载均衡服务的Docker 镜像
    最近在进行负载均衡的教学和培训视频,需要像学员展示HTTP数据负载均衡前后的变化和客户端信息的展示,并展现数据包信息获取服务器名获取服务IP地址获取客户端IP和访问端口获取ClientIP获取realIP获取xffIP获取访问域名信息获取serverurl信息获取访问时间获取访问......
  • Docker && Microros && PlatformIO 配置经验留存
    1.背景:无意中看到了小鱼(鱼香ROS)的文章硬件环境:Ubuntu22.04 &&ESP32-WROOM-32想在ESP32WROOM32上实现microros的功能:实现上位机(跑ROS2)通过topic直接控制CAN报文的功能;目前进度:实现了环境的配置(PlatformIO&&docker&&Microros);初步跑通了Microros的订阅与发送(24......
  • 构建包含 SSH 和 LAMP 服务的 Docker 镜像
    容器构建概述容器配置有SSHD服务,且root密码为启动容器是随机生成,加强安全性更新容器内软件源为国内镜像源,加快软件安装容器有安装LAMP服务(版本5.5.x),安装有各类php插件,可以用作安全靶场练习部分情况下,资源缺少,可把容器模拟为虚拟机entrypoint.sh文件内容#!/bin/bash#......
  • docker仓库管理
    一、Harbor介绍Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由VMware开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源DockerDistribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建......
  • 关于在firewall防火墙无法阻止Docker 容器映射端口被外部访问问题的回顾
    这个问题是很早之前处理的,我自己已经没有印象了,今天同事拿了一个处理安全的文档来找我,上面赫然出现了我的名字,比较懵逼。。。这个问题的现象实际上是 docker映射的端口,通过firewalld 防火墙禁用端口不生效,外部还是能访问到,公司在进行安全扫描的时候总是被抓。。。。在firewall......
  • docker 简单入门1
     这里写自定义目录标题DockerDocker安装(centos)Docker启动、停止、查看状态Docker其他命令(常用)查询镜像安装镜像在线安装镜像离线安装镜像(说明可能不标准)启动容器重启容器停止容器修改容器中的配置文件(说明可能不标准)dockercomimtdockersavedockerlo......
  • centos7.9 安装docker-ce
    #step1:安装必要的一些系统工具sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#Step2:添加软件源信息sudoyum-config-manager--add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#Step3sudosed-i's+download.docker.c......
  • 034.CI4框架CodeIgniter,纯净windows系统,一步步安装composer和CodeIgniter 4.5.4
    安装git选择路径 一路回车安装 安装phpstudy 安装好的界面 下载php8.2.9  点一下默认配置,确定 php版本要选择php8.2.9 需要安装的php扩展如下 点开网站的管理,设置一个根目录 php,启动 在根目录创建一个index.html的文件,用浏览器打开,看看能不能访......
  • Docker 镜像拉取失败(error pulling image configuration:download failed)
     修改daemon.json配置vim/etc/docker/daemon.json 输入i替换为:{"builder":{"gc":{"defaultKeepStorage":"20GB","enabled":true}},"experimental":true,"f......