前边将在Docker容器中完成了JDK的安装,可是在将该容器导出为镜像并从新进入时发现该环境变量没法生效,须要每次手工执行一下 source /etc/profile 来刷取一下环境才能够。java
针对这种状况经调查能够在建立镜像时经过编辑dockerfile文件来进行配置,这样在每次加载容器的时候均可以自动设置环境变量docker
另由于想用建立的多个docker容器作一个分布式的环境,因此须要考虑指定固定的IP。所以又须要设置相应的IP信息,在这里也一并作以记录centos
首先记录为docker启动容器增长参数
在合适的目录下建立Dockerfile描述文件,个人路径是/home/docker/java18 这样比较好区分,之后可能还得要增长别的容器的启动描述文件网络
个人文件中填入的内容以下
#base on image 本次建立容器所基于的镜像版本
FROM mas-centos7-env-net:latest分布式
#maintainer infomation 镜像维护人信息
MAINTAINER zhousjmas@hotmail.comide
下边是环境变量,这里须要注意一下。由于看起来和profile下的写法差很少,粗心的同窗容易直接拷过来后把等号去掉就完了。要注意把export替换成ENV
ENV JAVA_HOME /etc/jdk1.8.0_241
ENV CLASSPATH .:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
ENV PATH $PATH:${JAVA_HOME}/bin测试
默认开放22和80端口,这个不是必定要写
EXPOSE 22 80ui
写好后针对要导出的镜像进行导出命令编写
docker build -t mas-centos7-env-demo:v1.0 .centos7
这里-t是要导出的镜像的名字,mas-centos7-env-demo:v1.0 会被拆分红REPOSITORY和TAG 来进行
另外注意命令最后有一个 . ,这个点不显眼,但表示的是当前build所用的dockerfile的路径, . 表示dockfile就在当前执行命令的目录下。我的也能够修改成相应的目录blog
建立成功后运行其这个新导出的image
此时就能够看到环境变量已经默认加载成功了
另外也须要为新起的container指定固定的ip,那么先把当前已启动的container先行关闭。
先用docker ps 肯定一下当前container的id
首先进行容器的中止 docker stop c5a964549d10
而后执行容器的删除 docker rm c5a964549d10
而后自行建立一个网络模式
docker network create --driver bridge --subnet=172.3.3.0/16 --gateway=172.3.3.1 masnet
这里的masnet 是新建的网络模式的名称 --subnet=172.3.3.0/16 表示新建网络的IP范围 ,gateway=172.3.3.1 是网关定义
执行完成后 docker network ls,若是正常成功是能够看到本身新建的网络模式的
而后在启动容器时指定使用相关的IP
docker run -di --name mas-ip --net masnet --ip 172.3.3.10 mas-centos-env-demo:v1.0 启动测试镜像
docker run -di --name mas-ip --net masnet --ip 172.3.3.10 mas-centos-env-demo:v1.0 中
--name mas-ip 表示启动的容器的名称--net masnet 应用的网络模式,就是刚刚建立的那个网络模式--ip 172.3.3.10 指定所用的IP