菜单
本页目录

镜像动态化实验-nginx

1、编写 Dockerfile 文件

[root@localhost ~]# mkdir nginx ; cd nginx
[root@localhost nginx]# vim Dockerfile 
[root@localhost nginx]# cat Dockerfile 
FROM centos:centos7.9.2009
MAINTAINER yq "yq@qq.com"
LABEL nginx_veriosn=1.18.0
ENV INDEX_DATA xinxianghf
RUN cd /etc/yum.repos.d/ && mkdir back && mv *.repo back/ && curl http://mirrors.163.com/.help/CentOS7-Base-163.repo > 163.repo && yum clean all
RUN yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel make
ADD ./nginx-1.18.0.tar.gz /root/
RUN cd /root/nginx-1.18.0 && ./configure --prefix=/usr/local/nginx && make && make install
RUN rm -rf /usr/local/nginx/html/index.html
WORKDIR /usr/local/nginx
ADD ./startup.sh /root/
RUN chmod a+x /root/startup.sh
CMD /root/startup.sh

2、编写启动脚本

[root@localhost nginx]# vim startup.sh 
[root@localhost nginx]# cat startup.sh 
#!/bin/bash
echo $INDEX_DATA >> /usr/local/nginx/html/index.html			#此处采用 ">>"" 追加,为了后续的一个实验效果,应该使用 ">" 表示替换
/usr/local/nginx/sbin/nginx
touch /usr/local/nginx/logs/access.log
tail -f /usr/local/nginx/logs/access.log

3、上传 nginx 压缩包

image-20230101222340787

[root@localhost nginx]# ls
Dockerfile  nginx-1.18.0.tar.gz  startup.sh

4、build 制作镜像 nginx:v1

[root@localhost nginx]# docker build -t nginx:v1 .
[root@localhost nginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v1                  bed3baaf2cd2        10 minutes ago      519 MB
centos              centos7.9.2009      eeb6ee3f44bd        15 months ago       204 MB

5、使用不同参数运行镜像

**要求:**使用镜像时,传递不同的参数,得到不同的效果

[root@localhost nginx]# docker run --name nginx-80 -d -p 80:80 nginx:v1				#80端口使用默认参数运行容器
fd55cea6cf46f80e3ee1689317aeee7f6431b8c02930e645a82b408c0fb1fd58
[root@localhost nginx]# docker run --name nginx-8080 -d -p 8080:80 --env INDEX_DATA=yangqin nginx:v1	#8080端口修改参数运行容器
1007696c8147ca4f03840731bebba53f9ea8606b543f514efa893f7c29c3b004
[root@localhost nginx]# docker ps -a												#查看所有容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1007696c8147        nginx:v1            "/bin/sh -c /root/..."   4 seconds ago       Up 3 seconds        0.0.0.0:8080->80/tcp   nginx-8080
fd55cea6cf46        nginx:v1            "/bin/sh -c /root/..."   29 seconds ago      Up 28 seconds       0.0.0.0:80->80/tcp     nginx-80

6、浏览器访问测试

1)访问80端口,使用默认参数值 xinxianghf

image-20230101223059686

2)访问8080端口,使用修改后的参数值 yangqin

image-20230101223206281

7、测试,实现幂等性

**要求:**执行多次操作后,仍然能符合预期效果

#重启所有容器
[root@localhost nginx]# docker restart nginx-80 nginx-8080

浏览器测试:(没有实现幂等性,与前面的 startup.sh 文件中,写网页文件的追加对应)

image-20230101223610225

修改脚本、重新制作镜像:

[root@localhost nginx]# docker rm -f $(docker ps -a -q)			#强制删除所有容器
[root@localhost nginx]# vim startup.sh 							#修改脚本
[root@localhost nginx]# cat startup.sh 
#!/bin/bash
echo $INDEX_DATA > /usr/local/nginx/html/index.html				#此处将追加改为替换
/usr/local/nginx/sbin/nginx
touch /usr/local/nginx/logs/access.log
tail -f /usr/local/nginx/logs/access.log

[root@localhost nginx]# docker build -t nginx:v2 .				#重新制作镜像

使用不同参数运行镜像:

[root@localhost nginx]# docker run --name nginx-80 -d -p 80:80 nginx:v2
[root@localhost nginx]# docker run --name nginx-8080 -d -p 8080:80 --env INDEX_DATA=yangqin nginx:v2

浏览器测试访问:

image-20230101224504217

重启所有容器:(实现幂等性)

$ docker restart nginx-80 nginx-8080

浏览器测试访问:

image-20230101224810044