Docker--compose概述与部署

目录

一、概述

[1. Compose简介](#1. Compose简介)

[1.1 docker compose常用命令](#1.1 docker compose常用命令)

[1.2 Compose配置常用字段](#1.2 Compose配置常用字段)

[2. YAML简介](#2. YAML简介)

[2.1 YAML支持的数据结构](#2.1 YAML支持的数据结构)

[2.2 YML文件编写注意事项](#2.2 YML文件编写注意事项)

[2.3 Docker Compose文件结构](#2.3 Docker Compose文件结构)

[3. Docker-Compose安装](#3. Docker-Compose安装)

​编辑

[4.docker Compose撰写nginx 镜像](#4.docker Compose撰写nginx 镜像)

[1. 准备环境](#1. 准备环境)

​编辑

[2. 编写docker-compose.yml](#2. 编写docker-compose.yml)

[5. docker Compose编写nginx+tomcat镜像](#5. docker Compose编写nginx+tomcat镜像)

[1. 编写docker-compose.yml 和 删除容器](#1. 编写docker-compose.yml 和 删除容器)

[2. 删除镜像](#2. 删除镜像)

[3. 删除network](#3. 删除network)

[4. 创建并运行](#4. 创建并运行)

[5. 查看地址](#5. 查看地址)

[6. 浏览器访问测试](#6. 浏览器访问测试)


一、概述

  • 我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍 Docker 官方产品 Docker-Compose
  • Dockerfile 可以定义一个单独的应用容器;而 docker-compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器(LNMP)等
  • Docker-Compose 项目由 Python 编写,调用 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理

1. Compose简介

  • compose是一个用于定义及允许多个Docker容器的工具,主要是通过一个YAML文件进行服务配置

  • 使用Docker Compose不再需要使用Shell脚本来启动容器

  • Docker Compose非常适合组合使用多个容器进行开发的场景

1.1 docker compose常用命令

|--------------------|----------------|
| 字段 | 描述 |
| build | 重新构建服务 |
| ps | 列出容器 |
| up | 创建和启动容器 |
| exec | 在容器里面执行命令 |
| scale | 指定一个服务容器启动数量 |
| top | 显示容器进程 |
| logs | 查看容器输出 |
| down | 删除容器、网络、数据卷和镜像 |
| stop/start/restart | 停止/启动/重启服务 |

1.2 Compose配置常用字段

|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 字段 | 描述 |
| build | 指定 Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定 |
| dockerfile | 构建镜像上下文路径 dockerfile-nginx |
| context | 可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址 |
| image | 指定镜像 |
| command | 执行命令,覆盖默认命令 |
| container name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale |
| environment | 添加环境变量 |
| networks | 加入网络 |
| network_mode | 设置容器的网络模式,如 host,bridge,... |
| ports | 暴露容器端口,与 -p 相同,但端口不能低于 60 |
| volumes | 挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称 |
| volumes_from | 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 '2' 支持 |
| hostname | 容器主机名 |
| sysctls | 在容器内设置内核参数 |
| links | 连接到另外一个容器,- 服务名称[:服务别名] |
| privileged | 用来给容器root权限,注意是不安全的,true | false |
| restart | 设置重启策略,no,always,no-failure,unless-stoped,no,默认策略,在容器退出时不重启容器。on-failure,在容器非正常退出时(退出状态非0),才会重启容器。on-failure:3,在容器非正常退出时重启容器,最多重启3次。always,在容器退出时总是重启容器。unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。 |
| depends_on | 在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。例如: php: depends_on: - apache #先启动apache - mysql #在启动mysql |

2. YAML简介

YAML(语言)的设计目标,就是方便人类读写,它实质上是一种通用的数据串行化格式

它的基本语法规则如下:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

2.1 YAML支持的数据结构

  • 对象,键值对的集合
  • 数组,一组按次序排列的值,又称序列
  • 纯量,单个的,不可再分的值

2.2 YML文件编写注意事项

YML是标记语言可以很直观的展示数据序列化格式,可读性高,类似于XML数据,数据结构通过缩进表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来{}

注意事项:

①大小写明确

②通过缩进表示层级关系

③不支持制表符tab键缩进,只能使用空格缩进

④缩进的空格数目不重要,只要相同层级左右对齐,通常开头缩进2个空格

⑤#号注释

⑥符号字符后缩进1个空格,如冒号:逗号,横杠-后面空一个格

⑦如果包含特殊字符用单引号和双引号引起来会作为字符串处理,单引号不识别变量,双引号识别变量。

2.3 Docker Compose文件结构

yum install -y tree

tree /opt/compose_nginx

/opt/compose_nginx/

├── docker-compose.yml #创建模板脚本

├── nginx

│?? ├── Dockerfile #创建容器脚本

│?? ├── nginx-1.12.0.tar.gz #复制源码包

└── wwwroot

└── index.html #站点网页

3. Docker-Compose安装

复制代码
#注意必须是在安装docker的基础上
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#下载安装包单独安装DockerCompose

chmod +x /usr/local/bin/docker-compose
#docker-compose添加执行权限

docker-compose --version
#查看docker-compose版本

4.docker Compose撰写nginx 镜像

1. 准备环境

把之前的容器删除,避免冲突------docker rm -f `docker ps -aq`

删除network自定义的,会冲突报错------docker network rm -f ID号

复制代码
[root@centos6 opt]# mkdir docker-compose_nginx
[root@centos6 opt]# cd docker-compose_nginx/
[root@centos6 docker-compose_nginx]# mkdir wwwroot
[root@centos6 docker-compose_nginx]# ls
wwwroot
复制代码
[root@centos6 nginx]# cd /opt
[root@centos6 opt]# ls
apache  containerd  docker-compose_nginx  mysqld  nginx  qq  rh  sshd  systemctl  tomcat
[root@centos6 opt]# cp -r nginx/ /opt/docker-compose_nginx/
[root@centos6 opt]# cd docker-compose_nginx/
[root@centos6 docker-compose_nginx]# ls
nginx  wwwroot
[root@centos6 docker-compose_nginx]# cd nginx/
[root@centos6 nginx]# ls
Dockerfile  nginx-1.22.0.tar.gz  run.sh
[root@centos6 nginx]# 
复制代码
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <cyj>
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.22.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.22.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make -j4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]
复制代码
echo "<h1>this is nginx</h1>" > /opt/docker-compose_nginx/wwwroot/index.html

2. 编写docker-compose.yml

复制代码
version: '3'
services:
  nginx:
    container_name: web01
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
    - 123:80
    - 456:443
    networks:
      xzq:
        ipv4_address: 172.19.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  xzq:
    driver: bridge
    ipam:
      config:
        - subnet: 172.19.0.0/16
复制代码
编写完毕docker-compose.yml文件后进行镜像创建并启动容器
docker-compose -f docker-compose.yml up -d
#创建并启动容器,-f指定yml文件,-d表示在后台运行
复制代码
docker ps -a
#可以看到容器在运行及映射端口
curl访问映射端口进行测试成功。

5. docker Compose编写nginx+tomcat镜像

1. 编写docker-compose.yml 和 删除容器

复制代码
version: '3'
services:
  nginx:
    container_name: web01
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
    - 1212:80
    - 1616:443
    networks:
      xzq:
        ipv4_address: 172.19.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
  tomcat:
    hostname: tomcat
    build:
     context: ./tomcat
     dockerfile: Dockerfile
    ports:
     - 8080:8080
    networks:
      xzq:
networks:
  xzq:
    driver: bridge
    ipam:
      config:
        - subnet: 172.19.0.0/16

2. 删除镜像

3. 删除network

复制代码
[root@centos6 ~]# cd /opt
[root@centos6 opt]# ls
apache  containerd  docker-compose_nginx  mysqld  nginx  qq  rh  sshd  systemctl  tomcat
[root@centos6 opt]# cp -r tomcat /opt/docker-compose_nginx/
[root@centos6 opt]# cd docker-compose_nginx/
[root@centos6 docker-compose_nginx]# ls
docker-compose.yml  nginx  tomcat  wwwroot
[root@centos6 docker-compose_nginx]# cd tomcat/
[root@centos6 tomcat]# ls
apache-tomcat-9.0.16.tar.gz  Dockerfile  jdk-8u291-linux-x64.tar.gz
[root@centos6 tomcat]# 

4. 创建并运行

复制代码
docker-compose -f docker-compose.yml up -d
复制代码
docker  ps

5. 查看地址

docker inspect tomcat容器ID号

6. 浏览器访问测试

相关推荐
AttaGain14 小时前
Ubuntu24中ISO文件制作工具
linux·ubuntu
隐语SecretFlow14 小时前
【隐语Secretflow】一文速通基于可信执行环境 (TEE) 的零信任计算系统
云原生·kubernetes·开源
代码游侠14 小时前
学习笔记——线程
linux·运维·开发语言·笔记·学习·算法
怪只怪满眼尽是人间烟火14 小时前
离线环境下部署区块链FISCO BCOS v2.11.0
linux·运维·区块链
wniuniu_14 小时前
ceph内核模式 和 librbd 模式
运维·服务器·ceph
努力努力再努力wz14 小时前
【Linux网络系列】:网络+网络编程(UDPsocket+TCPsocket)
java·linux·c语言·开发语言·数据结构·c++·centos
姬嘉晗-19期-河北工职大14 小时前
在虚拟机的 Linux 系统(CentOS 7)中搭建一个「虚拟机本地网站」
linux·运维·centos
hkhkhkhkh12315 小时前
Linux 内核三大核心结构体详解(驱动开发视角)
linux·数据结构·驱动开发·字符设备
Smile灬凉城66615 小时前
TCP的四种计时器
运维·服务器·网络
R.lin15 小时前
Docker核心原理详解
运维·docker·容器