docker下利用Dockerfile自定义镜像部署Apache和nginx

部署Apache
环境(纯净环境)

系统:redhat:linux7.3
虚拟机hostname: server1

注意:镜像可由docker在网上直接拉取,但由于是在官网上拉取,速度较慢,需提前部署加速,否则可能报错。

步骤
按照之前的步骤安装docker后,获取镜像并导入镜像文件

[root@server1 docker]# cd /home/kiosk/
[root@server1 kiosk]# ls
auth   Desktop  Documents  game2048.tar  Pictures  rhel7.tar  ubuntu.tar
certs  docker   Downloads  Music         Public    Templates  Videos
[root@server1 kiosk]# docker load -i rhel7.tar    ##导入镜像
e1f5733f050b: Loading layer  147.1MB/147.1MB
[root@server1 kiosk]# docker ps -a

在这里插入图片描述

检测容器运行是否正常(可不做)

先正常的运行容器后直接安装运行httpd,查看效果(可不做)
创建并运行vm1容器;-i表示交互,t表示终端 --name

[root@server1 kiosk]#  docker run -it --name vm1 rhel7 bash   ##进入容器

配置yum源,并安装httpd

bash-4.2# cd /etc/yum.repos.d/
bash-4.2# vi dvd.repo      
bash-4.2# cat dvd.repo 
[dvd]
name=dvd
baseurl=http://172.25.26.1/7.3
gpgcheck=0
bash-4.2# yum clean all
bash-4.2# yum repolist
bash-4.2# pwd
/etc/yum.repos.d
bash-4.2# yum install -y httpd
(ctrl+p+q,将进程打入后台)

查看httpd进程

[root@server1 html]# which httpd
/usr/sbin/httpd

在这里插入图片描述

查看端口

[root@server1 html]# netstat -antlp | grep httpd

在这里插入图片描述
利用Dockerfile执行同样的动作,查看效果
1.创建docker目录

[root@foundation66 ~]# mkdir /opt/docker
[root@foundation66 ~]# cd /opt/docker/

编写Dockerfile文件

[root@foundation66 docker]# vim Dockerfile
###########################
FROM rhel7                       		    #指定基础镜像rhel7
COPY dvd.repo /etc/yum.repos.d    			#将本地的yum源文件复制到镜像文件系统
RUN  rpmdb --rebuilddb            			#初始化和重建rpm数据库;RUN是构件容器时就运行的命令以及提交运行结果
RUN  yum install -y httpd         			#安装apache
EXPOSE 80                                   #暴露容器运行时的监听端口
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]   #启动apache;CMD是容器启动时执行的命令

docker下利用Dockerfile自定义镜像部署Apache和nginx_第1张图片

在docker目录下配置yum源

[root@server1 docker]# cat dvd.repo 
[dvd]
name=dvd
baseurl=http://172.25.26.1/7.3
gpgcheck=0
[root@server1 docker]# pwd
/opt/docker

构建镜像

[root@foundation66 docker]# docker build -t rhel7:v1 .
## . 表示当前文件夹

在这里插入图片描述
运行容器vm2,将容器80端口(80:80第二个80)映射到主机80端口

[root@server1 docker]# docker run -d --name vm2 -p 80:80 rhel7:v1
742addb9134c773b9c1ff12b1c8a566858b7d0a1520d7766267cab6b0e869133
[root@server1 docker]# docker ps

网页访问
docker下利用Dockerfile自定义镜像部署Apache和nginx_第2张图片
修改默认发布目录
方法1:

[root@server1 ~]# docker run -d --name vm2 -p 80:80 rhel7:v1
9469cd45255f61fab4017ef00f14e0e994076b92bab7b7859bb6b6d7eb34a4c6
[root@server1 ~]# cd /opt/docker/
[root@server1 docker]# ls
Dockerfile  dvd.repo
[root@server1 docker]# vim index.html         ##编辑默认发布页面
[root@server1 docker]# ls
Dockerfile  dvd.repo  index.html
[root@server1 docker]# docker container cp index.html vm2:/var/www/html     ##将index.html拷贝到容器的默认发布目录下

docker下利用Dockerfile自定义镜像部署Apache和nginx_第3张图片
docker下利用Dockerfile自定义镜像部署Apache和nginx_第4张图片

方法2:

  ##      
    [root@server1 docker]# docker rm -f vm2
    vm2
    [root@server1 docker]# vim Dockerfile 
    [root@server1 docker]# docker build -t rhel7:v2 .
    [root@server1 docker]# mkdir webdata
    [root@server1 docker]# cd webdata/   ##建立目录
    [root@server1 webdata]# vim index.html  ##编辑index.html    
    [root@server1 webdata]# docker run -d --name vm2 -v /opt/docker/webdata:/var/www/html/  -p 80:80 rhel7:v2   ##运行容器vm2,将vm2的/var/www/html/链接(相当于mount)到虚拟机的/opt/docker/webdata目录 ,映射端口
    850477eff175fddff2a4dd8a217b38ccf8876c311b5a22f63c643d5b4760b183

