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

Docker - 编译安装nginx镜像

目录

知识点1:制作镜像的常用指令

 RUN和CMD/ENTRYPOINT的区别

首先需要一个安装nginx的脚本

制作Dockerfile

开始制作镜像

查看镜像是否制作成功

启动一个容器来测试镜像

编译安装ngixn镜像升级版 

创建一个卷

查看卷的地址 

进入卷目录创建一个网页文件index.html

将刚才使用nginx镜像制作的容器的面的配置文件docker cp 过来作为我们制作镜像的指定配置文件

修改配置文件,监听端口8007

新的Dockerfile

制作镜像 docker build

起一个容器,使用刚才制作好的卷

测试访问

总结 

按要求编译安装nginx镜像

        1、以centos7为基础镜像

        2、在里面安装好ip,vim,ping命令

        3、编译好nginx,使用我们制定的配置文件nginx.conf

        4、启动容器的时候,就启动nginx

        5、网页代码上传到容器里:

                1.直接做到镜像里面

                2.使用数据卷挂载使用

知识点1:制作镜像的常用指令

 FROM  指定基础镜像

WORKDIR  指定工作目录,就是进入容器的时候,在哪个目录

COPY  复制宿主机里的文件或者目录到容器里的某个目录下

ADD  复制宿主机里的文件或者目录到容器里的某个目录下

RUN  就是在容器运行命令,在制作镜像的时候运行的

CMD  是容器启动的时候运行的命令

ENTRYPOINT  是启动容器的时候运行的命令

ENV  定义环境变量

        ENV NGINX_VERSION   1.19.7: 将1.19.7这个数值赋值NGINX_VERSION这个变量

EXPOSE  申明开放的端口号

ARG  传递参数  在制作镜像的时候使用

 RUN和CMD/ENTRYPOINT的区别

RUN 指令在制作镜像的时候运行的
CMD 和ENTRYPOINT 指令是在容器启动的时候运行的

运行的时间点不一样

 ENTRYPOINT和CMD的区别

1.docker run 启动容器的时候,可以传递参数进入给ENTRYPOINT 里面的命令

2.当2者都存在的时候,CMD里的内容会成为ENTRYPOINT里的参数

首先需要一个安装nginx的脚本

[root@docker1 nginx]# vim install_nginx.sh
#!/bin/bash

#解决软件的依赖关系,需要安装的软件包
yum -y install wget zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make
#download nginx
mkdir -p /nginx
cd /nginx
#解压 下载的nginx的源码包
wget https://nginx.org/download/nginx-1.23.1.tar.gz
tar xf nginx-1.23.1.tar.gz
cd  nginx-1.23.1
#生成编译前配置工作-->Makefile
./configure --prefix=/usr/local/nginx1  --with-threads --with-http_ssl_module    --with-http_stub_status_module --with-stream
#编译
make
#编译安装--》将编译好的二进制程序安装指定目录/usr/local/nginx1
make   install

制作Dockerfile

[root@docker1 nginx]# cat Dockerfile 
FROM centos:7
ENV NGINX_VERSION 1.23.1
ENV AUTHOR wangsh
LABEL maintainer="wangsh<1486624726@qq.com>"
ARG sg

WORKDIR /sc
COPY . /sc
RUN yum install vim iputils net-tools iproute -y \
    && bash /sc/install_nginx.sh
EXPOSE 80
ENV PATH=/usr/local/nginx1/sbin:$PATH
volume /scvol
CMD ["nginx","-g","daemon off;"]

CMD ["nginx", "-g", "daemon off;"]  

#在前台启动nginx程序 ,-g  daemon  off 将off值赋给daemon这个变量,告诉nginx不要在后台启动,在前台启动
daemon是守护进程--》默认在后台运行

nginx -g选项的作用是 设置一个全局的变量 ,给它赋值

开始制作镜像

[root@docker1 nginx]# docker build -t scnginx:1.23.1 --build-arg sg=wang .

