小工具      在线工具  汉语词典  css  js  c++  java

Docker网络与Docker Compose服务编排

# docker,docker,网络,容器 额外说明

收录于:157天前

docker网络

docker是以镜像一层一层构建的,而基础镜像是linux内核,因此docker之间也需要通讯,那么就需要有自己的网络。就像windows都有自己的内网地址一样,每个docker容器也是有自己的私有地址的。
在这里插入图片描述
docker inspect [docker_ID]

在这里插入图片描述

Docker中的地址都是B类地址,比192开头的地址要多。

在这里插入图片描述
docker有三种网络模式,bridge是桥接模式,是在docker引擎虚拟一个网卡,为每个docker容器分配一个ip,docker默认就是这种模式;host相当于NAT模式就是共享主机ip,docekr服务没有自己的ip公用主机的ip地址,然后通过分配端口来区分不同的服务进而通讯,在该模式下服务是docker容器私有的,端口是公开的。例如主机ip是192.168.42.128,那么docker1服务占用了80端接口,主机就不能在使用80端口。(启动容器docker run不需要端接口映射,端口公共公开的)。第三种none用户自己DIY 。

在这里插入图片描述

在这里插入图片描述

参考Docker 四种网络模式

网络服务

拉取一个nginx镜像
在这里插入图片描述
启动容器
在这里插入图片描述
对于nginx服务首先是要能够在本机上访问的,对于回溯地址127.0.0.1和本机内网ip192.168.42.128都能访问才对,如下所示:
在这里插入图片描述
在这里插入图片描述
网络一般通过套接字访问,私网和公网通过NAT转接。

内网与外网通信(端口映射原理)

为内网服务设置端口后,外部访问该服务也需要通过该端口进行。那么对于docker来说,自己的网桥分配的IP如172.17.0.2也应该是可以访问的,如下

在这里插入图片描述
因此,docker服务就可以通过桥接分配的自己的IP实现访问,docker内部的ip是由docek0网卡分配,所以docker的ip是可能发生变化的,那么在访问是,就无法确定ip和容器的对应关系,在构建容器时无法确定具体的ip只能创建成功后查看,所以不能仅仅通过ip确定容器。

一般指定容器名称,容器IP由docker0自动分配。然后通过容器名称的映射就可以获取到服务。即使容器宕机,只要容器名称不变,重构后的容器仍然可以访问原来的服务。

docker通过docker --link自定义网络,就可以实现通过容器名访问容器服务,无需将ip固定。https://docs.docker.com/network/links/

在这里插入图片描述
官方文档上显示要移除了,有兴趣可以去官网查看。

容器编排

docker-compose简介

主机的docker引擎上可以启动多个容器,每个容器相互独立。因此,运维时需要对这些容器进行独立管理。这显然是一件棘手的事情。 Docker Compose是一个独立的容器管理工具(管理主机上的所有容器),提供相应的命令,包括启动、运行和停止整个集群容器。 (Docker Swarm和Kubernetes是跨主机容器容器管理平台)。

学过spring的人一定都知道IOC容器。 Compose也是类似的功能,可以管理各个容器,保证容器的独立性。

在这里插入图片描述

使用 Compose 的三个步骤:

  1. 使用 Dockerfile 定义应用程序的环境。

  2. 使用 docker-compose.yml 定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。

  3. 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

下载并安装

参考文档

官方文档

从 github 下载 docker-compose:

curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

v2.17.2是版本,可以更换,compose和docker引擎对应的版本。

在这里插入图片描述

# 授予目录权限

sudo chmod +x /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose --version

在这里插入图片描述

如果使用上述命令拒绝访问,请切换到超级用户。

显示docker-compse版本后表示安装成功。

高版本的docker会自动下载docker compose,如在这里插入图片描述
下载的dokcer24.0.4版本中就自动安装了docekr compose。
在这里插入图片描述

docker compose最终要的就是docker-compose.ymlDockerfile,前者定义所有容器的编排,后者定义单个容器的服务。

Dockerfile就不再介绍了,直接上docker-compose.yml,其是一种yml配置文件,对容器编排配置,然后通过docker-compose up启动服务群。

