【Docker】Docker容器编排

news2024/10/9 10:10:03

目录

  • 一、Docker Compose
    • 1.2Docker Compose 环境安装
    • 1.3 YAML 文件格式及编写注意事项
    • 2.3 Docker Compose配置常用字段
    • 2.4 Docker Compose 常用命令
  • 二、Docker Compose实验
    • 2.1编写Nginx的Dockerfile脚本
    • 2.2编写MySQL,Dockerfile脚本
    • 2.3编写PHP,Dockerfile脚本
    • 2.4 准备docker-compose.yml文件

一、Docker Compose

  • docker compose 实现单机容器集群编排管理(使用一个模板文件定义多个应用容器的启动参数和依赖关系,并使用docker compose来根据这个模板文件的配置来启动容器)

1.2Docker Compose 环境安装

  • Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose

#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
#安装
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version

1.3 YAML 文件格式及编写注意事项

  • YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来。

使用 YAML 时需要注意下面事项:

●大小写敏感
●通过缩进表示层级关系
●不支持制表符 tab 键缩进,只能使用空格缩进
●缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
●用 # 号注释
●符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
●如果包含特殊字符用单引号(‘’)引起来会作为普通字符串处理,双引号(“”): 特殊字符作为本身想表示的意思

2.3 Docker Compose配置常用字段

字段描述
build指定 Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定
dockerfile构建镜像上下文路径
context可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址
image指定镜像
command执行命令,覆盖容器启动后默认执行的命令
container_name指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量
deploy指定部署和运行服务相关配置,只能在 Swarm 模式使用
environment添加环境变量
networks加入网络,引用顶级networks下条目
network_mode设置容器的网络模式,如 host,bridge,…
ports暴露容器端口,与 -p 相同,但端口不能低于 60
volumes挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称
volumes_from从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 ‘2’ 支持
hostname容器主机名
sysctls在容器内设置内核参数
links连接到另外一个容器,- 服务名称[:服务别名]
privileged用来给容器root权限,注意是不安全的,true
restart设置重启策略,no,always,no-failure,unless-stopped
depends_on指定容器启动顺序

no,默认策略,在容器退出时不重启容器。
on-failure,在容器非正常退出时(退出状态非0),才会重启容器。
on-failure:3,在容器非正常退出时重启容器,最多重启3次。
always,在容器退出时总是重启容器。
unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的

2.4 Docker Compose 常用命令

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

二、Docker Compose实验

  • 容器安装lnmp架构

2.1编写Nginx的Dockerfile脚本

mkdir -p /opt/lnmp/nginx mysql php centos 
cd /opt/centos
vim /opt/lnmp/nginx/Dockerfile
#指定基础弱镜像
FROM centos:7
#替换NGinx配置文件能够连接PHP,在线源文件
COPY nginx.repo /etc/yum.repos.d/nginx.repo
COPY default.conf /etc/nginx/conf.d/default.conf
#yum下载Nginx
RUN yum -y install nginx
#暴露端口号
EXPOSE 80
#指定前台启动
CMD [ "/usr/sbin/nginx", "-g", "daemon off;" ]


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2编写MySQL,Dockerfile脚本

vim /vim /opt/lnmp/mysql/Dockerfile

#指定基于镜像,使用自己创建的依赖包镜像
FROM centos:yum
#解压软件包到容器内/opt、目录
ADD mysql-boost-5.7.20.tar.gz  /opt/
#编译安装
RUN cd /opt/mysql-5.7.20/ && \
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make && make install
#配置MySQL的配置文件
COPY my.cnf /etc/my.cnf
#修改容器环境变量
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
#创建容器内mysql运行用户设置权限,初始化数据库
RUN useradd -M -s /sbin/nologin mysql && \
chown -R mysql:mysql /usr/local/mysql/ && \
chown mysql:mysql /etc/my.cnf && \
/usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#暴露端口
EXPOSE 3306
#指定mysql前台启动命令
CMD ["/usr/local/mysql/bin/mysqld"]


在这里插入图片描述

2.3编写PHP,Dockerfile脚本