make[1]: Leaving directory `/nginx/nginx-1.23.1'
Removing intermediate container 50efe23aaf2e
 ---> a57b1b6d5fd2
Step 9/12 : EXPOSE 80
 ---> Running in fa38a092bd49
Removing intermediate container fa38a092bd49
 ---> 0a72a417abb9
Step 10/12 : ENV PATH=/usr/local/nginx1/sbin:$PATH
 ---> Running in 5ff0a1828dc0
Removing intermediate container 5ff0a1828dc0
 ---> b9548355e534
Step 11/12 : volume /scvol
 ---> Running in 9c867f0f18af
Removing intermediate container 9c867f0f18af
 ---> 634e449eae22
Step 12/12 : CMD ["nginx","-g","daemon off;"]
 ---> Running in 83925e13050d
Removing intermediate container 83925e13050d
 ---> ec3c99645755
Successfully built ec3c99645755
Successfully tagged scnginx:1.23.1

查看镜像是否制作成功

[root@docker1 nginx]# docker images
REPOSITORY   TAG            IMAGE ID       CREATED          SIZE
scnginx      1.23.1         ec3c99645755   44 seconds ago   597MB

启动一个容器来测试镜像

[root@docker1 nginx]# docker run -d -p 4433:80 --name aokang-nginx-1 scnginx:1.23.1
09a5d18c088fa27d2da7ade04888ca06893eb898fc2cb5cc3d789ef92b1dd515
[root@docker1 nginx]# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS        PORTS                                   NAMES
09a5d18c088f   scnginx:1.23.1   "nginx -g 'daemon of…"   2 seconds ago   Up 1 second   0.0.0.0:4433->80/tcp, :::4433->80/tcp   aokang-nginx-1

测试访问: 

编译安装ngixn镜像升级版 

 升级版:

1、指定nginx.conf配置文件

        监听8007端口

2、创建容器的时候,使用卷,加载里面的网页

        2.1 创建卷 nginx_web,新建一个index.html网页文件

        2.2创建容器,加载卷

创建一个卷

[root@docker1 nginx]# docker volume create nginx_web
nginx_web
[root@docker1 nginx]# docker volume ls
DRIVER    VOLUME NAME
local     nginx_web

查看卷的地址 

[root@docker1 nginx]# docker volume inspect  nginx_web 
[
    {
        "CreatedAt": "2022-09-04T14:39:10+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx_web/_data",
        "Name": "nginx_web",
        "Options": {},
        "Scope": "local"
    }
]

进入卷目录创建一个网页文件index.html

[root@docker1 nginx_web]# cd /var/lib/docker/volumes/nginx_web/_data/
[root@docker1 _data]# ls
[root@docker1 _data]# vim index.html
[root@docker1 _data]# cat index.html 
welcome to sanchuang

将刚才使用nginx镜像制作的容器的面的配置文件docker cp 过来作为我们制作镜像的指定配置文件

[root@docker1 nginx]# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                   NAMES
09a5d18c088f   scnginx:1.23.1   "nginx -g 'daemon of…"   11 minutes ago   Up 11 minutes   0.0.0.0:4433->80/tcp, :::4433->80/tcp   aokang-nginx-1
fc652e8c734a   nginx            "/docker-entrypoint.…"   10 days ago      Up 3 hours      0.0.0.0:8090->80/tcp, :::8090->80/tcp   sc-nginx
[root@docker1 nginx]# ls
Dockerfile  install_nginx.sh
[root@docker1 nginx]# docker cp aokang-nginx-1:/usr/local/nginx1/conf/nginx.conf .
[root@docker1 nginx]# ls
Dockerfile  install_nginx.sh  nginx.conf

修改配置文件,监听端口8007

[root@docker1 nginx]# vim nginx.conf 

listen       8007;

新的Dockerfile

[root@docker1 nginx]# cat Dockerfile 
FROM centos:7
ENV NGINX_VERSION 1.23.1
ENV AUTHOR wangsh
LABEL maintainer="wangsh<1486624726@qq.com>"
ARG sg

WORKDIR /sc
COPY . /sc
RUN yum install vim iputils net-tools iproute -y \
    && bash /sc/install_nginx.sh
EXPOSE 80
ENV PATH=/usr/local/nginx1/sbin:$PATH
volume /scvol
COPY nginx.conf /usr/local/nginx1/conf
CMD ["nginx","-g","daemon off;"]

制作镜像 docker build

[root@docker1 nginx]# docker build -t scnginx1.23.2 --build-arg sg=liqiang .
make[1]: Leaving directory `/nginx/nginx-1.23.1'
Removing intermediate container 87f946a3791c
 ---> 7ac89b150903
