Docker搭建nginx并优化
一.搭建nginx实验环境:主机名ipserver1172.25.12.1server2172.25.12.2server3172.25.12.3物理机172.25.254.121.将nginx镜像导入并查看[root@server1 ~]# ls[root@server1 ~]# docker load -i nginx.tar[r...
一.搭建nginx
实验环境:
主机名 | ip |
---|---|
server1 | 172.25.12.1 |
server2 | 172.25.12.2 |
server3 | 172.25.12.3 |
物理机 | 172.25.254.12 |
1.将nginx镜像导入并查看
[root@server1 ~]# ls
[root@server1 ~]# docker load -i nginx.tar
[root@server1 ~]# docker images
2.查看容器的详情
[root@server1 ~]# docker inspect nginx
3.编辑配置文件
[root@server1 ~]# cd /tmp/docker/
[root@server1 docker]# vim Dockerfile
配置文件的内容如下:
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/dvd.repo
ADD nginx-1.15.8.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.8
RUN rpmdb --rebuilddb && yum install -y gcc make zlib-devel pcre-devel
#使其不生成debug日至
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
#如果无法知道此命令怎么写,查看容器的情况即可知道(docker inspect xx)
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
4.将nginx-1.15.8.tar.gz安装包移动到/tmp/docker目录下
[root@server1 ~]# ls
[root@server1 ~]# cp nginx-1.15.8.tar.gz /tmp/docker
[root@server1 ~]# cd /tmp/docker/
[root@server1 docker]# ls
5.重新创建一个镜像,发现可以成功创建,说明配置文件中的内容正确
[root@server1 docker]# docker build -t nginx:v1 .
6.查看镜像
[root@server1 docker]# docker images
[root@server1 docker]# docker images nginx
7.清除掉之前的容器
[root@server1 docker]# docker ps -a
[root@server1 docker]# docker rm -f vm2
[root@server1 docker]# docker rm -f apache
[root@server1 docker]# docker ps -a
8.创建容器并指定映射端口
[root@server1 docker]# docker run -d --name nginx -p 80:80 nginx:v1
[root@server1 docker]# docker ps
9.在浏览器中输入网址http://172.25.12.1/,发现可以成功显示nginx页面
10.编辑dockerfile文件,增加服务端口(即如果容器中运行应用服务,可以把服务端口暴露出去)和指定的应用的数据挂载点
[root@server1 docker]# vim Dockerfile
配置文件中增加的内容如下:
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
11.重新创建一个镜像,发现此时运行很快,其原因是因为很多层都用的是缓存
[root@server1 docker]# docker build -t nginx:v2 .
12.删除容器nginx,并新建一个nginx容器
[root@server1 docker]# docker rm -f nginx
[root@server1 docker]# docker run -d --name nginx -p 80:80 nginx:v2
13.比较nginx:v2和nginx:v1的层数结构的区别
[root@server1 docker]# docker history nginx:v2
[root@server1 docker]# docker history nginx:v1
14.查看容器nginx的情况并找到挂载(因为没有设置路径,所以显示系统自定义的名字,此处应为管理卷)
[root@server1 docker]# docker inspect nginx
15.切换到该目录下并查看,发现有内容,说明挂载成功
[root@server1 docker]# cd /var/lib/docker/volumes/03803afd17b411fce56b159417a50a85402029ac474ab78530f2254e314043f8/_data
[root@server1 _data]# ls
注意:
如果挂载的路径下没有内容,可能的原因是没有使用最新的容器
16.在上一个路径下编辑测试页
[root@server1 _data]# vim test.html
[root@server1 _data]# cat test.html
测试页中的内容如下:
test.westos.org
17.在浏览器中输入网址http://172.25.12.1/test.html,发现可以成功查看
总结:
1.源码方式部署nginx
2.优化一下nginx的源码编译
3.cmd是容器起来之后才起来
4.如果使用cache不要在上面加,否则会变更
5.会从容器内拷过来,docker管理卷
5.容器的id
6.会自动删除不用的
二.对nginx进行优化
镜像的优化
- 选择最精简的基础镜像
- 减少镜像的层数
- 清理镜像构建的中间产物
- 注意优化网络请求
- 尽量去用构建缓存
- 使用多阶段构建镜像
实验开始:
1.使用prune删除未被占用的卷,已经占用的需要将其删除
[root@server1 docker]# docker volume ls
#发现nginx被占用
[root@server1 docker]# docker ps
[root@server1 docker]# docker ps -a
#删除卷
[root@server1 docker]# docker volume prune
#发现只删除了一个,原因是还有一个卷被占用了
[root@server1 docker]# docker volume ls
#删除容器nginx
[root@server1 docker]# docker rm -f nginx
#再次删除卷
[root@server1 docker]# docker volume prune
#查看,发现卷已经成功被删除
[root@server1 docker]# docker volume ls
2.查看镜像nginx:v2的大小,发现是276MB
[root@server1 docker]# docker images nginx
[root@server1 docker]# docker images nginx:v2
第一次修改
3.重新编辑dokerfile,将所有RUN命令写在一起,即减少镜像的层数
[root@server1 docker]# vim Dockerfile
文件中的内容如下:
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/dvd.repo
ADD nginx-1.15.8.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.8
RUN rpmdb --rebuilddb && yum install -y gcc make zlib-devel pcre-devel && yum clean all && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install && rm -rf /mnt/nginx-1.15.8
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
4.重新创建镜像nginx:v3
[root@server1 docker]# docker build -t nginx:v3 .
5.查看镜像的状态,发现nginx:v3比nginx:v2的大小小了26MB
[root@server1 docker]# docker images nginx
第二次修改
6.编辑配置文件,清理镜像构建的中间产物
[root@server1 docker]# vim Dockerfile
文件中的内容如下:
FROM rhel7 as build
COPY dvd.repo /etc/yum.repos.d/dvd.repo
ADD nginx-1.15.8.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.8
RUN rpmdb --rebuilddb && yum install -y gcc make zlib-devel pcre-devel && yum clean all && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install && rm -rf /mnt/nginx-1.15.8
FROM rhel7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
7.重新创建镜像nginx:v4
[root@server1 docker]# docker build -t nginx:v4 .
8.查看镜像的状态,发现nginx:v3的大小只有141MB
[root@server1 docker]# docker images nginx
9.创建容器并访问nginx网页,发现可以成功访问,说明此时nginx成功优化一部分
[root@server1 docker]# docker ps -a
[root@server1 docker]# docker run -d --name nginx -p 80:80 nginx:v4
#可以查看容器的状态得知ip
[root@server1 docker]# curl 172.25.12.1
第三次修改
10.导入一个镜像,即选择最精简的基础镜像并查看
[root@server1 ~]# ls
[root@server1 ~]# docker load -i distroless.tar
[root@server1 ~]# docker images
11.编辑dockerfile文件
[root@server1 docker]# vim Dockerfile
配置文件中的内容如下:
FROM nginx as base
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG Asia/Shanghai
RUN mkdir -p /opt/var/cache/nginx && \
cp -a --parents /usr/lib/nginx /opt && \
cp -a --parents /usr/share/nginx /opt && \
cp -a --parents /var/log/nginx /opt && \
cp -aL --parents /var/run /opt && \
cp -a --parents /etc/nginx /opt && \
cp -a --parents /etc/passwd /opt && \
cp -a --parents /etc/group /opt && \
cp -a --parents /usr/sbin/nginx /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \
cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \
cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime
FROM gcr.io/distroless/base
COPY --from=base /opt /
EXPOSE 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]
12.新建一个nginx:v5镜像
[root@server1 docker]# docker build -t nginx:v5 .
13.查看镜像,发现nginx:v5只有23.2MB
[root@server1 docker]# docker images
14.创建容器并访问nginx网页,发现可以成功访问,说明此时nginx成功优化
[root@server1 docker]# docker rm -f nginx
[root@server1 docker]# docker run -d --name nginx -p 80:80 nginx:v5
[root@server1 docker]# docker ps
[root@server1 docker]# curl 172.25.12.1
补充:
可以使用以下命令查看系统调用,即系统调用了哪些库
[kiosk@foundation12 Desktop]$ ldd /usr/sbin/httpd
更多推荐
所有评论(0)