docker容器引擎(四)

news2024/12/23 13:22:02

docker

  • 一、docker compose的理论
  • 二、docker-compose工具实验
    • 创建apache容器
    • 创建LNMP

一、docker compose的理论

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

三大概念:
项目/工程 > 包含一个或多个服务 > 包含一个或多个容器
默认使用项目的目录名做项目名,支持使用-p或者–project-name来指定项目名
在项目的目录中通常会包含一个docker-compose.yml模板文件,此文件为项目的默认配置模板文件(支持使用-f或compose_file来指定项目的 配置文件)
在配置模板文件里面可以定义项目的一个或者多个服务,每个服务包含容器的名称、镜像、端口映射、环境变量、挂载点、依赖关系登配置参数

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

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

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

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 | false
restart                            		设置重启策略,no,always,no-failure,unless-stopped
										no,默认策略,在容器退出时不重启容器。
										on-failure,在容器非正常退出时(退出状态非0),才会重启容器。
										on-failure:3,在容器非正常退出时重启容器,最多重启3次。
										always,在容器退出时总是重启容器。
										unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。
depends_on																								在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。
php:
  depends_on:
    - apache
    - mysql

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

5. Docker Compose 文件结构
yum install -y tree
tree /opt/compose_nginx
/opt/compose_nginx/
├── docker-compose.yml				#创建模板脚本
├── nginx
│?? ├── Dockerfile					#创建容器脚本
│?? ├── nginx-1.12.0.tar.gz			#复制源码包
│?? └── run.sh						#启动服务脚本
└── wwwroot
    └── index.html					#站点网页
	
(1)准备依赖文件
mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /opt/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./

vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

vim Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <wl>
#添加环境包
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.12.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
//方法一:
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf			#关闭 nginx 在后台运行
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
//方法二:
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]


echo "<h1>this is test web</h1>" > /opt/compose_nginx/wwwroot/index.html


(2)编写配置文件docker-compose.yml
vim /opt/compose_nginx/docker-compose.yml
version: '3'
services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16

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工具实验

创建apache容器

安装工具
在这里插入图片描述
创建目录及配置文件
在这里插入图片描述

配置docker compose的配置文件(使用apache服务)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建LNMP

  • 分别创建nginx、MySQL、php的dockefile文件
  • 创建docker-compose.yml文件
    在这里插入图片描述

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

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

相关文章

专项练习-04编程语言-03JAVA-03

1. java 中哪个关键字可以对对象加互斥锁&#xff1f;A transient B synchronized C serialize D static 正确答案&#xff1a;B 官方解析&#xff1a;暂无官方题目解析&#xff0c;去讨论区看看吧&#xff01; 知识点&#xff1a;Java、Java工程师、20172. 关于异常处理机制的…

93.qt qml-自定义Table优化(新增:水平拖拽/缩放自适应/选择使能/自定义委托)

之前我们更新了90.qt qml-Table表格组件(支持表头表尾固定/自定义颜色/自定义操作按钮/排序)_qml 表格_诺谦的博客-CSDN博客 但是一直没出源码,是因为该demo还存在问题,那就是表头表尾固定下,如果是半透明状态下,会看到表头表尾固定后的内容,所以只能重构代码,不能使用重…

关于阅读《重构的时机和方法》这本书所带来的启发

前言 近期&#xff0c;我阅读了由克里斯蒂安克劳森&#xff08;Christian Clausen&#xff09;写的、由郭涛翻译的《重构的时机和方法》这本书&#xff0c;读完这本书的内容你会发现《重构的时机和方法》是一本经典的软件开发书籍&#xff0c;它能够帮助软件开发人员提高代码质…

Java_22_多线程02

多线程 线程通信 线程通信&#xff1a;多个线程因为在同一个进程中&#xff0c;所以互相通信比较容易的。 线程通信的经典模型&#xff1a;生产者与消费者问题。 生产者负责生成商品&#xff0c;消费者负责消费商品。 生产不能过剩&#xff0c;消费不能没有。&#xff08;即时…

创建一个vite项目,一个命令创建

1. 在一个文件夹下打开cmd命令窗口并输入命令&#xff1a; npm init vuelatest //注意&#xff0c;此命令安装的是vue最新的依赖包&#xff0c;步骤也许跟以下有点点区别&#xff0c;不过问题不大 2. 接着询问你是否需要安装以下这些包&#xff0c;这些都是需要的&#xff0c…

华为OD机试真题 Java 实现【最多获得的短信条数】【2023Q1 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&…

Pytorch深度学习------torchvision中dataset数据集的使用(CIFAR10)