在这里插入图片描述

配置文件

官方语法

Docker Compose 的 YAML 文件包含 4 个一级 key是versionservicesnetworksvolumes

version是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。

services用于定义不同的应用服务。Docker Compose 会将每个服务部署在各自的容器中。

networks用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。 这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不 同的网络类型。

volumes用于指引 Docker 来创建新的卷。

第二级参数如下

在这里插入图片描述

Docker与Docker Compose的关系及应用

新手教程

如下所示,通过docker-compose.yml启动两个容器和redis服务,并部署一个基于Go的Web项目来操作redis。 yml文件如下:

version: '3'
services:
  go-web:
    image: go-web:1.0
    container_name: goweb
    ports: 
      - "8000:8000"
    depends_on: 
      - redis
  redis:
    image: redis
    ports:
      - "6379:6379"
    command: redis-server /etc/redis/redis.conf

基于go项目构建的dcoker镜像的Dokcerfile文件

FROM ubuntu

EXPOSE 8000
RUN sed -i 's#http://archive.ubuntu.com/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/apt/sources.list
RUN apt update

WORKDIR /usr/local/go

COPY main index.html .

ENTRYPOINT ["./main"]

go项目打包后是一个二进制文件,不需要配置go环境。

Dockerfile构建完镜像后,通过docker compose up -d启动两个容器,如下图

在这里插入图片描述

启动两个服务

在这里插入图片描述

在这里插入图片描述

微软官方教程

k8s

k8s系列第五篇文章(docker-compose)

kubernetes容器技术系列

. . .

相关推荐

额外说明

若依集成yuicompressor实现(CSS/JS压缩)

在Maven打包的时候可以使用YUI Compressor(压缩CSS/JS)文件,使用yuicompressor-maven-plugin插件进行压缩后会减小体积,提高请求速度。 在pom.xml文件中增加该插件的定义,示例如下: <build> <

额外说明

TOIMAGE功能重复图片

使用 【TOIMAGE函数显示单元格图片】https://help.fanruan.com/finereport/doc-view-854.html 但是图片会重复显示 我记得之前好像遇到过,就是调整图片宽高就行 解决方案 找到了

额外说明

《MySQL入门教程》第25章 DML语句删除数据

文章目录 25.1 单表删除 25.2 跨表删除 25.3 多表删除 上一篇我们介绍了如何使用 UPDATE 语句更新数据,本篇继续学习 MySQL 中的数据删除操作,也就是DELETE语句。 25.1 单表删除 MySQL 使用 DELETE 语句删除

额外说明

文件传输协议

ftp 1.ftp简介 网络文件共享服务主流的主要有三种,分别是ftp,nfs,samba FTP是File Transfer Protocol文件传输协议的简称,用于internet上的控制文件的双向传输。 FTP也是一个应用程序,基于不同的操作系统有

额外说明

使用SourceCRT使用sftp从远程主机上传和下载文件

从远程主机下载文件或者向远程主机上传文件,可以使用专门的ftp工具,如UE中的ftp组件,操作非常简单。由于最近更换电脑, 操作系统从32位升级到64位,导致原来的UE安装总是出问题,换了两个版本的,一个因为注册机无法启动,不能破解。另一个 ftp组件有

额外说明

【Java 进阶篇】深入了解 Bootstrap 栅格系统

在网页开发中,创建响应式的布局是至关重要的,因为不同设备和屏幕尺寸需要不同的布局来呈现内容。Bootstrap 提供了一个强大的栅格系统,使开发者能够轻松创建适应不同屏幕的网页布局。本文将深入介绍 Bootstrap 栅格系统,面向初学者,帮助您充分了解

额外说明

系统缺失d3dx10_35.dll文件导致软件或游戏无法运行怎么办?

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个d3dx10_35.dll文

额外说明

知更鸟 wordpress_如何通过StartBooking更好地管理WordPress中的在线预订

罗宾 WordPress 您想更好地管理您的 WordPress 网站上的在线预订吗?许多 WordPress 企业和个人依靠预订系统来高效地运营业务和管理客户。在本文中,我们将向您展示如何使用 StartBooking 更好地管理 WordPress

ads via 小工具