目录
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
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