Linux下构建OpenEuler22.03+Nginx的Docker镜像

news2025/1/20 6:55:29

1. 制作OpenEuler22.03的Docker镜像

首先,下载OpenEuler20.03的镜像压缩包:

下载链接为:

https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS/docker_img/x86_64/openEuler-docker.x86_64.tar.xz

这里我们可以顺便下载一下对应的SHA256校验码:

https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS/docker_img/x86_64/openEuler-docker.x86_64.tar.xz.sha256sum

使用wget将以上两个东西下载到本地:

wget https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS/docker_img/x86_64/openEuler-docker.x86_64.tar.xz
wget https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS/docker_img/x86_64/openEuler-docker.x86_64.tar.xz.sha256sum

下载下来之后是这样的:

先对比一下sha256校验码是否正确:

sha256sum openEuler-docker.x86_64.tar.xz > temp_file

diff temp_file openEuler-docker.x86_64.tar.xz.sha256sum

rm temp_file

若没有显示任何不同则说明校验成功,这个openEuler-docker.x86_64.tar.xz​是一个完整的压缩包。

接着我们就可以运行以下命令,构建OpenEuler22.03的Docker镜像了:

[aderversa@localhost openEuler22.03]$ sudo docker load -i openEuler-docker.x86_64.tar.xz
[sudo] aderversa 的密码:
9ffaa5c81d2b: Loading layer [==================================================>]  220.9MB/220.9MB
Loaded image: openeuler-22.03-lts:latest

[aderversa@localhost openEuler22.03]$ sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
openeuler-22.03-lts   latest              700ab852642b        2 years ago         213MB

2. 使用Dockerfile构建OpenEuler22.03+Nginx的镜像

2.1. 方法1:镜像中编译

使用vim Dockerfile​创建并打开Dockerfile,然后写入下面的内容:

FROM openeuler-22.03-lts:latest

# 默认nginx版本是1.26.2
ARG nginx_version=1.26.2
ENV NGINX_VERSION=nginx_version

ENV LANG en_US.utf8


RUN set -eux; \
    # 安装nginx编译时的依赖库
    yum install -y tar wget openssl-devel pcre-devel zlib-devel gcc make --nobest && \
    # 用于存放nginx的源码和压缩包
    mkdir -p /tmp/nginx && \
    cd /tmp/nginx && \
    # 根据nginx的版本去获取相应的压缩包,因此需要在构建时指定nginx的版本
    # 这要求用户自己去网上查看有哪些版本
    wget https://nginx.org/download/nginx-${nginx_version}.tar.gz && \
    # 这里暂时没有找到一个进行自动化校验nginx的方法,所以没有校验,不能运行就多构建几次吧
    # 解压缩
    tar -zxvf nginx-${nginx_version}.tar.gz && \
    cd nginx-${nginx_version} && \
    # nginx会被默认安装到/usr/local/nginx,
    # 这里是指定编译参数的地方,想要什么自己定义
    ./configure --with-http_ssl_module && \
    # 编译并安装
    make && make install && chmod +x /usr/local/nginx/sbin/nginx && \
    # 因为nginx默认链接静态库,因此原本的库都不需要了
    # 而且这些软件包存在的话会使得镜像的空间很大,白白浪费空间
    yum clean all && \
    yum remove -y tar openssl-devel pcre-devel zlib-devel gcc make --skip-broken && \
    yum autoremove && \
    # 删除压缩包和解压后的文件,都不需要了
    rm -rf /tmp/nginx

EXPOSE 80

CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

接下来只需要运行Docker构建镜像的命令:

sudo docker build -f ./Dockerfile --build-arg nginx_version=1.24.0 -t nginx:1.24.0 .

请注意,这里的nginx_version​是按照nginx官方的版本来的,你可以去:https://nginx.org/en/download.html。查看有哪些版本可以使用。

使用以下命令查看镜像是否构建成功:

[aderversa@localhost ~]$ sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
nginx                 1.24.0              466b3a1aa924        About an hour ago   608MB
nginx                 latest              9bea9f2796e2        7 weeks ago         192MB
openeuler-22.03-lts   latest              700ab852642b        2 years ago         213MB

我们可以看到,相较于从DockerHub上拉取下来的nginx,这种方法构建的nginx似乎内存空间占用非常大。

使用其他Linux发行版作为基础镜像

你也可以试一试使用别的Linux镜像作为基础镜像(只要它支持yum的话),但如果不支持,你可能需要自己改装一下安装方便的命令,比如使用Ubuntu的时候,将:

sudo yum install gcc
# 改成
sudo apt install gcc

怎样做取决于读者自身的需求。

2.2. 方法2:Linux宿主机编译nginx,然后将其放到镜像里面

采用这种方法的好处,我们不再需要在宿主机中安装各种工具,这些工具可能含有依赖,并且一旦安装可能还卸载不干净。这些我们用不到的工具就会白白占用空间。

之所以能够这样做,是因为Nginx默认是静态链接的,这样它不依赖任何动态库。只要内核支持,那么它就能够运行。

