【Linux|Docker】以CentOS 7为基础镜像制作一个目标镜像(Nginx)

这篇具有很好参考价值的文章主要介绍了【Linux|Docker】以CentOS 7为基础镜像制作一个目标镜像(Nginx)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.需求分析

1.以centos7作为基础镜像
2.在里面安装好ip,vim,ping命令
3.编译好nginx,使用我们指定的配置文件nginx.conf  
4.启动容器的时候,就启动nginx
5.网页代码上传到容器里(有两种方式): 
		(1).直接做到镜像里
		(2).使用数据卷挂载使用	
		/usr/local/nginx1/html/

====
需要哪些东西?
1.nginx的安装脚本 install_nginx.sh 源码
https://nginx.org/download/nginx-1.23.3.tar.gz
2.Dockerfile

2.实验环境

CentOS 7.9,Docker 23.0.1,Nginx 1.23.3

3.详细步骤

3.1 准备环境,新建目录
[root@docker1 mydocker]# mkdir nginx
[root@docker1 mydocker]# cd nginx/
[root@docker1 nginx]# pwd
/mydocker/nginx
[root@docker1 nginx]# 
3.2 编写一个编译安装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.3.tar.gz
tar xf nginx-1.23.3.tar.gz
cd  nginx-1.23.3
#生成编译前配置工作-->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
3.3 编写Dockerfile

编写Dockerfile,vim Dockerfile,内容如下:

FROM centos:7
ENV NGINX_VERSION 1.23.3
ENV AUTHOR Jiang_da
LABEL maintainer="jiangda<1404658417@qq.com>"
ARG sg

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

3.4 制作第一版本的镜像并启动一个容器

这一步是为了获得nginx.conf配置文件,以便提高后面步骤的复制修改的效率!

[root@docker1 nginx]# docker build -t jdnginx:1.0 --build-arg sg=jiangda  .
[+] Building 0.0s (9/9) FINISHED                                                                                                                                                             
 => [internal] load .dockerignore                                                                                                                                                       0.0s
 => => transferring context: 2B                                                                                                                                                         0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                    0.0s
 => => transferring dockerfile: 397B                                                                                                                                                    0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                                             0.0s
 => [1/4] FROM docker.io/library/centos:7                                                                                                                                               0.0s
 => [internal] load build context                                                                                                                                                       0.0s
 => => transferring context: 68B                                                                                                                                                        0.0s
 => CACHED [2/4] WORKDIR /jd                                                                                                                                                            0.0s
 => CACHED [3/4] COPY . /jd                                                                                                                                                             0.0s
 => CACHED [4/4] RUN  yum  install  vim net-tools  iputils  iproute -y      && bash /jd/install_nginx.sh && mkdir /jdvol                                                                0.0s
 => exporting to image                                                                                                                                                                  0.0s
 => => exporting layers                                                                                                                                                                 0.0s
 => => writing image sha256:b13ee6fee0edec091c09a7d03fdfb67ecfc7d5895c7c167715347f1675440243                                                                                            0.0s
 => => naming to docker.io/library/jdnginx:1.0                                                                                                                                          0.0s

制作centos镜像,linux,nginx,centos,docker,自动化
启动容器:

[root@docker1 nginx]# docker run -d -p 4433:80 --name jdnginx-1 jdnginx:1.0
1358ab64a54e7be482b3b7511d89e2dd1822a73cc04a5abe3cce96fd393655e5

制作centos镜像,linux,nginx,centos,docker,自动化

====
1.指定nginx.conf配置文件
监听端口号为8008
2.创建容器的时候,使用卷,加载里面的网页
2.1 创建卷 jdnginx_web,新建一个index.html网页文件
2.2 创建容器,加载卷

3.5 指定nginx.conf配置文件

利用docker cp,得到容器的配置文件。

[root@docker1 nginx]# docker cp jdnginx-1:/usr/local/nginx1/conf/nginx.conf .
Preparing to copy...
Successfully copied 4.608kB to /mydocker/nginx/.
[root@docker1 nginx]# 

进行修改,将端口号修改为8008,作为模板的nginx.conf使用:
制作centos镜像,linux,nginx,centos,docker,自动化
目前目录结构:
制作centos镜像,linux,nginx,centos,docker,自动化

3.6 修改Dockerfile
FROM centos:7
ENV NGINX_VERSION 1.23.3
ENV AUTHOR sanchuang_cali
LABEL maintainer="jiangda<1404658417@qq.com>"
ARG sg

WORKDIR /jd
COPY . /jd

RUN  yum  install  vim net-tools  iputils  iproute -y \
     && bash /jd/install_nginx.sh && mkdir /jdvol-1
EXPOSE 8008
ENV PATH=/usr/local/nginx1/sbin:$PATH
volume /jdvol-1
STOPSIGNAL SIGQUIT
COPY nginx.conf  /usr/local/nginx1/conf

CMD ["nginx", "-g", "daemon off;"]
3.7 制作最终镜像

执行docker build -t jdnginx:10.0 --build-arg sg=jiangda .

