当前位置: 首页 > news >正文

Linux运维学习第十四周

目录

1、docker的安装,部署

2、总结docker file的指令和含义

2.1FROM

 2.2LABEL

  2.3RUN

  2.4ENV

  2.5COPY

  2.6ADD

 2.7CMD

3、制作一个nginx镜像

3.1制作docker file

3.2制作nginx相关文件

3.2.1获取安装包

3.2.2制作build.sh文件

3.2.3制作docker file

3.2.4执行脚本

3.2.5运行镜像

3.2.6测试

4、基于docker完成spug平台的部署

4.1拉取镜像

4.2启动容器

4.3初始化

4.4访问测试

5、总结docker的网络通讯模型和原理

5.1桥接模式

5.2主机模式

5.3none模式

5.4overlay模式

5.5mavlan模式

5.6docker的网络通讯原理


1、docker的安装,部署

Docker的安装,服务器与客户端之间的通信-CSDN博客

如果获取Docker镜像-CSDN博客

2、总结docker file的指令和含义

2.1FROM

作用:指定父镜像

格式:

FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]

举例:

FROM scratch #所有镜像的起源镜像,相当于JAVA中Object类
FROM ubuntu
FROM ubuntu:bionic
FROM debian:buster-slim

 2.2LABEL

作用:指定镜像元数据

格式:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

举例:

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

  2.3RUN

作用:执行shell命令,注意这里的是sh而不是bash,某些指令不支持,比如花括号的翻译

格式:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