在这里插入图片描述
docker下利用Dockerfile自定义镜像部署Apache和nginx_第5张图片

部署nginx

环境(纯净环境)

系统:redhat:linux7.3
虚拟机hostname: server1

安装docker-ce并启动

[root@server1 ~]# yum install docker-ce
[root@server1 ~]# systemctl start docker
[root@server1 ~]# systemctl enable docker

导入镜像rhel7

[root@server1 ~]# docker load -i rhel7.tar 

获取nginx安装包

nginx-1.12.0.tar.gz

创建目录并建立Dockerfile文件

[root@server1 ~]# mkdir /opt/docker
[root@server1 ~]# cd /opt/docker/
[root@server1 docker]# vim Dockerfile   ##编辑Dockerfile
[root@server1 docker]# cd -
/root
[root@server1 ~]# cp nginx-1.12.0.tar.gz /opt/docker/  ##将安装包拷贝到/opt/docker/
[root@server1 docker]# vim Dockerfile   ##编辑Dockerfile

FROM rhel7                                                             #指定基础镜像rhel7
COPY dvd.repo /etc/yum.repos.d                                     
RUN  rpmdb --rebuilddb                                                 #初始化和重建rpm数据库
RUN yum install -y gcc pcre-devel zlib-devel makel
ADD nginx-1.12.0.tar.gz /mnt                                       #add相当于copy
WORKDIR /mnt/nginx-1.12.0                                          #指定工作目录
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 
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

编辑dvd.repo,建立镜像并运行容器,查看

[root@server1 docker]# vim dvd.repo
[root@server1 docker]# mkdir /usr/local/nginx
[root@server1 docker]# docker build -t rhel7:v1 .  ##建立镜像,发现显示的过程减少

在这里插入图片描述

[root@server1 docker]# docker run -d --name vm1 -p 80:80 rhel7:v1   ##运行容器
[root@server1 docker]# docker inspect vm1  

docker下利用Dockerfile自定义镜像部署Apache和nginx_第6张图片
修改默认发布页面

[root@server1 docker]cd /var/lib/docker/volumes/
[root@server1 volumes]# ls
2e3106388eecab0e7a35d423c38edef91e5e35e9bcbdbce678e68e55d8f9d2cd  be91305e0747a7417e395b6d36a63ab6ad1579f3d85b33493e139be849e5e9ab  metadata.db
[root@server1 2e3106388eecab0e7a35d423c38edef91e5e35e9bcbdbce678e68e55d8f9d2cd]# ls
_data
[root@server1 2e3106388eecab0e7a35d423c38edef91e5e35e9bcbdbce678e68e55d8f9d2cd]# cd _data/
[root@server1 _data]# ls
50x.html  index.html
[root@server1 _data]# vim index.html 

在这里插入图片描述
访问
docker下利用Dockerfile自定义镜像部署Apache和nginx_第7张图片
优化Dockerfile配置过程

[root@server1 ~]# cd /opt/docker/
[root@server1 docker]# ls
Dockerfile  dvd.repo  nginx-1.12.0.tar.gz
[root@server1 docker]# vim Dockerfile 

FROM rhel7
COPY dvd.repo /etc/yum.repos.d
RUN  rpmdb --rebuilddb
RUN yum install -y gcc pcre-devel zlib-devel make &> /dev/null && yum clean all
ADD nginx-1.12.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.0 
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx  &> /dev/null
RUN make &> /dev/null
RUN make install &> /dev/nulli
RUN cd && rm -rf /mnt/nginx-1.12.0
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

docker下利用Dockerfile自定义镜像部署Apache和nginx_第8张图片

[root@server1 docker]# docker build -t rhel7:v2 .   ##建立镜像
[root@server1 docker]# docker history rhel7:v2     ##查看镜像历史
[root@server1 docker]# docker run -d --name vm2 -p 80:4300 rhel7:v2     

在这里插入图片描述
优化底层base

拿镜像

distroless.tar

建立新的目录,写入Dockerfile

[root@server1 docker]# docker images
[root@server1 docker]# mkdir bash
[root@server1 docker]# cd bash/
[root@server1 bash]# vim Dockerfile

FROM nginx:1.16 as base
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;"]

在本地建立镜像 rhel7:v3

[root@server1 bash]# docker build -t rhel7:v3 .

查看发现比之前的小很多
docker下利用Dockerfile自定义镜像部署Apache和nginx_第9张图片

[root@server1 bash]# docker rm vm1        ###删除之前建立的容器
[root@server1 bash]# systemctl restart docker.service    ##最好重起一次docker
[root@server1 bash]# docker run -d --name vm1 -p 80:80 rhel7:v3    ###跑一下

在这里插入图片描述
docker下利用Dockerfile自定义镜像部署Apache和nginx_第10张图片

你可能感兴趣的:(docker下利用Dockerfile自定义镜像部署Apache和nginx)