#指定基于精选
FROM centos:yum
#解压软件包到/opt/目录
ADD php-7.1.10.tar.bz2 /opt
#编译安装,创建运行用户
RUN cd /opt/php-7.1.10/ && \
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip && make && make install && \
useradd -M -s /sbin/nologin php
#准备PHP配置文件
COPY php-fpm.conf /usr/local/php/etc/php-fpm.conf
COPY php.ini  /usr/local/php/lib/php.ini
COPY www.conf /usr/local/php/etc/php-fpm.d/www.conf
#暴露端口号,指定前台启动
EXPOSE 9000
CMD ["/usr/local/php/sbin/php-fpm", "-F"]

在这里插入图片描述

2.4 准备docker-compose.yml文件

#准备docker-compose软件包
mv docker-compose /usr/local/bin
vim /opt/lnmp/docker-compose.yml
#指定版本号
version: '3'
#配置启动服务
services:
  nginx:
    container_name: nginx
    hostname: nginx
    build:  #启动方式为使用Dockerfile生成镜像,创建容器
      context: ./nginx
      dockerfile: Dockerfile
    ports:
    - 80:80
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
    volumes:
    - ./nginx/html:/usr/share/nginx/html #挂载html目录到容器内

  mysql:
    container_name: mysql
    hostname: mysql
    #build:
    image: mysql:centos #使用现有镜像
      #context: ./mysql
      #dockerfile: Dockerfile
    ports:
    - 3306:3306
    networks:
      lnmp:
        ipv4_address: 172.18.0.20
    volumes:
    - db_data:/usr/local/mysql #挂载目录到db_data顶级目录中
    privileged: true  #使用root权限创建容器
php:
    container_name: php
    hostname: php
    #build:
    image: php:centso
      #context: ./php
      #dockerfile: Dockerfile
    ports:
    - 9000:9000
    networks:
      lnmp:
        ipv4_address: 172.18.0.30
    volumes:
    - ./nginx/html:/usr/share/nginx/html #挂载本地nginx/html目录到容器里,连接Nginx网页文件
    - db_data:/usr/local/mysql           #挂载公有目录到容器内,连接mysql数据库 
    depends_on: #指定PHP依赖容启动顺序
    - nginx
    - mysql

networks:  #使用自定义网络模式
  lnmp:
    driver: bridge
    ipam:
      config:
      - subnet: 172.18.0.0/16

volumes:  #创建顶级目录
  db_data:

#docker-compose -f docker-compose.yml up -d

-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME :指定项目名称,默认使用目录名称
-d :在后台运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/790404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT样式表qss中的长度单位px/pt/%/em/ex/mm/in等

以下是从CSS里抄来的。QSS只能支持其中一部分。 1、px:像素(Pixel),相对于设备的长度单位,像素是相对于显示器屏幕分辨率而言的。譬如,WONDOWS的用户所使用的分辨率一般是96像素/英寸。而MAC的用户所使用的分辨率一般是72像素/英寸。 像素&a…

在培训班里学IT技术是否有用?和大家分享相关IT培训班里五大常见宣传手法、相关优势与实际效果

目录 Introduction 引言IT培训班常见宣传手法培训班的优势如何评判IT培训班的效果与质量除IT培训班之外的学习渠道总结其它资料下载 Introduction 引言 随着信息技术的飞速发展,学习IT技术成为许多人追求职业发展和个人兴趣的重要途径。从软件开发、数据科学到人工…

OpenAI Code Interpreter 的开源实现:GPT Code UI

本篇文章聊聊 OpenAI Code Interpreter 的一众开源实现方案中,获得较多支持者,但暂时还比较早期的项目:GPT Code UI。 写在前面 这篇文章本该更早的时候发布,但是 LLaMA2 发布后实在心痒难忍,于是就拖了一阵。结合 L…

插件使用权限管理软件(一)框架选择和Furion框架搭建

项目背景 软件主要服务于传统设计院,用于管理和监控设计院内部插件的使用权限和使用情况。可根据使用的频率来对插件使用情况的分析。后续可以加上错误报告等提测报告,使整个监控插件使用情况更加流程化。由于博主主要做CAD和Revit的二次开发工作&#x…

【力扣每日一题】2023.7.25 将数组和减半的最少操作次数

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 题目给我们一个数组,我们每次可以将任意一个元素减半,问我们操作几次之后才可以将整个数组的和减半&…

实例025 带分隔栏的窗体

实例说明 在软件开发中,经常需要将界面分成几个部分,而且这几个部分又可以自由调整大小。运行本例,实例效果如图1.25所示。 技术要点 在.NET 2.0框架中可以非常轻松的实现这一功能,只要在窗体中加入SplitContainer控件即可。Sp…