举例:

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
RUN ["/bin/bash", "-c", "echo hello world"]
RUN yum -y install epel-release \&& yum -y install nginx \&& rm -rf /usr/share/nginx/html/*&& echo "<h1> docker test nginx </h1>" > /usr/share/nginx/html/index.html

  2.4ENV

作用:设置环境变量

格式:

ENV <key> <value>  

举例:

ENV VERSION=1.0 DEBUG=on NAME="Happy Feet"
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC
/usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

  2.5COPY

作用:复制本地宿主机的文件到容器中

格式:

COPY [OPTIONS] [--chown=<user>:<group>] <src>... <dest>
COPY [OPTIONS] [--chown=<user>:<group>] ["<src>",... "<dest>"] #路径中有空白字符时,建议使用此格式

举例:

COPY hom* /mydir/    
COPY hom?.txt /mydir/
#多阶段构建
COPY --from=build /myapp /usr/bin/

  2.6ADD

作用:复制和解包文件,是加强版的COPY

格式:

ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

举例:

ADD test relativeDir/          # adds "test" to `WORKDIR`/relativeDir/
ADD test /absoluteDir/         # adds "test" to /absoluteDir/
ADD --chown=55:mygroup files* /somedir/
ADD --chown=bin files* /somedir/
ADD --chown=1 files* /somedir/
ADD --chown=10:11 files* /somedir/
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /

 2.7CMD

作用:容器启动命令

格式:

#格式1:使用exec形式,推荐方式,第一个参数必须是命令的全路径,此种形式不支持环境变量,注意:是双引
号,不能是单引号
CMD ["executable","param1","param2"] 
#格式2:shell形式,默认/bin/sh 中执行,提供给需要交互的应用;此种形式支持环境变量,相当于执行
/bin/sh -c "command param1 param2"
CMD command param1 param2
推荐用脚本启动,把脚本放在镜像的路径中
CMD ["脚本名"]

举例:

CMD ["nginx", "-g", "daemon off;"]
CMD ["/apps/nginx/sbin/nginx", "-g","daemon off;"]
CMD ["mynginx.sh"]

3、制作一个nginx镜像

3.1制作docker file

FROM alpine:3.18.4
LABEL author=wang version=1.0 mail=root@wangxiaochun.com
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/' /etc/apk/repositories && \apk update && apk --no-cache add tzdata   gcc make curl zip unzip net-tools pstree wget libgcc libc-dev libcurl \libc-utils pcre-dev zlib-dev libnfs pcre pcre2 libevent libevent-dev iproute2   && \ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo"Asia/Shanghai" > /etc/timezone && \addgroup  -g 888 -S nginx && adduser  -s /sbin/nologin -S -D  -u 888 -Gnginx nginx 
ADD nginx-1.24.0.tar.gz /usr/local/src 
RUN cd /usr/local/src/nginx-1.24.0 && ./configure --prefix=/usr/local/nginx && make && make install && \ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx && \chown -R nginx:nginx /usr/local/nginx/ && rm -rf /usr/local/src/nginx-1.24.0 
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
#ADD www.wang.org.conf /usr/local/nginx/conf/conf.d/www.wang.org.conf
#ADD index.html /data/website/index.html
COPY mynginx.sh /usr/local/bin/mynginx.sh
CMD ["mynginx.sh"]

3.2制作nginx相关文件

3.2.1获取安装包

wget http://nginx.org/download/nginx-1.24.0.tar.gz

3.2.2制作build.sh文件

vim build.sh
#!/bin/bash
docker build -t alpine-base:3.11 .

3.2.3制作docker file

vim Dockerfile
ARG VERSION=3.11
FROM alpine:$VERSION
LABEL maintainer="wangxiaochun <root@wangxiaochun.com>"
#COPY repositories /etc/apk/repositories 
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/' /etc/apk/repositories && apk update && apk --no-cache add tzdata   gcc make curl zip unzip net-tools pstree wget libgcc libc-dev libcurl libc-utils pcre-dev zlib-dev libnfs pcre pcre2 libevent libevent-dev iproute2 && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

3.2.4执行脚本

/bin/bash build.sh

3.2.5运行镜像

docker run -d -p 80:80 nginx-alpine:1.16.1

3.2.6测试

curl 127.0.0.1
Test Page based nginx-alpine

4、基于docker完成spug平台的部署

4.1拉取镜像

docker pull registry.aliyuncs.com/openspug/spug

4.2启动容器

docker run -d --restart=always --name=spug -p 80:80 registry.aliyuncs.com/openspug/spug

4.3初始化

docker exec spug init_spug admin 123456

4.4访问测试

在浏览器输入

http://localhost:80

用户名:admin

密码:123456

5、总结docker的网络通讯模型和原理

5.1桥接模式

这是 Docker 默认的网络模式。在桥接模式下,Docker 会在宿主机上创建一个虚拟网桥(默认为docker0 ),每个容器都会创建一对虚拟网卡(veth pair),其中一端连接到容器内部,另一端连接到docker0网桥上。容器之间通过docker0网桥转发数据包进行通信,容器与宿主机之间也能通过这个网桥进行通信。这种模式下,容器有自己独立的 IP 地址,不同容器之间的网络是隔离的,但可以通过配置端口映射,将容器内部端口映射到宿主机端口,实现外部对容器服务的访问。

5.2主机模式

容器共享宿主机的网络命名空间,容器不会虚拟出自己的网卡、配置自己的 IP 等,而是使用宿主机的 IP 和端口。这种模式下,容器可以直接使用宿主机的网络资源,网络性能较好,但容器之间的网络隔离性较差,并且容器内服务使用的端口不能与宿主机上已有的服务端口冲突。

5.3none模式

容器拥有自己的网络命名空间,但没有默认配置任何网络设备,容器完全与外界隔离,只提供了 lo 回环网络接口。这种模式适用于对网络隔离性要求极高,或者需要手动为容器配置复杂网络的场景。

5.4overlay模式

用于跨多个 Docker 主机的容器之间进行通信。它通过构建一个覆盖网络,将多个 Docker 主机的网络连接起来,容器可以通过这个覆盖网络实现跨主机通信。overlay 模式通常用于 Docker Swarm 或 Kubernetes 等容器编排平台,实现容器集群的网络管理,它使用 VXLAN 等技术来封装数据包,实现不同主机上容器的二层通信。

5.5mavlan模式

为容器分配一个 MAC 地址,使其看起来像宿主机网络中的一个物理设备,直接连接到宿主机所在的网络。这种模式下,容器可以直接使用宿主机所在网络的 IP 地址,网络性能接近物理机,适用于需要容器直接参与宿主机网络的场景,比如运行一些网络嗅探、网络监控等工具。

5.6docker的网络通讯原理

容器内访问外部网络:当容器内的应用程序发起对外网络请求时,数据包首先通过容器内的虚拟网卡发出,对于桥接模式,数据包会到达docker0网桥。然后,通过 NAT(网络地址转换)技术,将容器的私有 IP 地址转换为宿主机的 IP 地址,再由宿主机的物理网卡将数据包发送到外部网络。
外部网络访问容器内服务:以桥接模式下的端口映射为例,当外部网络向宿主机的某个映射端口发起请求时,宿主机的内核会根据端口映射规则,将请求转发到对应的容器内部端口,从而实现外部对容器内服务的访问。
容器间通信:在同一宿主机上且处于桥接模式的容器,它们之间的通信通过docker0网桥进行转发。不同容器的虚拟网卡连接到docker0,数据包在网桥上根据目标 IP 地址进行转发。如果是跨主机的容器通信,在使用 overlay 模式时,数据包会先封装在 VXLAN 隧道中,通过宿主机之间的网络传输到目标宿主机,然后在目标宿主机上解封装,再转发到对应的容器。

http://www.dtcms.com/a/325988.html

相关文章:

  • wed前端第三次作业
  • 营销 “远交近攻”:开辟市场新天地-中小企实战运营和营销工作室博客
  • MySQL数据库简介
  • 【基本有序数组中找到有且仅有的一个无序元素并进行排序之顺序法】2022-10-12
  • 贪心----3. 跳跃游戏 II
  • 计算机网络:1、OSI参考模型和TCP/IP模型
  • 天塌了!HCIE数通实验预计今年Q4变题,难度再上升?!
  • Linux ethernet驱动移植之常见问题
  • 【Docker-Day 13】超越默认Bridge:精通Docker Host、None与自定义网络模式
  • 从 0 到 1:用 MyCat 打造可水平扩展的 MySQL 分库分表架构
  • 【算法专题训练】11、字符串中的变位词
  • 类和对象(中上)
  • 计算机网络---DNS(域名系统)
  • Go 语言中的切片排序:从原理到实践玩转 sort 包
  • 【第四章:大模型(LLM)】05.LLM实战: 实现GPT2-(6)贪婪编码,temperature及tok原理及实现
  • 云服务器部署SSM项目
  • 逻辑备份恢复工具gs_dump/gs_restore
  • Apache Ignite分片线程池深度解析
  • app,h5,微信,携带传递参数的两种方法getCurrentPages()
  • LAMP/LNMP示例
  • Unknown collation: ‘utf8mb4_0900_ai_ci‘
  • thymeleaf 日期格式化显示
  • 基于 ZooKeeper 的分布式锁实现原理是什么?
  • Vue 利用el-table和el-pagination组件,简简单单实现表格前端分页
  • 【数据库】如何使用一款轻量级数据库SqlSugar进行批量更新,以及查看最终的Sql操作语句
  • QT_QUICK_BACKEND 环境变量详解(AI生成)
  • Linux中配置DNS
  • 在 Rocky Linux 9.2 上使用 dnf 安装 Docker 全流程详解
  • 高并发场景下抢单业务解决方案实现(乐观锁 + 分布式锁)
  • Python洛谷做题31:P5726 【深基4.习9】打分