• 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的区别

    1. RUN 指令在制作镜像的时候运行的
    2. CMD 和ENTRYPOINT 指令是在容器启动的时候运行的
    3. 运行的时间点不一样

     ENTRYPOINT和CMD的区别

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

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

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

    1. [root@docker1 nginx]# vim install_nginx.sh
    2. #!/bin/bash
    3. #解决软件的依赖关系,需要安装的软件包
    4. yum -y install wget zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make
    5. #download nginx
    6. mkdir -p /nginx
    7. cd /nginx
    8. #解压 下载的nginx的源码包
    9. wget https://nginx.org/download/nginx-1.23.1.tar.gz
    10. tar xf nginx-1.23.1.tar.gz
    11. cd nginx-1.23.1
    12. #生成编译前配置工作-->Makefile
    13. ./configure --prefix=/usr/local/nginx1 --with-threads --with-http_ssl_module --with-http_stub_status_module --with-stream
    14. #编译
    15. make
    16. #编译安装--》将编译好的二进制程序安装指定目录/usr/local/nginx1
    17. make install

    制作Dockerfile

    1. [root@docker1 nginx]# cat Dockerfile
    2. FROM centos:7
    3. ENV NGINX_VERSION 1.23.1
    4. ENV AUTHOR wangsh
    5. LABEL maintainer="wangsh<1486624726@qq.com>"
    6. ARG sg
    7. WORKDIR /sc
    8. COPY . /sc
    9. RUN yum install vim iputils net-tools iproute -y \
    10. && bash /sc/install_nginx.sh
    11. EXPOSE 80
    12. ENV PATH=/usr/local/nginx1/sbin:$PATH
    13. volume /scvol
    14. 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 .
    
    1. make[1]: Leaving directory `/nginx/nginx-1.23.1'
    2. Removing intermediate container 50efe23aaf2e
    3. ---> a57b1b6d5fd2
    4. Step 9/12 : EXPOSE 80
    5. ---> Running in fa38a092bd49
    6. Removing intermediate container fa38a092bd49
    7. ---> 0a72a417abb9
    8. Step 10/12 : ENV PATH=/usr/local/nginx1/sbin:$PATH
    9. ---> Running in 5ff0a1828dc0
    10. Removing intermediate container 5ff0a1828dc0
    11. ---> b9548355e534
    12. Step 11/12 : volume /scvol
    13. ---> Running in 9c867f0f18af
    14. Removing intermediate container 9c867f0f18af
    15. ---> 634e449eae22
    16. Step 12/12 : CMD ["nginx","-g","daemon off;"]
    17. ---> Running in 83925e13050d
    18. Removing intermediate container 83925e13050d
    19. ---> ec3c99645755
    20. Successfully built ec3c99645755
    21. Successfully tagged scnginx:1.23.1

    查看镜像是否制作成功

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

    启动一个容器来测试镜像

    1. [root@docker1 nginx]# docker run -d -p 4433:80 --name aokang-nginx-1 scnginx:1.23.1
    2. 09a5d18c088fa27d2da7ade04888ca06893eb898fc2cb5cc3d789ef92b1dd515
    3. [root@docker1 nginx]# docker ps
    4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    5. 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创建容器,加载卷

    创建一个卷

    1. [root@docker1 nginx]# docker volume create nginx_web
    2. nginx_web
    3. [root@docker1 nginx]# docker volume ls
    4. DRIVER VOLUME NAME
    5. local nginx_web

    查看卷的地址 

    1. [root@docker1 nginx]# docker volume inspect nginx_web
    2. [
    3. {
    4. "CreatedAt": "2022-09-04T14:39:10+08:00",
    5. "Driver": "local",
    6. "Labels": {},
    7. "Mountpoint": "/var/lib/docker/volumes/nginx_web/_data",
    8. "Name": "nginx_web",
    9. "Options": {},
    10. "Scope": "local"
    11. }
    12. ]

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

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

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

    1. [root@docker1 nginx]# docker ps
    2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3. 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
    4. fc652e8c734a nginx "/docker-entrypoint.…" 10 days ago Up 3 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp sc-nginx
    5. [root@docker1 nginx]# ls
    6. Dockerfile install_nginx.sh
    7. [root@docker1 nginx]# docker cp aokang-nginx-1:/usr/local/nginx1/conf/nginx.conf .
    8. [root@docker1 nginx]# ls
    9. Dockerfile install_nginx.sh nginx.conf

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

    1. [root@docker1 nginx]# vim nginx.conf
    2. listen 8007;

    新的Dockerfile

    1. [root@docker1 nginx]# cat Dockerfile
    2. FROM centos:7
    3. ENV NGINX_VERSION 1.23.1
    4. ENV AUTHOR wangsh
    5. LABEL maintainer="wangsh<1486624726@qq.com>"
    6. ARG sg
    7. WORKDIR /sc
    8. COPY . /sc
    9. RUN yum install vim iputils net-tools iproute -y \
    10. && bash /sc/install_nginx.sh
    11. EXPOSE 80
    12. ENV PATH=/usr/local/nginx1/sbin:$PATH
    13. volume /scvol
    14. COPY nginx.conf /usr/local/nginx1/conf
    15. CMD ["nginx","-g","daemon off;"]

    制作镜像 docker build

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

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

    1. [root@docker1 nginx]# docker run -d -p 4455:8007 --name liq-nginx-1 -v nginx_web:/usr/local/nginx1/html scnginx1.23.2
    2. a9276c2ca1670f135c243144fd2d42d25ed9e652d1c54273d773991b30a41ec9
    3. [root@docker1 nginx]#
    4. [root@docker1 nginx]# docker ps
    5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    6. 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
    7. 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
    8. fc652e8c734a nginx "/docker-entrypoint.…" 10 days ago Up 3 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp sc-nginx
    9. [root@docker1 nginx]#

    测试访问

    总结 

     总结:

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

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

  • 相关阅读:
    数据结构算法之——时间复杂度和空间复杂度
    ssm springboot关于java mysql关于查询或者添加中文乱码问题
    Hotspot启动原理(二)
    【数据结构初阶】栈和队列(C语言实现+图解)
    ChatGPT付费创作系统V2.8.4独立版 WEB+H5+小程序端 (新增Pika视频+短信宝+DALL-E-3+Midjourney接口)
    阶段六-Day05-MyBatis3
    详解Java堆的应用场景,思路分析,代码实现
    【电源专题】不合理接地引发的典型问题及地环路隔离的方法
    Redis 分布式锁一步步优化过程
    前端面试题整理(1.0)
  • 原文地址:https://blog.csdn.net/qq_48391148/article/details/126682724