~~~~~~~~~~~~~
实验环境:
server1 172.25.66.1
server2 172.25.66.2
server3 172.25.66.3
server4 172.25.66.4
server5 172.25.66.5
物理机 172.25.254.66
~~~~~~~~~~~~~~~
1.将nginx镜像导入并查看
[root@server1 ~]# ls
[root@server1 ~]# docker load -i nginx.tar
[root@server1 ~]# docker images
[root@server1 ~]# docker inspect nginx
[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 .
[root@server1 docker]# docker images
[root@server1 docker]# docker images nginx
[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
[root@server1 docker]# docker run -d --name nginx -p 80:80 nginx:v1
[root@server1 docker]# docker ps
9.在浏览器中输入网址http://172.25.66.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 .
[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
[root@server1 docker]# cd /var/lib/docker/volumes/455c38bfd51865007b968016bcf1262be9ee5beda277a94cf0b5dfc129230fe0/_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.66.1/test.html,发现可以成功查看
总结:
1.源码方式部署nginx
2.优化一下nginx的源码编译
3.cmd是容器起来之后才起来
4.如果使用cache不要在上面加,否则会变更
5.会从容器内拷过来,docker管理卷
5.容器的id
6.会自动删除不用的
镜像的优化
实验开始:
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
[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;"]
[root@server1 docker]# docker build -t nginx:v3 .
5.查看镜像的状态,发现nginx:v3比nginx:v2的大小小了26MB
[root@server1 docker]# docker images nginx
[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;"]
[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.17.0.2
第三次修改
10.导入一个镜像,即选择最精简的基础镜像并查看
[root@server1 ~]# ls
[root@server1 ~]# docker load -i distroless.tar
[root@server1 ~]# docker images
[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;"]
[root@server1 docker]# docker build -t nginx:v5 .
[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.17.0.2
补充:
可以使用以下命令查看系统调用,即系统调用了哪些库
[kiosk@foundation66 Desktop]$ ldd /usr/sbin/httpd