Docker容器与虚拟化技术:Docker-Compose

这篇具有很好参考价值的文章主要介绍了Docker容器与虚拟化技术:Docker-Compose。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、理论

1.Docker-Compose

二、实验

1. Docker Compose 安装部署

2.Docker Compose撰写nginx 镜像

3.Docker Compose撰写tomcat 镜像

三、问题

1.Docker Compose 和 Dockerfile 的区别

四、总结


一、理论

1.Docker-Compose

(1)使用场景

使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍 Docker 官方产品 Docker Compose 。
docker swarm(管理跨节点)

Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

(2)简介

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理。

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

(3)部署

#注意必须是在安装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)YML文件编写注意事项

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

注意事项:

①大小写明确

②通过缩进表示层级关系

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

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

⑤#号注释

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

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

#yml 格式
languages:       #序列的映射
  - Java
  - Golang
  - Python
websites:        #映射的映射
  cpu: 2
  memory: 1024M
  swap: 2048M
  disk: 60G 
数据结构:
对象映射: 键值对的字典
animal: pets
 
序列数组: 一组按次序排列的列表
- Cat
- Dog
- Goldfish
 
["Cat", "Dog", "Goldfish"]
 
布尔值
debug: true
debug: false
示例:
# yaml 格式
languages:       #序列的映射
  - Java
  - Golang
  - Python
websites:        #映射的映射
  cpu: 2
  memory: 1024M
  swap: 2048M
  disk: 60G 
键:{值}
 
# Json 格式
{
  languages: [
    'Java',
    'Golang',
    'Python'
  ],
  resources: {
    cpu: '2',
    memory: '1024M',
    swap: '2048M',
    disk: '60G'
  },
}

(5)Compose配置常用字段

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

表1 Compose配置常用字段

字段 描述
build 指定 Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定
dockerfile 构建镜像上下文路径 dockerfile-nginx
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-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

(6)Docker Compose 常用命令

表2 Docker Compose 常用命令

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

(7)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                    #站点网页 

(8)Docker Compose撰写nginx 镜像

