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

4,060 阅读3分钟

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