制作自定义版本的jdk镜像,本文制作的是jdk1.8_191
Dockerfile如下
#1.指定基础镜像,并且必须是第一条指令
FROM centos:7
#2.指明该镜像的作者和其电子邮件
MAINTAINER mj "mmp"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
ADD jdk-8u191-linux-x64.tar.gz /usr/local/java/
#5.配置环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_191
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#容器启动时需要执行的命令
#CMD ["java","-version"]
#可以安装一些工具进入镜像,-y不需要交互自动安装很重要的参数,不然会卡住终止
RUN ["yum","install","-y","xxx"]
文件目录结构如下
执行docker制作镜像命令
docker build -t jdk1.8 .
查看镜像
docker images
启动容器进入内部查看
docker run -it --name jdk1.8 jdk1.8 /bin/bash
有了自定义的jdk镜像,就可以基于此镜像创建服务镜像了
Dockerfile
FROM jdk1.8
# 作者
MAINTAINER nnd
# 声明要使用的端口
EXPOSE 8080
# VOLUME 指定了临时文件目录为/tmp。
# 将本地包添加到容器中并更名为容器内目录名
ADD /本地文件目录 /容器内目录名
#挂载卷
VOLUME ["/容器内目录/logs","/容器内目录/conf"]
# 同步容器与本机时间
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8080
RUN ["dos2unix","/容器内目录/bin/startup.sh"]
#ENTRYPOINT命令用于指定这个容器启动的时候要运行的命令(可以追加命令)
ENTRYPOINT ["sh","/容器内目录/bin/startup.sh"]
创建镜像
docker build -t xxx:1.0 .
创建容器,目录挂载必须要放在--name的前面,否则挂载不上,-e DUBBO_IP_TO_REGISTRY设置dubbo注册zookeeper时的ip地址,指定为宿主机ip,不然无法访问
docker run -d -p 8080:8080 -v 本地目录:容器内目录 -e DUBBO_IP_TO_REGISTRY=宿主机IP --name zzz xxx:1.0
查看全部容器,-a表示全部,不加的话,只显示运行中的容器
docker ps -a
进入容器
docker exec -it 容器ID bash
创建和停止容器
docker start 容器ID,docker stop 容器ID
开机自动重启及其他情况
# 开启容器自启动
docker update --restart=always 【容器名】
例如:docker update --restart=always tracker
# 关闭容器自启动
docker update --restart=no【容器名】
例如:docker update --restart=no tracker
##### 相关配置解析
no:
不要自动重启容器。(默认)
on-failure:
如果容器由于错误而退出,则重新启动容器,该错误表现为非零退出代码。
always:
如果容器停止,请务必重启容器。如果手动停止,则仅在Docker守护程序重新启动或手动重新启动容器本身时才重新启动。(参见重启政策详情中列出的第二个项目)
unless-stopped:
类似于always,除了当容器停止(手动或其他方式)时,即使在Docker守护程序重新启动后也不会重新启动容器。