(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 <nginx>
#添加环境包
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

cd /opt/compose_nginx/
docker-compose ps					#必须在docker-compose.yml所在目录执行此命令
CONTAINER ID   IMAGE                 COMMAND     CREATED         STATUS         PORTS                                                                            NAMES
8296e92e2aef   compose_nginx_nginx   "/run.sh"   4 minutes ago   Up 4 minutes   0.0.0.0:1216->80/tcp, :::1216->80/tcp, 0.0.0.0:1217->443/tcp, :::1217->443/tcp   web1



浏览器访问:http://192.168.204.141:1216

(9)Docker Compose撰写tomcat镜像

①首先创建一个tomcat的docker_compose文件夹
mkdir -p /opt/compose_tomcat/tomcat
②将tomcat编译安装的jdk包和tomcat包放入tomcat文件夹中
③进入tomcat文件夹编写Dockerfile文件
cd /opt/compose_tomcat/tomcat
vim  Dockerfile
#文件内容如下
FROM centos:7
#基于centos:7镜像
ADD jdk-8u201-linux-x64.tar.gz  /usr/local
ADD apache-tomcat-9.0.16.tar.gz  /usr/local
RUN mv /usr/local/jdk1.8.0_201  /usr/local/java  && mv /usr/local/apache-tomcat-9.0.16 /usr/local/tomcat
#将jdk和tomcat压缩包复制到镜像的/usr/local文件夹下并改名
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
ENV PATH $JAVA_BIN:/usr/local/java/jre/bin:$PATH
#定义路径变量
RUN mkdir /usr/local/tomcat/webapps/lucien \
    && echo -e "<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%>\n<html>\n<head>\n<title>JSP test1 page</title>\n</head>\n<body>\n<% out.println(\"123456\");%>\n</body>\n</html>" > /usr/local/tomcat/webapps/lucien/index.jsp \
    && sed -i '71a <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">' /usr/local/tomcat/conf/server.xml \
    && sed -i '72a <Context docBase="/usr/local/tomcat/webapps/lucien" path="" reloadable="true">'  /usr/local/tomcat/conf/server.xml \
    && sed -i '73a </Context>'  /usr/local/tomcat/conf/server.xml \
    && sed -i '74a </Host>'  /usr/local/tomcat/conf/server.xml
#首先创建tomcat主页存放路径,然后添加主页内容,修改环境变量生效
EXPOSE 8080
#定义端口
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
#启动tomcat
④到compose_tomcat路径下创建tomcat的yml文件
cd /opt/compose_tomcat
vim docker-compose.yml
#内容如下:
version: '3'
#docker-compose版本
services:
#定义servers
  tomcat:
#容器名tomcat
    container_name: web2
    hostname: tomcat-test
#主机名tomcat-test
    build:
      context: ./tomcat
      dockerfile: Dockerfile
#镜像构建dockerfile文件夹位置及名称
    ports:
      - 1280:8080
#端口映射
    networks:
      lnmp:
        ipv4_address: 172.19.0.100
#tomcatip定义
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
          - subnet: 172.19.0.0/16
#自定义网络模式和网段,保存退出
⑤创建并启动tomcat容器,注意在/opt/compose_tomcat路径下执行
docker-compose -f docker-compose.yml up -d
#创建后台启动tomcat容器
docker ps -a 
#查看容器状态及端口映射
#访问本机的1280端口查看是否成功
浏览器访问:http://192.168.204.141:1280

二、实验

1. Docker Compose 安装部署

(1)下载安装包单独安装DockerCompose

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 (2) docker-compose添加执行权限

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 (3) 查看docker-compose版本

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

2.Docker Compose撰写nginx 镜像

(1)准备依赖文件
Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 (2)编写配置文件docker-compose.yml

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

(3)  Docker Compose 文件结构

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 (4)  创建并启动nginx容器

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

(5)浏览器访问

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

3.Docker Compose撰写tomcat 镜像

(1)准备依赖文件

①首先创建一个tomcat的docker_compose文件夹

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

②将tomcat编译安装的jdk包和tomcat包放入tomcat文件夹中

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

③进入tomcat文件夹编写Dockerfile文件

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 ④到compose_tomcat路径下创建tomcat的yml文件

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 ⑤创建并启动tomcat容器,注意在/opt/compose_tomcat路径下执行Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 创建后台启动tomcat容器

Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

 浏览器访问Docker容器与虚拟化技术:Docker-Compose,docker,容器,运维

三、问题

1.Docker Compose 和 Dockerfile 的区别

(1)区别

Docker Compose 和 Dockerfile 都是用于构建和管理 Docker 容器的工具,但它们有着不同的作用和使用方式。

Dockerfile 是一个文本文件,用于定义 Docker 镜像的构建规则。它包含了一系列的指令,用于指定容器运行时的操作系统、软件环境、应用程序、文件拷贝等信息。通过 Dockerfile,可以构建出一个自定义的 Docker 镜像,使得该镜像能够在任意支持 Docker 的主机上运行。

Docker Compose 则是一个用于定义和运行多个 Docker 容器的工具。通过 Docker Compose,可以使用 YAML 文件来描述应用程序的服务、网络、存储等资源,并使用一个命令来启动、停止、重启和管理整个应用程序。在一个 Docker Compose 的配置文件中,可以定义多个 Docker 容器,每个容器都可以使用自定义的 Docker 镜像,并可以指定容器之间的依赖关系和通信方式。

因此,Dockerfile 更多地用于创建和定制 Docker 镜像,而 Docker Compose 更多地用于管理多个 Docker 容器,让它们能够协同工作来构建一个完整的应用程序。

四、总结

序列靠索引获取值,映射靠key获取值

序列类型是有序的元素集合,而映射类型则是键值对的无序集合。文章来源地址https://www.toymoban.com/news/detail-663006.html

到了这里,关于Docker容器与虚拟化技术:Docker-Compose的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Docker容器与虚拟化技术:Dockerfile部署LNMP

    Docker容器与虚拟化技术:Dockerfile部署LNMP

    目录 一、理论 1.LNMP架构 2.背景 3.Dockerfile部署LNMP 3.构建Nginx镜像 4.构建MySQL容器 5.构建PHP镜像 6.启动 wordpress 服务  二、实验  1.环境准备 2.构建Nginx镜像 3.构建MySQL容器 4.构建PHP镜像 5.启动 wordpress 服务  三、问题 1.构建nginx镜像报错 2.构建php镜像报错 2.生成PHP镜像一直为Exit

    2024年02月04日
    浏览(12)
  • Docker容器与虚拟化技术:Docker consul 实现服务注册与发现

    Docker容器与虚拟化技术:Docker consul 实现服务注册与发现

    目录 一、理论 1.Docker consul 二、实验 1.consul部署 2. consul-template部署 三、总结 (1)服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现

    2024年02月11日
    浏览(10)
  • 架构师之路 -- 虚拟化技术与容器Docker,rabbitmq面试题

    架构师之路 -- 虚拟化技术与容器Docker,rabbitmq面试题

    通常架构师们为了提高系统及硬件资源的利用率引入了虚拟化技术。 虚拟化是一种资源管理技术,它可以把各种实体资源抽像后再分隔,从而打破实体结构的限制,最大程度的提高资源的利用率。 今天我们来聊一下传统虚拟化技术和以Docker为代表的容器技术。 虚拟化 虚拟化

    2024年04月12日
    浏览(20)
  • 【Docker】Docker中Linux 容器、网络虚拟化与虚拟局域网的技术特点详细讲解

    【Docker】Docker中Linux 容器、网络虚拟化与虚拟局域网的技术特点详细讲解

    前言 Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux或Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介: 热爱跑步的恒川 ,致力于

    2024年02月09日
    浏览(11)
  • Docker容器与虚拟化技术:OpenEuler 部署 ES 与 Kibana

    Docker容器与虚拟化技术:OpenEuler 部署 ES 与 Kibana

    目录 一、实验 1.环境 2.OpenEuler 部署 ES (EalasticSearch) 3.OpenEuler 部署 Kibana 4.部署 Elasticvue插件 5.使用cpolar内网穿透 6.使用Elasticvue (1)主机 表1  主机 系统 架构 版本 IP 备注 Linux openEuler 22.03 LTS SP2 192.168.204.145(动态) 192.168.204.141(静态) 192.168.204.142(静态) docker 25.0.3 cpolar

    2024年04月17日
    浏览(19)
  • Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介

    Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介

    那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关

    2024年02月09日
    浏览(27)
  • 【云计算学习教程】云计算虚拟化技术和容器技术详解_云计算虚拟化技术与容器技术

    【云计算学习教程】云计算虚拟化技术和容器技术详解_云计算虚拟化技术与容器技术

    这跟交通网络很相似,连接两个城市的交通网络具备的第一个功能就是汽车从一个城市到达另一个城市;第二个功能是控制到底走哪条线路最好。前者就是由公路组成的交通网络,后者就是交通控制系统。 下面我们再来看看传统的网络设备(比如一台路由器)的逻辑分层结构

    2024年04月22日
    浏览(15)
  • 虚拟化和容器技术综合实验

    虚拟化和容器技术综合实验

    一、VMware workstation虚拟化平台的搭建和使用 在VMware workstation中创建虚拟机并安装CentOS。 完成虚拟机的网络配置,添加1块网络适配器,第一块网络适配器采用桥接的方式接入网络,第二块采用NAT的方式接入网络,并配置固定IP地址,使得虚拟机能够ping通物理机并访问外网。

    2024年02月03日
    浏览(12)
  • 虚拟化容器化与docker

    虚拟化容器化与docker

    物理机 : 实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。 虚拟化 :是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算

    2024年02月16日
    浏览(17)
  • 云计算实验-虚拟化和容器技术综合实验

    云计算实验-虚拟化和容器技术综合实验

    一、实验目的 搭建VMware环境,掌握VMware平台的网络配置方法,具备在VMware中创建和管理虚拟机的能力。 掌握在ubuntu系统中安装kvm的方法,具备使用kvm创建和管理虚拟机的能力,同时进一步加深对于虚拟化技术的理解。 实现Docker平台的安装部署及使用,具备管理Docker镜像和容

    2024年01月22日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包