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