为了避免在容器内安装工具,这里我们在宿主机中编译nginx之后,再使用Dockerfile构建镜像。但是这样做的话如果需要对镜像和Linux宿主机的Linux内核版本由要求。但胜在构建出来的镜像空间小,只是在OpenEuler的基础上增加了5MB左右。

并且使用这种方法对基础镜像要求没那么多,可能只是需要一个Linux环境就可以了。因此不使用OpenEuler而使用其他的Linux镜像也是完全没有问题的。

进入某个目录(自己决定),然后vim Dockerfile​,写入以下内容:

FROM openeuler-22.03-lts:latest

# 默认nginx版本是1.26.2
ARG nginx_version=1.26.2
ENV NGINX_VERSION=nginx_version

ENV LANG en_US.utf8

COPY ./nginx /usr/local/nginx

EXPOSE 80

CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

再次vim build_nginx.sh​,写入以下内容:

#!/bin/bash

# 获取第一个命令行参数
nginx_version="$1"
prefix="$2"

echo "${prefix}"

# 检查是否提供了参数
if [ -z ${nginx_version} ]; then
  echo "Usage: $0 <nginx_version> <nginx_path=/usr/local/nginx>"
  exit 1
fi

if [ -z ${prefix} ]; then
  prefix="/usr/local/nginx"
fi

WORKDIR="$PWD"

echo "${nginx_version}"
echo "${prefix}"
echo "${WORKDIR}"

wget https://nginx.org/download/nginx-${nginx_version}.tar.gz

tar -zxvf nginx-${nginx_version}.tar.gz

cd nginx-${nginx_version}

./configure --with-http_ssl_module --prefix=${prefix}

make && make install

mv ${prefix} ${WORKDIR}

cd ${WORKDIR}
docker build -f Dockerfile -t nginx:${nginx_version} .

rm -rf ${WORKDIR}/nginx*

运行命令:

chmod +x build_nginx.sh
sudo ./build_nginx.sh 1.24.0

之后,等待安装完成,该脚本会自动把中间文件删除。如果中间某个命令失败了,那么它也会负责删除这些中间文件。

使用以下命令查看镜像是否构建的镜像:

[aderversa@localhost nginx]$ sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED              SIZE
nginx                 1.24.0              606e9907154f        About a minute ago   218MB
nginx                 latest              9bea9f2796e2        7 weeks ago          192MB
openeuler-22.03-lts   latest              700ab852642b        2 years ago          213MB

可以看到,这下nginx的空间占用终于是小下来了,而不是安装了工具之后的600多MB的SIZE。

3. 启动nginx容器

使用以下命令运行nginx容器:

sudo docker run -d --name nginx-test -p "80:80" nginx:1.24.0

这里1.24.0​是我在构建镜像是指定的版本,可能和你构建的不一样。

查看Linux的IP,然后使用浏览器去访问一下该IP的HTTP服务,看看Nginx容器是否成功运行。

[aderversa@localhost nginx]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:34:c6:ed brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.131/24 brd 192.168.137.255 scope global dynamic noprefixroute ens33
       valid_lft 1709sec preferred_lft 1709sec
    inet6 fe80::88ff:2ec5:a6de:c6/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:75:9b:58:9d brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:75ff:fe9b:589d/64 scope link
       valid_lft forever preferred_lft forever

查看ip,发现为:192.168.137.131​,我们直接使用curl​来模拟浏览器访问:

[aderversa@localhost nginx]$ curl http://192.168.137.131
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>

</head>

<body>
<h1>Welcome to nginx!</h1>

<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>

</body>

</html>

可以看到访问成功了。这样构建就算完成了。

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

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

相关文章

Coder星球-测试用例设计

项目介绍 Coder星球是一个前后端分离的开源技术交流平台&#xff0c;包括管理后台和web前端&#xff0c;旨在打造一个互相交流技术并共同进步的平台。 项目功能结构图 测试用例 1.登录 2.注册 3.文章发布 4.点赞 5.评论

wow-agent---task2使用llama-index创建Agent

一&#xff1a;创造俩个函数&#xff0c;multiply和add作为fuction calling被LLM当做工具来使用&#xff0c;实现计算一个简单的计算题&#xff1a; from llama_index.llms.ollama import Ollama from llama_index.core.agent import ReActAgent from llama_index.core.tools …

React的应用级框架推荐——Next、Modern、Blitz等,快速搭建React项目

在 React 企业级应用开发中&#xff0c;Next.js、Modern.js 和 Blitz 是三个常见的框架&#xff0c;它们提供了不同的特性和功能&#xff0c;旨在简化开发流程并提高应用的性能和扩展性。以下是它们的详解与比较&#xff1a; Next、Modern、Blitz 1. Next.js Next.js 是由 Ve…

Git - 将指定文件夹或文件忽略(无论添加缓存区或提交都不会显示)

前言 有些时候&#xff0c;我们 不希望 项目有些文件夹被 Git “监控” 起来&#xff0c;而是与 Git 毫无关系。 第一步 注意&#xff1a;touch 与 . 之间有空格。 在 Gitbash 命令窗口中&#xff0c;输入以下命令&#xff1a; touch .gitignore此时&#xff0c;你的项目文件…

