例题:
1.以centos7作为基础镜像
2.在里面安装好ip,vim,ping命令
3.编译安装nginx
4.启动容器的时候,就启动nginx
5.网页代码上传到容器里: 使用数据卷挂载使用 /usr/local/nginx1/html/
流程:
第一步:创建文件夹/mknginx,编写Dockerfile文件
mkdir /mknginx
cd /mknginx
vim Dockerfile
FROM centos:7 LABEL maintainer="pansonglin@3171419302@qq.com" ENV AUTHOR psl ENV YEAR 2024 WORKDIR /psl RUN rm -rf /etc/yum.repos.d/CentOS* COPY Centos-7.repo /etc/yum.repos.d COPY install_nginx.sh /psl RUN yum install iproute vim iputils make -y \ && source /psl/install_nginx.sh EXPOSE 80 VOLUME /usr/local/nginx-1/html ENV PATH=/usr/local/nginx-1/sbin:$PATH CMD ["nginx", "-g", "daemon off;"]
vim install_nginx.sh
#!/bin/bash #创建存放ngnix源码的目录 mkdir -p /nginx #进入目录,开始 cd /nginx #远程下载nginx-1.26-1版本的压缩包 curl -O https://nginx.org/download/nginx-1.26.1.tar.gz #解压到当前目录下 tar xf nginx-1.26.1.tar.gz #进入解压文件目录 cd nginx-1.26.1 #消除依赖关系 yum install gcc pcre-devel openssl-devel -y #定制下载,指定安装路径等 ./configure --prefix=/usr/local/nginx-1 --user=psl --group=psl --with-http_ssl_module --with-http_v2_module --with-threads --with-stream --with-http_stub_status_module #启用两核心编译 make -j 2 #在/nginx/nginx-1.26.1路径下执行以下命令开始安装 make install #新建用户psl useradd psl -s /sbin/nologin
如果主机内一开始就有阿里云源,就从主机/etc/repos.d路径下拷贝过来,如果没有就下载,在/mknginx目录下执行curl -O http://mirrors.aliyun.com/repo/Centos-7.repo。
最后/mknginx目录下应该有:
Dockerfile文件内命令行解释:
- FROM centos:7,基于centos7来创建镜像,即docker exec -it打开基于该镜像的容器后看到的是一个centos:7的操作系统命令行界面。
- ENV:指定环境变量,写死在镜像里面的,进入容器后可以echo $AUTHOR输出的是psl,修改镜像内原有PATH变量,将编译安装的nginx路径加入PATH变量就能实现输入nginx就能启动nginx(原因:各命令如mkdir,ls都是在PATH变量规定的路径下,在命令行输入命令时,会去PATH变量规定路径查找命令,如果PATH变量下找不到就无法直接执行该命令)。
- WORKDIR:指定进入容器内就打开的目录,进入容器时自动创建。
- RUN:只在制作镜像的时候运行的命令,代码中第一个RUN是去除centos官方仓库源(因为已经停止服务了),第二个为安装指令和运行脚本文件。
- COPY:将当前主机目录下的文件拷贝到镜像中的指定路径下,代码中第一个COPY为将主机当前路径下的阿里云源拷贝到镜像中以便于后续执行各种安装命令,第二个为将一键安装nginx脚本从主机当前路径传到镜像中。
- VOLUME:指定在主机中的挂载地址。
- CMD:进入容器执行的第一条命令,图中为运行容器就自启nginx。
- \是续行符,让代码更美观。
第二步:创建镜像并基于该镜像启动一个容器
在/mknginx目录下docker build -t centos-nginx:2.0创建镜像
docker images centos-nginx:2.0查看镜像是否创建成功
docker run -d -p 8877:80 --name psl-4 centos-nginx:2.0创建容器,指定端口号8877
docker ps查看容器是否启动成功
docker exec -it psl-4 bash进入容器内
ps aux|grep nginx查看自启动情况,以下为启动成功
第三步:将容器挂载到主机/var/lib/docker/volumes目录下
Dockerfile文件已经实现了挂载卷到docker1主机下/var/lib/docker/volumes,exit退出容器。
docker inspect psl-4可查看挂载目录:
cd /var/lib/docker/volumes/对应随机生成目录/_data,可见index.html进行编辑能对容器内nginx网页效果进行修改。
可浏览器访问docker1主机地址:8877即访问容器内nginx,修改index.html保存后再检查网页效果: