Docker容器技术—使用DockerFile完成自定义镜像并上传阿里云仓库–附有案例

Docker镜像的原理

思考:

  • Docker镜像本质是什么?—它就是一个文件Dockerfile[ 写着一条一条得到命令]
  • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
  • Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有10多MB?

linux文件系统由bootfs和rootfs两部分组成。

image.png

  • bootfs:包含bootloader (引导加载程序)和kernel(内核)
  • rootfs: root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
  • ·不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等

image.png

  • Docker镜像是由特殊的文件系统叠加而成
  • 最底端是bootfs,并使用宿主机的bootfs;
  • 第二层是root文件系统rootfs,称为base image: 基础镜像
  • 然后再往上可以叠加其他的镜像文件
  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
  • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

总结:

1675344418381转存失败,建议直接上传图片文件

5.2 镜像制作

自定义镜像:提供了两种方式: 第一种:基于容器来制作 第二种: 通过dockerfile文件来制作[重要]

第一种 容器转为镜像:只能在已有的镜像的容器上进行制作新镜像—–了解

image.png

步骤: 把现有的镜像–运行成一个容器—修改容器中的内容—>变成镜像—把镜像压缩文件—>交给其他人—变成本地镜像

演示:

image.png

image.png

image.png

image.png

image.png

docker commit 容器id 镜像名:版本号 [把指定的容器变成镜像]

docker save -o 压缩文件名 镜像名:版本号 [把指定的镜像压缩为一个压缩文件]

docker load -i 压缩文件名 【把压缩文件变成本地镜像】

5.3 dockerfile的概念[重要]

  • Dockerfile是一个文本—任意一个镜像都是通过dockerfile来制作
  • 文件包含了一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
  • 对于运维人员:在部署时,可以实现应用的无缝跨平台移植

image.png

image.png

5.4 Dockerfile关键字

image.png

image.png

5.5 Dockerfile案例

案例1

image.png

编辑dockerfile文件

[root@hecs-33111 docker-files]# vim centos_dockerfile
FROM centos:7
MAINTAINER ykq <2300316070@qq.com>

RUN yum install -y vim
WORKDIR /usr
CMD ["/bin/bash"]
​

构建镜像

[root@hecs-33111 docker-files]# docker build -f centos_dockerfile -t aaa_centos:1 .
​
-f:表示dockerfile文件
-t: 镜像名称版本号 
.: 必须加上

image.png

创建容器

 docker run -it --name=aaa_centos aaa_centos:1 /bin/bash

image.png

案例2

image.png

准备好springboot jar包并传至宿主机的根目录

image.png

创建docker-files目录,并把jar包移动进去

image.png

创建dockerfile文件并编辑

FROM java:8
MAINTAINER ykq <2300316070@qq.com>

ADD demo-qy158-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar

根据dockerfile制作镜像

docker build -f ./springboot_dockerfile -t app .

image.png

启动并做端口映射

docker run -id -p 9000:8080 app

image.png

成功访问

image.png

案例3

需求: Centos7镜像具备vim+ifconfig+jdk8

​
FROM centos
MAINTAINER zzyy
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u161-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_161
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
​
​

把本地镜像上传阿里远程镜像仓库

作为开发: 我们需要把自己的项目—-通过dockerfile 变成一个镜像—-上传到远程仓库【hub.docker或者阿里云镜像仓库】

作为测试:

作为运维: 从远程仓库下载镜像—通过镜像运行容器。部署项目。

采用:阿里云镜像仓库

image.png

image.png

image.png

image.png

image.png

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYpZVAn7' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片