2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现: 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病(以下简称慢性病)已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&am…

Cesium态势标绘专题-自由多边形(标绘)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

红外雨量计(光学雨量传感器)调试

红外雨量计(光学雨量传感器)调试 红外雨量计是一种用来测量雨量的传感器,它通过红外线的反射来检测雨滴的落下。为了调试红外雨量计,你需要参考以下步骤: 1. 确认传感器的电源接线正确。检查传感器的接线是否正确&…

软工导论知识框架(二)结构化的需求分析

本章节涉及很多重要图表的制作,如ER图、数据流图、状态转换图、数据字典的书写等,对初学者来说比较生僻,本贴只介绍基础的轮廓,后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法:结构化的分析、设计、…

GBASE南大通用出席CCF第38届中国计算机应用大会

在数据要素市场化分论坛上,GBASE南大通用高级副总裁赵伟发表“以自主可控的国产基础软件新兴技术保障数据要素安全高效流通”的主题演讲,向参会嘉宾分享基于GBASE数据库的自主可控国产软件,保障数据要素安全流通、高效流转的创新实践。 赵伟讲…

基于STM32设计的智能奶瓶

一、项目背景 随着我国计划生育政策的放开,婴幼儿数量持续上涨,国民收入逐年提高,家庭在婴幼儿产品方面的消费日益扩大。奶瓶是母婴市场的刚需。目前婴儿哺育的问题引起新爸新妈的高度重视。一方面,人们使用的传统奶瓶已经不能很好地满足现代人对于智能化生活的需求。另一…

C语言非常道 6.4习题解答

关于 #include “stdarg.h” 相关知识小结: 函数:tppedef va_list char * ; va_list al; va_start(al, fmt) 使 al 指向变参函数中最后一个已知参数(从右往左数的第一个已知参数) va_arg(两个参数),第一个…

事件循环和生命周期

事件循环和生命周期 js是单线程主要说的是 js引擎线程只有一个主线程这个线程跟GUI线程是互斥的 GUI线程是绘制html css js也可修改这部分所以互斥 https://segmentfault.com/a/1190000023315304 https://www.jianshu.com/p/71544067d3a3 https://zhuanlan.zhihu.com/p/359…

【Unity组件扩展】减少Image的渲染

需要实现透明遮罩功能,如点击任意关闭界面、透明遮挡不让点击等,一般可以添加Image组件,然后将alpha值设置为0。不过,在Unity2018.4.3.6f1及之前的老版本中,这样的做法会增加DC和增加overdraw。 可以继承Graphic重写O…

基于Javaweb+Vue3实现淘宝卖鞋前后端分离项目

前端技术栈:HTMLCSSJavaScriptVue3 后端技术栈:JavaSEMySQLJDBCJavaWeb 文章目录 前言1️⃣登录功能登录后端登录前端 2️⃣商家管理查询商家查询商家后端查询商家前端 增加商家增加商家后端增加商家前端 删除商家删除商家后端删除商家前端 修改商家修改…

【Python从入门到人工智能】14个必会的Python内置函数(7)——数据格式化处理 综合应用场景

总觉得忍一忍就会好起来。真笨,人家不就是觉得你会忍一忍,所以才这样对你吗?当我们凶狠地对待这个世界的时候,才会发现这个世界,突然变得温文尔雅了。——余华《在细雨中呼喊》 🎯作者主页: 追光…

ElementUI 实现动态表单数据校验(已解决)

文章目录 🍋前言:🍍正文1、探讨需求2、查阅相关文档([element官网](https://element.eleme.cn/#/zh-CN/component/form))官方动态增减表单项示例3、需求完美解决4、注意事项 🎃专栏分享: &#…

Hello,Vector DB|可能是最易上手的 Faiss 教程

大家会不会有这样的疑问: 网易云音乐是如何根据我的音乐口味推荐相似歌曲的?淘宝是如何判断我的购买喜好的?手机相册又是如何识别照片中的人脸,并将同一个人的照片归为同一组的? 其实,实现这一切的背后技术…

【nginx】nginx之location规则详解:

文章目录 一、语法规则:二、优先级:三、验证:1、精确匹配:2、通过^~方式实现匹配:3、通过”~”方式实现匹配:4、通过"~*"方式实现匹配:5、”!~*” 和”!~” 不常用,再次不做介绍6、通…