Docker学习—Dockerfile-编译安装nginx实验

Dockerfile-编译安装nginx实验

实验要求

1、以centos7作为基础镜像

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

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

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

5、网页代码上传到容器里:
1.直接做到镜像里 2.使用数据卷挂载使用 /usr/local/nginx1/html

实验步骤

1、编写好nginx安装脚本

编写nginx安装脚本文件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

2、复制其他容器里的nginx.conf配置文件加以修改

12:55:21[root@zjx520 /zjxdocker/nginx]# docker cp zjxnginx-1:/usr/local/nginx1/conf/nginx.conf .
Preparing to copy...
Successfully copied 4.608kB to /zjxdocker/nginx/.
12:55:21[root@zjx520 /zjxdocker/nginx]# ls
install_nginx.sh  nginx.conf


将对外端口80修改为8007

    server {
        # 修改80-》8007
        listen       8007;
        server_name  localhost;

        ......
    }


3、开始编写Dockerfile文件

# 指定基础镜像为centos:7
FROM centos:7

# 声明变量NGINX_VERSION和AUTHOR,以及标签MAINTAINER
ENV NGINX_VERSION 1.23.3
ENV AUTHOR zjx
LABEL MAINTAINER="zjx<3203766770@qq.com>"

# 指定进入容器的后的默认文件夹,如果此文件夹没有,则会创建
WORKDIR /zjx

# 复制当前主机下当前路径下的install_nginx.sh到镜像的/zjx文件夹下
COPY ./install_nginx.sh /zjx

# 声明位置变量,创建镜像时传入
ARG sg

# 在制作镜像时候,在镜像中所要执行的命令
RUN yum install iproute -y \
&& yum install vim -y \
&& yum install iputils -y \
&& yum install net-tools -y \
&& bash /zjx/install_nginx.sh \
&& mkdir -p /zjxvol

# 镜像暴露8007端口
EXPOSE 8007

# 声明环境变量
ENV PATH=/usr/local/nginx1/sbin:$PATH

# 指定容器卷
volume /zjxvol

STOPSIGNAL SIGQUIT

# 复制当前主机下当前路径下的inginx.conf到镜像的/usr/local/nginx1/conf文件夹下
COPY ./nginx.conf /usr/local/nginx1/conf

# 在镜像中执行命令。镜像制造完毕
CMD ["nginx", "-g", "daemon off;"]

4、编译Dokcerfile制造镜像

# --build-arg sg=zwp表示向镜像里面传递一个sg=zwp的变量,不过sg变量在Dockerfile要先定义
# 且记住命令中的.是Docker文件所在的路径

12:38:45[root@zjx520 /zjxdocker/nginx]# docker build -t zjxnginx:1.23.3 --build-arg sg=zwp .
[+] Building 521.1s (9/9) FINISHED                                                                                               
 => [internal] load build definition from Dockerfile                                                                        0.0s
 => => transferring dockerfile: 532B                                                                                        0.0s
 => [internal] load .dockerignore                                                                                           0.0s
 => => transferring context: 2B                                                                                             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: 95B                                                                                            0.0s
 => CACHED [2/4] WORKDIR /zjx                                                                                               0.0s
 => CACHED [3/4] COPY ./install_nginx.sh /zjx                                                                               0.0s
 => [4/4] RUN yum install iproute -y && yum install vim -y && yum install iputils -y && yum install net-tools -y && bash  518.9s
 => exporting to image                                                                                                      2.1s
 => => exporting layers                                                                                                     2.1s
 => => writing image sha256:a91ecb115947b1f54ec3e3d90eee5a5529a765af5f6c12e33e4e00a1a926ca7b                                0.0s 
 => => naming to docker.io/library/zjxnginx:1.23.3 

# 容器制造成功
13:01:19[root@zjx520 /zjxdocker/nginx]# docker images                                                                      
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
zjxnginx     1.23.3    a91ecb115947   13 minutes ago   613MB
 

5、利用新制造的镜像创建容器

# 创建卷nginx_web,且修改_data数据
12:51:57[root@zjx520 /zjxdocker/nginx]# docker volume create nginx_web
nginx_web
13:05:56[root@zjx520 /zjxdocker/nginx]# docker volume inspect nginx_web
[
    {
        "CreatedAt": "2023-03-07T12:52:10+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx_web/_data",
        "Name": "nginx_web",
        "Options": null,
        "Scope": "local"
    }
]
12:52:23[root@zjx520 /zjxdocker/nginx]# cd /var/lib/docker/volumes/nginx_web/_data/
12:52:38[root@zjx520 /var/lib/docker/volumes/nginx_web/_data]# echo "wo shi zhangjiaxin dashuaige! wo de laopo shi zhuwenpei! " >index.html
12:52:38[root@zjx520 /var/lib/docker/volumes/nginx_web/_data]# ls
index.html

# 创建并且运行容器(挂载到容器卷nginx_web中)
12:49:51[root@zjx520 /zjxdocker/nginx]# docker run -d -p 8900:80 --name zjxnginx-1 -v nginx_web:/usr/local/nginx1/html zjxnginx:1.23.3
6d8f9788f030054eb8cdde4f393ae043c2d8d12ea464606e3d11fd5be35027b3

# 查看容器是否创建成功以及是否运行
09:15:48[root@zjx520 /zjxdocker/nginx]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS          PORTS                                               NAMES
6d8f9788f030   zjxnginx:1.23.3   "nginx -g 'daemon of…"   20 hours ago   Up 2 seconds    0.0.0.0:8900->80/tcp, :::8900->80/tcp               zjxnginx-1

实验效果测试

在物理主机上访问网站192.168.220.104:8900

且nginx网页内容会随着/var/lib/docker/volumes/nginx_web/_data的index.html前端内容的改变而改变

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值