制作最终镜像jdnginx:10.0,注意制作镜像的时长比较久,因为有一些工具的下载,本人大概花费五分钟左右。你们若也遇到这个问题,希望你们放些耐心噢!

[root@docker1 nginx]# docker build -t jdnginx:10.0 --build-arg sg=jiangda .
[+] Building 266.3s (10/10) FINISHED                                                                                                                                                         
 => [internal] load build definition from Dockerfile                                                                                                                                    0.0s
 => => transferring dockerfile: 451B                                                                                                                                                    0.0s
 => [internal] load .dockerignore                                                                                                                                                       0.0s
 => => transferring context: 2B                                                                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                                             0.0s
 => [1/5] FROM docker.io/library/centos:7                                                                                                                                               0.0s
 => [internal] load build context                                                                                                                                                       0.0s
 => => transferring context: 517B                                                                                                                                                       0.0s
 => CACHED [2/5] WORKDIR /jd                                                                                                                                                            0.0s
 => [3/5] COPY . /jd                                                                                                                                                                    0.0s
 => [4/5] RUN  yum  install  vim net-tools  iputils  iproute -y      && bash /jd/install_nginx.sh && mkdir /jdvol-1                                                                   264.5s
 => [5/5] COPY nginx.conf  /usr/local/nginx1/conf                                                                                                                                       0.0s
 => exporting to image                                                                                                                                                                  1.8s
 => => exporting layers                                                                                                                                                                 1.8s
 => => writing image sha256:8eb57fa1ca60070450e8421eb20d049c92a2cafeb1a43c870fe30e194a91f87c                                                                                            0.0s 
 => => naming to docker.io/library/jdnginx:10.0                                                                                                                                         0.0s

制作centos镜像,linux,nginx,centos,docker,自动化

3.8 使用卷使用数据卷挂载使用
3.8.1 创建卷 jdnginx_web,新建一个index.html网页文件

执行docker volume create jdnginx_web

[root@docker1 nginx]# docker volume create jdnginx_web
jdnginx_web
[root@docker1 nginx]# docker volume inspect jdnginx_web
[
    {
        "CreatedAt": "2023-03-13T04:42:02-04:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/jdnginx_web/_data",
        "Name": "jdnginx_web",
        "Options": null,
        "Scope": "local"
    }
]

3.8.2 新建首页文件index.html在卷对应的目录下
[root@docker1 nginx]# cd /var/lib/docker/volumes/jdnginx_web/_data/
[root@docker1 _data]# ls
[root@docker1 _data]# vim index.html
[root@docker1 _data]# cat index.html 
welcome jiangda's website!
3.8.3 启动容器(使用卷)

执行 docker run -d -p 4455:8008 --name jdd-nginx -v jdnginx_web:/usr/local/nginx1/html jdnginx:10.0

[root@docker1 nginx]# docker run -d -p 4455:8008 --name jdd-nginx -v jdnginx_web:/usr/local/nginx1/html  jdnginx:10.0
2785cde489279bf56dc53f5c7f26b91b61429f60c373bc40702a2a8aa1df0f3c
3.9 访问测试
3.9.1 进入容器,查看ip,vim,ping等命令能否使用
[root@docker1 nginx]# docker exec -it jdd-nginx /bin/bash
[root@2785cde48927 jd]# ip route
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.3 
[root@2785cde48927 jd]# vim  
[root@2785cde48927 jd]# ping 192.168.1.132 -c 1
PING 192.168.1.132 (192.168.1.132) 56(84) bytes of data.
64 bytes from 192.168.1.132: icmp_seq=1 ttl=64 time=0.072 ms

--- 192.168.1.132 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.072/0.072/0.072/0.000 ms
[root@2785cde48927 jd]# 
3.9.2 使用windows本机访问容器宿主机4455端口,看是否运行

成功访问!
制作centos镜像,linux,nginx,centos,docker,自动化
NICE!!!

4.知识点总结

问题一:将代码制作进入镜像和使用卷挂载进入容器,那个方式更加好?
解释:上述是使用卷。如果有些配置是需要固定到镜像里的,在制作镜像的时候就COPY进去;
如果容器启动后可以加载的,就使用卷挂载进入容器使用。


问题二:如何让你制作的镜像比较小?
解释:1.使用基础镜像要小。
	2.少使用RUN和COPY,ADD。
	3.使用镜像启动容器后,再在里面安装软件,使用卷挂载数据。


问题三:Dockerfile内容解答:
q:为什么有的镜像启动需要接-it,有的不需要?
a:centos7或者ubuntu的基础镜像,在启动的时候,运行的程序是bash;
一运行完就马上退出了,使用-it可以保证一直有一个前台进程运行,保证容器不挂掉

q:怎么理解代码:  CMD [“nginx”,"-g",“daemon off;”]
a:让nginx在前台运行;
-g daemon off 将off值赋值给daemon这个变量,告诉ngixn不要在后台启动,在前台启动;
daemon是守护进程,默认在后台运行。