Step 9/13 : EXPOSE 80
 ---> Running in 4bde77e94b80
Removing intermediate container 4bde77e94b80
 ---> b778d889aa7f
Step 10/13 : ENV PATH=/usr/local/nginx1/sbin:$PATH
 ---> Running in 41d2c9d3cb4f
Removing intermediate container 41d2c9d3cb4f
 ---> 64ebd146fabf
Step 11/13 : volume /scvol
 ---> Running in bd335aee5579
Removing intermediate container bd335aee5579
 ---> 4079a62afe00
Step 12/13 : COPY nginx.conf /usr/local/nginx1/conf
 ---> c1afff975d42
Step 13/13 : CMD ["nginx","-g","daemon off;"]
 ---> Running in 51caa809e192
Removing intermediate container 51caa809e192
 ---> e3ebd0c99bcf
Successfully built e3ebd0c99bcf
Successfully tagged scnginx1.23.2:latest

起一个容器,使用刚才制作好的卷

[root@docker1 nginx]# docker run -d -p 4455:8007 --name liq-nginx-1 -v nginx_web:/usr/local/nginx1/html scnginx1.23.2
a9276c2ca1670f135c243144fd2d42d25ed9e652d1c54273d773991b30a41ec9
[root@docker1 nginx]# 
[root@docker1 nginx]# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                               NAMES
a9276c2ca167   scnginx1.23.2    "nginx -g 'daemon of…"   6 seconds ago    Up 6 seconds    80/tcp, 0.0.0.0:4455->8007/tcp, :::4455->8007/tcp   liq-nginx-1
09a5d18c088f   scnginx:1.23.1   "nginx -g 'daemon of…"   34 minutes ago   Up 34 minutes   0.0.0.0:4433->80/tcp, :::4433->80/tcp               aokang-nginx-1
fc652e8c734a   nginx            "/docker-entrypoint.…"   10 days ago      Up 3 hours      0.0.0.0:8090->80/tcp, :::8090->80/tcp               sc-nginx
[root@docker1 nginx]# 

测试访问

总结 

 总结:

              如果有些配置是需要固定到镜像里的,在制作镜像的时候就COPY进去

                如果容器启动可以加载的,就使用卷挂载进入容器使用

相关文章:

  • 【云原生|设备云】设备APP开发软件细节详解
  • 动态规划 - 字符串分割(Word Break) + 三角矩阵(Triangle)
  • 一种自适应模拟退火粒子群优化算法-附代码
  • 大模型系统和应用——Transformer预训练语言模型
  • fastapi定时任务,增量构建可转债交易数据入mongo和qlib
  • python+java+springboot快递物流之家管理系统
  • k8s之ConfigMap和Secret
  • 停更的公众号
  • 商汤绝影车路协同“进城”!10+个智能网联应用,100+场景算法应用,感知范围扩大1000倍...
  • 阿里“通义”大模型炸场WAIC,背后要从一篇论文讲起
  • 执行 crictl image 命令报错
  • Android移动安全攻防实战 第二章
  • 读书笔记(一)C++prime
  • 【华为机试真题 JAVA】工号不够用了怎么办-100
  • MySQL教程 - 存储过程与自定义函数(Produce Function)
  • Angular 响应式表单 基础例子
  • Angular2开发踩坑系列-生产环境编译
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Consul Config 使用Git做版本控制的实现
  • in typeof instanceof ===这些运算符有什么作用
  • IP路由与转发
  • Magento 1.x 中文订单打印乱码
  • Material Design
  • maven工程打包jar以及java jar命令的classpath使用
  • nfs客户端进程变D,延伸linux的lock
  • Python中eval与exec的使用及区别
  • react 代码优化(一) ——事件处理
  • 从零开始学习部署
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • !!java web学习笔记(一到五)
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #include
  • (007)XHTML文档之标题——h1~h6
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (四)图像的%2线性拉伸
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)程序员疫苗:代码注入
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (轉貼) UML中文FAQ (OO) (UML)
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 药厂业务系统 CPU爆高分析
  • .NET业务框架的构建
  • .net与java建立WebService再互相调用
  • .sdf和.msp文件读取
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [Flex][问题笔记]TextArea滚动条问题
  • [hive] posexplode函数