前边将在Docker容器中完成了JDK的安装,但是在将该容器导出为镜像并重新进入时发现该环境变量无法生效,需要每次手工执行一下 source /etc/profile 来刷取一下环境才可以。
针对这种情况经调查可以在创建镜像时通过编辑dockerfile文件来进行配置,这样在每次加载容器的时候都可以自动设置环境变量
另因为想用创建的多个docker容器做一个分布式的环境,所以需要考虑指定固定的IP。因此又需要设置相应的IP信息,在这里也一并做以记录
首先记录为docker启动容器增加参数
在合适的目录下创建Dockerfile描述文件,我的路径是/home/docker/java18 这样比较好区分,以后可能还得要增加别的容器的启动描述文件
我的文件中填入的内容如下
#base on image 本次创建容器所基于的镜像版本
FROM mas-centos7-env-net:latest
#maintainer infomation 镜像维护人信息
MAINTAINER [email protected]
下边是环境变量,这里需要注意一下。因为看起来和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 80
写好后针对要导出的镜像进行导出命令编写
docker build -t mas-centos7-env-demo:v1.0 .
这里-t是要导出的镜像的名字,mas-centos7-env-demo:v1.0 会被拆分成REPOSITORY和TAG 来进行
另外注意命令最后有一个 . ,这个点不显眼,但表示的是当前build所用的dockerfile的路径, . 表示dockfile就在当前执行命令的目录下。个人也可以修改为相应的目录
创建成功后运行其这个新导出的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
原文地址:https://blog.51cto.com/4890631/2484903