携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情
🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅
✒️个人主页:小鹏linux
💊个人社区:小鹏linux(个人社区)欢迎您的加入!
1.commit与build优缺点比较
commit:
优点:
简单、所见所得
缺点
元数据信息无法注入
镜像层级的重用性弱
编译步骤不可重用
DockerFile:
优点
元数据信息可注入
镜像层级的重用性强
编译步骤不可重用
缺点:
编译速度没有宿主机快
下载程序的依赖包比在宿主机中直接下载更加耗时
会产生none镜像,占用磁盘空间
2.commit + build镜像制作方法
容器 > 镜像(简单好用但是功能性不全,不能封装启动命令。只能当中应急方案)(Docker commit + Docker build = 镜像)
docker pull centos:centos7 #从官网下载一个基础镜像
[root@localhost dockerrun]# mkdir dockerrun1 #创建一个目录并进入
[root@localhost dockerrun1]# vim Dockerfile #创建一个Dockerfile文件
Dockerfile文件内容如下:
FROM centos:centos7
RUN touch /root/startup.sh
CMD tail -f /root/startup.sh
[root@localhost dockerrun1]# docker build -t axplinux/centos:7.9 . #将Dockerfile文件转化成镜像axplinux/centos:7.9
[root@localhost dockerrun1]# docker run --name nginx -p 8000:80 -d axplinux/centos:7.9 #将axplinux/centos:7.9当第二个基础镜像,用nginx容器运行该镜像。
[root@localhost dockerrun1]# docker extc -it nginx /bin/bash #进入容器内部
在容器内下载一些必须命令,并且安装一个nginx软件且修改网页文件内容并启动。
浏览器访问192.168.232.165:8000能看到网页文件内容证明成功安装并运行nginx
exit #退出容器
[root@localhost dockerrun1]# docker commit nginx axplinux/nginx:v0.1 #将nginx容器封装成最终镜像axplinux/nginx:v0.1
[root@localhost dockerrun1]# cc #容器已无用,可以删除,cc是删除容器的脚本,脚本内容在我前几期文章中有写
[root@localhost dockerrun1]# docker images #查看v0.1版的nginx镜像已制作完成。将此镜像作为另一个基础镜像继续升级。
[root@localhost ~]# mkdir dockerrun2 #创建另一个文件
[root@localhost ~]# cd dockerrun2 #进入
[root@localhost dockerrun2]# vim Dockerfile #再创建一个Dockerfile文件
Dockerfile文件内容如下:
FROM axplinux/nginx:v0.1
MAINTAINER anxiaopeng_linux
LABEL nginx_version="1.21.3"
RUN rm -rf /root/startup.sh
EXPOSE 80 443
WORKDIR /usr/local/nginx
CMD /usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log
[root@localhost dockerrun2]# docker build -t axplinux/nginx:v2.0 . #再将Dockerfile文件转化成镜像axplinux/nginx:v2.0
[root@localhost dockerrun2]# docker image inspect axplinux/nginx:v2.0 #可以查看标签信息和作者信息
[root@localhost dockerrun2]# docker run --name nginx -p 666:80 -d axplinux/nginx:v2.0 #启动镜像
浏览器访问ip:666能看到网页文件
[root@localhost dockerrun2]# docker logs nginx #可以查看nginx的访问日志。结束!
3. 镜像动态化
[root@localhost dockerrun2]# cd ..
[root@localhost ~]# mkdir dockerenv
[root@localhost ~]# cd dockerenv/
[root@localhost dockerenv]# vim Dockerfile #创建Dockerfile文件
Dockerfile文件内容如下:
FROM axplinux/nginx:v2.0
ENV INDEX_DATA default
ADD ./startup.sh /root
RUN chmod +x /root/startup.sh
ENTRYPOINT /bin/bash /root/startup.sh
[root@localhost dockerenv]# vim startup.sh #创建启动脚本
创建启动脚本,脚本内容为:
#!/bin/bash
echo $INDEX_DATA > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log
[root@localhost dockerenv]# docker build -t axplinux/nginx:v3.0 .
[root@localhost dockerenv]# docker run --name nginx -p 8000:80 -d axplinux/nginx:v3.0 #先正常启动镜像
浏览器访问Ip:8000,输出默认结果default
[root@localhost dockerenv]# cc
[root@localhost dockerenv]# docker run --name nginx -p 8000:80 --env INDEX_DATA=2222222 -d axplinux/nginx:v3.0 #动态启动镜像
浏览器访问ip:8000,输出默认结果2222222
👑👑👑结束语👑👑👑