镜像动态化实验-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 压缩包

[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

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

7、测试,实现幂等性
**要求:**执行多次操作后,仍然能符合预期效果
#重启所有容器
[root@localhost nginx]# docker restart nginx-80 nginx-8080
浏览器测试:(没有实现幂等性,与前面的 startup.sh 文件中,写网页文件的追加对应)

修改脚本、重新制作镜像:
[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
浏览器测试访问:

重启所有容器:(实现幂等性)
$ docker restart nginx-80 nginx-8080
浏览器测试访问:
