【Docker】Docker容器编排

目录

  • 一、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: nginxhostname: nginxbuild:  #启动方式为使用Dockerfile生成镜像,创建容器context: ./nginxdockerfile: Dockerfileports:- 80:80networks:lnmp:ipv4_address: 172.18.0.10volumes:- ./nginx/html:/usr/share/nginx/html #挂载html目录到容器内mysql:container_name: mysqlhostname: mysql#build:image: mysql:centos #使用现有镜像#context: ./mysql#dockerfile: Dockerfileports:- 3306:3306networks:lnmp:ipv4_address: 172.18.0.20volumes:- db_data:/usr/local/mysql #挂载目录到db_data顶级目录中privileged: true  #使用root权限创建容器
php:container_name: phphostname: php#build:image: php:centso#context: ./php#dockerfile: Dockerfileports:- 9000:9000networks:lnmp:ipv4_address: 172.18.0.30volumes:- ./nginx/html:/usr/share/nginx/html #挂载本地nginx/html目录到容器里,连接Nginx网页文件- db_data:/usr/local/mysql           #挂载公有目录到容器内,连接mysql数据库 depends_on: #指定PHP依赖容启动顺序- nginx- mysqlnetworks:  #使用自定义网络模式lnmp:driver: bridgeipam:config:- subnet: 172.18.0.0/16volumes:  #创建顶级目录db_data:#docker-compose -f docker-compose.yml up -d

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

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

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

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

相关文章

K8S中网络如何通信

Kubernetes 提出了一个自己的网络模型“IP-per-pod”,能够很好地适应集群系统的网络需求,它有下面的这 4 点基本假设: 集群里的每个 Pod 都会有唯一的一个 IP 地址。Pod 里的所有容器共享这个 IP 地址。集群里的所有 Pod 都属于同一个网段。…

STM32MP157驱动开发——按键驱动(POLL 机制)

文章目录 “POLL ”机制:APP执行过程驱动使用的函数应用使用的函数pollfd结构体poll函数事件类型实现原理 poll方式的按键驱动程序(stm32mp157)gpio_key_drv.cbutton_test.cMakefile修改设备树文件编译测试 “POLL ”机制: 使用休眠-唤醒的方式等待某个…

MySQL主从复制、读写分离

目录 一、MySQL的复制类型 二、MySQL主从复制工作流程 三、MySQL的同步方式 1、异步复制(Async Replication) 2、同步复制(sync Replication) 3、半同步复制(Async Replication) 四、MySQL应用场景 …

TCP/IP 五层协议模型

转载大佬文章 我们每天使用互联网,本质上是在传输/接收各种数据,具体如何传输则是按照一系列互联网协议进行的。我们常说的网络七层模型,五层模型,四层模型都是对数据传输过程做了细化的分层。 按照五层模型比较好理解&#xff0c…

操作系统启动相关概念(BIOS、MBR、GPT、BRUB)

