进阶Docker3:Dokerfile构建镜像

发布时间:2024年01月15日

目录

Dockerfile

构建基础镜像

基本机构

命令:

命令解释:

准备工作

创建镜像

上传镜像


Dockerfile

Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使 用Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙。

构建基础镜像

centos
alpine
jeanblanchard/alpine-glibc 使用这个
1. 空间大小差异, alpine 默认 5M 左右, centos 等都在 200M 左右。
2. 默认软件包差异, alpine 选用 busybox centos 等则是 bash+coreutils 几件套。
3. alpine 中,国际化组件被优化掉了。
4. 还有一点, alpine 中选用的都是 最简依赖 ,这点和 archlinux 比较像,举个例子,
openssh 包不会自带 pam 插件,于是他也就不支持 ldap 。这点我给 alpinelinux 官方提过
issue 。和 php 不一样, php 可以做成 php-pdo php-dom 的包,然后动态加载共享库。
openssh 不行, 没带就是没写
5. glibc 差异, alpine 选用 musl centos 等选用 glibc ,其他的倒还好, libc 的差异对开发很重
要。

基本机构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
一般的, Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

命令:

基础镜像信息:FROM
维护者信息:MAINTAINER
镜像操作命令: RUN ENV COPY ADD EXPOSE WORKDIR ONBUILD USER
VOLUME

命令解释:

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test?? ?cd/test
ENY 环境变量
CPOY spring.jar /test
CPOY和ADD的区别:ADD不仅可以赋值还会默认解压;
如果仅仅是把本地的文件拷贝到容器镜像中, COPY 命令是最合适不过的。其命令的格式
为: COPY <src> <dest>
ADD 命令的格式和 COPY 命令相同,也是: ADD <src> <dest>
区别: ADD 解压压缩文件并把它们添加到镜像中

准备工作

创建文件夹上传 jdk 的安装包 , 和在同级目录下编写 Dockerfile 文件
编写 Dockerfile 文件
示例
#1.指定基础镜像,并且必须是第一条指令
FROM centos:latest
#2.指明该镜像的作者和其电子邮件
MAINTAINER xx "xx@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,注意:jdk*.tar.gz使用的是相对路径
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
#5.配置环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#容器启动时需要执行的命令
#CMD ["java","-version"]

创建镜像

我们可以通过jdk和jre,还有不同的操作系统centos和?jeanblanchard/alpine-glibc 构建不同大小的镜像,因为镜像需要部署很多个,所以镜像越小越好;下面是不同版本的镜像大小也不同。

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test


配置jdk环境变量

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test/
ADD jdk-8u221-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH


配置自动运行jar包 #CMD ["java","-version"]

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test/
ADD jdk-8u221-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#CMD ["java","-version"]


优化镜像
jdk jre

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test/
ADD jre-8u391-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#CMD ["java","-version"]


优化操作系统 centos换jeanblanchard/alpine-glibc

FROM jeanblanchard/alpine-glibc
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test/
ADD jre-8u391-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#CMD ["java","-version"]



编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像
根据当前路径得Dockerfile 路径构建镜像
docker build -t spring:v1 .

docker run -it spring:v1
处在哪个目录? \test
目录下有什么文件? spring.jar 

运行镜像
docker run -itd --name s1 -p 8080:8080 spring:v5
注:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建?

上传镜像

在阿里云搜索容器镜像服务创建镜像和仓库order_service

?控制台登录

?给镜像取个别名

docker tag 52c4827a87e1 registry.cn-hangzhou.aliyuncs.com/zking_docker/order_service:v1

上传镜像到阿里云order_service仓库

 docker push registry.cn-hangzhou.aliyuncs.com/zking_docker/order_service:v1

删除镜像

 docker rmi registry.cn-hangzhou.aliyuncs.com/zking_docker/order_service:v1

下载阿里云仓库order_sercice 镜像

 docker pull registry.cn-hangzhou.aliyuncs.com/zking_docker/order_service:v1

文章来源:https://blog.csdn.net/d2916172682/article/details/135600305
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。