q:有一些命令不能直接install,如何查看某个命令来自哪个包?
a:你可以执行yum provides xxx去获得需要安装什么包;
例如ip命令,你就得安装iproute包;ping命令,你就得安装iputils包。

制作centos镜像,linux,nginx,centos,docker,自动化

收获满满!!!一起加油!!!热爱代码的我们!!!文章来源地址https://www.toymoban.com/news/detail-625925.html

到了这里,关于【Linux|Docker】以CentOS 7为基础镜像制作一个目标镜像(Nginx)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker制作一个python的镜像文件

    个人博客添加链接描述 要制作一个包含Python应用程序的Docker镜像,并在构建过程中复制相应的文件到镜像中,您可以按照以下步骤进行操作: 准备工作: 确保您已在本地安装了Docker,并且可以通过终端或命令行访问Docker命令。 在项目根目录下,将您的Python应用程序准备好,

    2024年02月09日
    浏览(30)
  • docker制作m3u8web播放器镜像基于nginx-alpine镜像

    ZY Player Web项目:https://github.com/Hunlongyu/ZY-Player-Web 这是一个开源的m3u8 web播放器。我们基于这个项目进行打包 打包使用的Dockerfile 打包和运行

    2024年01月19日
    浏览(59)
  • docker基础3——制作镜像(基于容器)

    镜像可以理解为应用程序的集装箱,而docker用来装卸集装箱。 docker镜像含有启动容器所需要的文件系统及其内容,所以镜像是用于创建并启动容器。 docker镜像采用分层构建机制,最底层为bootfs,其上为rootfs。 bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完

    2024年02月07日
    浏览(55)
  • 【Linux】CentOS制作Java+GDAL环境镜像并部署运行SpringBoot项目

    环境部署是一个非常繁琐又耗时的工作,尤其是涉及更换操作系统时,其难度更是成倍的增加。本文通过构建起软件运行镜像,并将SpringBoot项目运行在容器中,以期减小软件部署工作所投入的时间与精力。 在Windows环境下构建了一个SpringBoot项目,涉及对MySQL数据库、PostgreSQ

    2024年02月11日
    浏览(45)
  • Docker学习(二十三)构建 nginx 基础镜像

    在使用容器化部署项目的过程中,我们经常会需要用到 nginx 镜像来作为前端服务的基础镜像,或者作为后端服务的转发和负载均衡。今天我们就一起来看一下如何使用 Dockerfile 构建 nginx 基础镜像。 这里主要介绍三种构建方式: 通过 yum 安装方式构建: 无需手动编译安装,可

    2024年02月08日
    浏览(54)
  • Linux Centos 配置 Docker 国内镜像加速

    在使用 Docker 进行容器化部署时,由于国外的 Docker 镜像源速度较慢,我们可以配置 Docker 使用国内的镜像加速器,以提高下载和部署的效率。本文将介绍如何在 CentOS 系统上配置 Docker 使用国内镜像加速。 首先,我们需要在 CentOS 系统上安装 Docker。可以使用以下命令进行安装

    2024年02月01日
    浏览(50)
  • docker制作tomcat基础镜像,最方便快捷,升级的3种方法

    目录 1.使用原有旧版tomcat镜像,制作新版官方tomcat镜像 2.容器内修改文件打包成新tomcat镜像 3.使用官方安装包制作镜像 示例需求: 在tomcat修改文件conf/server.xml中的Connector模块下添加参数 maxHttpHeadersize=\\\"2000\\\" 并升级tomcat版本至8.5.82,制作一个新镜像 镜像容器内的文件传到本机

    2024年02月10日
    浏览(38)
  • linux(centos) docker 安装 nginx

    ​ 1、拉取nginx最新版本镜像 docker pull nginx:1.24.0 查看镜像 docker images 或者 docker images -a      2. 启动nginx容器 docker run -d -p 80:80 --name nginx nginx:1.24.0   使用docker run命令,启动nginx容器。 --name,设置容器名。为方便记忆,设定名称为nginx -d,后台运行。 -p,端口映射,把容器端

    2024年02月14日
    浏览(40)
  • 基于Linux Alpine 制作 Java 8、11 Docker 镜像并支持中文

    Linux Alpine 1、关于linux alpine 楼主就不多介绍了,在容器化背景下, alpine 非常适合做容器基础镜像 。 2、有兴趣的同学可以转至官网查看 https://www.alpinelinux.org 制作Java镜像 1、楼主这里展示了基于 JDK1.8 和 JDK 11 的镜像制作方式 , 如下为 Dockerfile 文件 2、楼主这里增加了 glibc

    2024年02月09日
    浏览(60)
  • 【使用debian镜像】docker的基础镜像很多,生产环境中使用建议还是不要使用centos和alpine的基础镜像了,直接使用debian的基础镜像即可。

    本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未经博主允许不得转载。 博主CSDN地址是:https://blog.csdn.net/freewebsys 博主掘金地址是:https://juejin.cn/user/585379920479288 博主知乎地址是:https://www.zhihu.com/people/freewebsystem 为啥要使用debian镜像呢? 首先 centos的官网已

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包