部署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目录下配置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
网页访问
修改默认发布目录
方法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拷贝到容器的默认发布目录下
方法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
部署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
修改默认发布页面
[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
访问
优化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;"]
[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 .
查看发现比之前的小很多
[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 ###跑一下