HTML5+Canvas实现的鼠标跟随自定义发光线条源码

源码介绍 HTML5Canvas实现的鼠标跟随自定义发光线条特效源码非常炫酷&#xff0c;在黑色的背景中&#xff0c;鼠标滑过即产生彩色变换的发光线条效果&#xff0c;且线条周围散发出火花飞射四溅的粒子光点特效。 效果预览 源码如下 <!DOCTYPE html PUBLIC "-//W3C//D…

C++:bfs解决多源最短路与拓扑排序问题习题

1. 多源最短路 其实就是将所有源头都加入队列&#xff0c; 01矩阵 LCR 107. 01 矩阵 - 力扣&#xff08;LeetCode&#xff09; 思路 求每个元素到离其最近0的距离如果我们将1当做源头加入队列的话&#xff0c;无法处理多个连续1的距离存储&#xff0c;我们反其道而行之&…

Java基础--类和对象

目录 什么是类&#xff1f; 什么是对象 为什么java会设计对象 Java对象该怎么用 程序执行流程 类的加载顺序 什么是类&#xff1f; 类是构建对象的模板&#xff0c;一个类可以创建多个对象&#xff0c;每个对象的数据的最初来源来自对象 public class Student{public in…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)

重新创建WebApi项目&#xff0c;安装Microsoft.AspNetCore.Authentication.JwtBearer包&#xff0c;将之前JwtBearer测试项目中的初始化函数&#xff0c;jwt配置类、token生成类全部挪到项目中。   重新编写login函数&#xff0c;之前测试Cookie和Session认证时用的函数适合m…

Electron实践继续

文章目录 前言一、知识储备前提二、开发工具集&#xff08;一&#xff09;代码编辑器之选&#xff08;二&#xff09;命令行工具运用&#xff08;三&#xff09;Git 与 GitHub 协作利器&#xff08;四&#xff09;Node.js 与 npm 核心环境 你的第一个Electron应用程序 前言 上…

《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统

和组合导航一样&#xff0c;也可以通过预积分 IMU 因子加上雷达残差来实现基于预积分和图优化的紧耦合 LIO 系统。一些现代的 Lidar SLAM 系统也采用了这种方式。相比滤波器方法来说&#xff0c;预积分因子可以更方便地整合到现有的优化框架中&#xff0c;从开发到实现都更为便…

【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮

1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度&#xff0c;来添加对应的按钮和样式&#xff1b;使用 CSS 的浮动效果&#xff0c;参考CSS 实现超过固定高度后出现展开折叠按钮&#xff1b;使用容器查询 – container 语法&#xff1b;使用 clamp 函数进行样式判断。 3. 优…

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版&#xff1a;基本功能判空const修饰 4.2 第二版&#xff1a;优化对于\0的单独拷贝 4.3 第三版&#xff1a;仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…

大文件上传服务-后端V1V2

文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节&#xff0c;把之前做的项目拿过来总结一下&#xff0c;自己写的一个…

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法&#xff0c;将外界的天地灵气吸入体内&#xff0c;初步改造身体&#xff0c;使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…

快速入门:如何注册并使用GPT

文章目录 ProtonMail邮箱步骤 1&#xff1a;访问Proton官网步骤 2&#xff1a;创建ProtonMail账户步骤 3&#xff1a;选择注册免费账户步骤 4&#xff1a;填写邮箱地址和手机号&#xff08;可选&#xff09;步骤 5&#xff1a;邮箱验证&#xff08;必须进行验证&#xff09;步骤…

浅谈云计算22 | Kubernetes容器编排引擎

Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…

Vulnhub DC-8靶机攻击实战(一)

导语   Vulnhub DC-8靶机教程来了,好久没有更新打靶的教程了,这次我们在来更新一期关于Vulnhub DC-8的打靶训练,如下所示。 安装并且启动靶机 安装并且启动靶机,如下所示。 开始信息采集 进入到Kali中,通过如下的命令来查找到靶机的IP地址。 arp-scan -l根据上面的结…

自学SpringBoot笔记

概念 什么是SpringBoot&#xff1f; Spring Boot 是基于 Spring Framework 的一款开源框架&#xff0c;主要用于简化 Spring 应用程序的开发。它通过提供一系列的 开箱即用的功能 和 自动配置&#xff0c;让开发者可以快速构建生产级别的独立应用程序&#xff0c;而无需手动配…

通过学习更多样化的生成数据进行更广泛的数据分发来改进实例分割

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 本次使用的英文整理的一些记录&#xff0c;练习一下为后续SCI发表论文打好基础 Improving Instance Segmentation by Learning Wider Data Distribution with More Diverse Generative Data Abstract In…

USB3020任意波形发生器4路16位同步模拟量输出卡1MS/s频率 阿尔泰科技

信息社会的发展&#xff0c;在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息 与信号处理技术的整个面貌&#xff0c;而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关键 性、乃至决定性的作用&#xff0c;其应用已经深…