我是靠谱客的博主 迷你麦片,最近开发中收集的这篇文章主要介绍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进去

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

最后

以上就是迷你麦片为你收集整理的Docker - 编译安装nginx镜像的全部内容,希望文章能够帮你解决Docker - 编译安装nginx镜像所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部