文章目录 一、什么是TorchVision二、以torchvision.datasets子模块下的CIFAR10数据集为例1、CIFAR10数据集参数2、代码中使用 一、什么是TorchVision torchvision是pytorch的一个图形库&#xff0c;用来处理图像&#xff0c;主要用来构建计算机视觉模型。 从下面的官网截图可以…

力扣1114.按序打印-----题目解析

题目描述 解析&#xff1a; class Foo {public int a 0;public Foo() {}public void first(Runnable printFirst) throws InterruptedException {// printFirst.run() outputs "first". Do not change or remove this line.printFirst.run();a;}public void second…

【多任务编程-线程通信】

进程/线程通信的方式 某些应用程序中&#xff0c;进程/进程和线程/线程之间不可避免的进行通信&#xff0c;进行消息传递&#xff0c;数据共享等 同一进程的线程之间通信方式包括Windows中常用Event, Message等。 不同进程之间的通信可以利用Event, FileMapping(内存共享), W…

unity进阶--xml的使用学习笔记

文章目录 xml实例解析方法一解析方法二 xml-path创建xml文档 xml实例 解析方法一 解析方法二 xml-path 创建xml文档

测试用例实战

测试用例实战 三角形判断 三角形测试用例设计 测试用例编写 先做正向数据&#xff0c;再做反向数据。 只要有一条边长为0&#xff0c;那就是不符合要求&#xff0c;不需要再进行判断&#xff0c;重复。 四边形 四边形测试用例

Javascript程序异常处理

什么是异常&#xff0c;异常就是我们在编写Javascript程序时出现的一些错误&#xff0c;并会在控制台中抛出这个错误&#xff0c;出现异常其实并不是一件坏事&#xff0c;相对的呢它可以提醒我们开发人员哪里出现了错误&#xff0c;方便我们后续的修改&#xff0c;能让我们的代…

JRebel+XRebel热部署插件激活支持IDEA2023.1

JRebel是一款JVM插件&#xff0c;它使得Java代码修改后不用重启系统&#xff0c;立即生效。IDEA上原生是不支持热部署的&#xff0c;一般更新了 Java 文件后要手动重启 Tomcat 服务器&#xff0c;修改才能生效&#xff1b;所以推荐使用 JRebel 插件进行热部署。 在填入Team UR…

字符串类QString

字符串类QString 构造函数数据操作字符串查找和判断遍历查看字节数类型转换字符串格式 Qt中不仅支持C, C中的字符串类型, 而且还在框架中定义了专属的字符串类型。 Cchar*Cstd::string, char*QtQByteArray, QString QByteArray QString和QByteArray的函数很多都是相似的。。…

Feign远程调用如何携带form url

这是一个需要携带参数在form url上的请求&#xff0c;正常调用方式是这样的 响应&#xff1a; 在Feign中&#xff0c;应该怎么调用呢?? 定义OpenFeignClient接口 FeignClient(value "client-service", url "http://127.0.0.1/api") public interface…

Acwing.897 最长公共子序列(动态规划)

题目 给定两个长度分别为N和M的字符串A和B&#xff0c;求既是A的子序列又是B的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数N和M。 第二行包含一个长度为N的字符串&#xff0c;表示字符串A。 第三行包含一个长度为M的字符串&#xff0c;表示字符串B。字符串…

RunnerGo相比较JMeter有哪些优势

当谈到性能测试需求时&#xff0c;JMeter和RunnerGo都提供了丰富的功能&#xff0c;包括测试场景设置、执行性能测试和性能测试结果分析。然而&#xff0c;这两工具在结构方面存在一些区别。以下是对它们进行比较的另一种角度&#xff1a; 模块化设计&#xff1a; JMeter采用…

16K个大语言模型的进化树;81个在线可玩的AI游戏;AI提示工程的终极指南;音频Transformers课程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; LLM 进化树升级版&#xff01;清晰展示 15821 个大语言模型的关系 这张进化图来自于论文 「On the Origin of LLMs: An Evolutionary …

基于压缩和差分算法的嵌入式平台远程更新设计与分析

传统的嵌入式远程更新方案普遍采用整包更新方式&#xff0c;这种方式更新数据量大&#xff0c;占用网络带宽时间长&#xff0c;同时也增加了设备的功耗。 针对这些问题&#xff0c;提出了以减少更新数据量为核心的两种远程更新方案。这两种方案分别使用LZ77压缩和BSDiff差分算…

【Linux】passwd

passwd 与 root 不同的是&#xff0c;一般帐号在更改密码时需要先输入自己的旧密码 &#xff08;亦即 current 那一行&#xff09;&#xff0c;然后再输入新密码 &#xff08;New 那一行&#xff09;。 要注意的是&#xff0c;密码的规范是非常严格的&#xff0c;尤其新的 dist…