不管是 Windows 还是 Linux 操作系统,底层设备一般均为物理硬件,操作系统启动之前会对硬件进行检测,然后硬盘引导启动操作系统,如下为操作系统启动相关的各个概念。 一、BIOS 基本输入输出系统(Basic Input Output Sy…

基于Java+SpringBoot+vue前后端分离校园周边美食探索分享平台设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

opencv-19 图像色彩空间转换函数cv2.cvtColor()

cv2.cvtColor() 函数是 OpenCV 中用于图像颜色空间转换的函数。它允许你将图像从一个色彩空间转换为另一个色彩空间。在 Python 中,你可以使用这个函数来实现不同色彩空间之间的转换。 函数的基本语法为: cv2.cvtColor(src, code[, dst[, dstCn]])参数…

leetcode5. 最长回文子串(Manacher - java)

Manacher回文算法 leetcode5. 最长回文子串Manacher 算法 manacher 算法 leetcode5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s “…

搭建关键字驱动自动化测试框架

前言 上篇文章我们已经了解到了数据驱动自动化测试框架是如何构建和驱动测试的!那么这篇文章我们将了解关键字驱动测试又是如何驱动自动化测试完成整个测试过程的。关键字驱动框架是一种功能自动化测试框架,它也被称为表格驱动测试或者基于动作字的测试…

Windows10 下 Neo4j1.5.8 安装教程

前言 Neo4j 是一个高性能的、NOSQL 图形数据库,它将结构化数据存储在网络上而不是表中。基于磁盘的、具备完全的事务特性的 Java 持久化引擎,这里就不把他和常用关系型数据库做对比了。因为篇幅有限,我这里也是第一次使用,所以以…

elasticsearch报错问题

标题1.报错问题 标题2.新建一个配置类 package cn.itcast.hotel.config;import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import o…

【Linux】Tcp协议的通讯流程,浅谈三次握手四次挥手

文章目录 Tcp协议的通讯流程一、协议定制与网络版计算器的实现二、json的使用总结 Tcp协议的通讯流程 上一篇文章我们讲解了如何实现Tcp服务器,Tcp的接口也用了,下面我们就看一下Tcp协议的通讯流程: 在服务端,我们首先要创建一个…

电脑C盘空间大小调整 --- 扩容(扩大/缩小)--磁盘分区大小调整/移动

概述: 此方法适合C盘右边没有可分配空间(空闲空间)的情况,D盘有数据不方便删除D盘分区的情况下,可以使用傲梅分区助手软件进行跨分区调整分区大小,不会损坏数据。反之可直接使用系统的磁盘管理工具进行调整…

Flutter学习—— Vscode创建项目

目录 一、Vscode创建项目 二、补充五种项目类型 Application: Module 模块开发, Package开发 Plugin 插件开发 Skeleton 骨架开发 一、Vscode创建项目 1.快捷键 CtrlShiftP 打开命令面板,选择新项目 2.选择需要开发的项目类型 Application 应用开…

Tomcat 的使用(图文教学)

Tomcat 的使用(图文教学) 前言一、什么是Tomcat?二、Tomcat 服务器和 Servlet 版本的对应关系三、Tomcat 的使用1、安装2、目录介绍3、如何启动4、Tomcat 的停止5、如何修改 Tomcat 的端口号6、如何部暑 web 工程到 Tomcat 中6.1 方式一6.2 …

红队打靶:Nullbyte打靶思路详解(vulnhub)

目录 写在开头 第一步:主机发现与端口扫描 第二步:Web渗透 第三步:hydra密码爆破 第四步:SQL注入大赏 方法一:手工SQL注入之联合查询 方法二:SQL注入写入一句话木马 方法三:SQL注入写入…

C语言学习笔记 VScode设置C环境-06

目录 一、下载vscode软件 二、安装minGW软件 三、VS Code安装C/C插件 3.1 搜索并安装C/C插件 3.2 配置C/C环境 总结 一、下载vscode软件 在官网上下载最新的版本 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 二、安装minGW…

测试覆盖率 JVM 字节码测试运用 - 远程调试、测试覆盖、影子数据库

目录 前言: 简介 基础使用方式介绍 工具特性 前言: 在软件开发中,测试覆盖率是一个非常重要的指标,它表示代码中所有的测试用例是否都已经被覆盖到。JVM 字节码测试是一种比较新的测试方法,它可以对 JVM 字节码进…

nlp系列(6)文本实体识别(Bi-LSTM+CRF)pytorch

模型介绍 LSTM:长短期记忆网络(Long-short-term-memory),能够记住长句子的前后信息,解决了RNN的问题(时间间隔较大时,网络对前面的信息会遗忘,从而出现梯度消失问题,会形成长期依赖…

开源项目注意事项

fork项目后,记得另外开启一个分支然后在新分支上进行开发,push到仓库后从分支往原项目提交。 否则会出现Partially verified(导致提交pr后auto-merge失败) 注意git提交操作 https://blog.csdn.net/sonichenn/article/details/13…