Docker导出镜像与Dockerfile的简单应用及网络参数设置

匆匆过客 提交于 2020-04-06 05:25:32

前边将在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 zhousjmas@hotmail.com

下边是环境变量,这里需要注意一下。因为看起来和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导出镜像与Dockerfile的简单应用及网络参数设置

写好后针对要导出的镜像进行导出命令编写
docker build -t mas-centos7-env-demo:v1.0 .

这里-t是要导出的镜像的名字,mas-centos7-env-demo:v1.0 会被拆分成REPOSITORY和TAG 来进行
另外注意命令最后有一个 . ,这个点不显眼,但表示的是当前build所用的dockerfile的路径, . 表示dockfile就在当前执行命令的目录下。个人也可以修改为相应的目录
Docker导出镜像与Dockerfile的简单应用及网络参数设置

创建成功后运行其这个新导出的image
Docker导出镜像与Dockerfile的简单应用及网络参数设置
此时就可以看到环境变量已经默认加载成功了

另外也需要为新起的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,如果正常成功是可以看到自己新建的网络模式的
Docker导出镜像与Dockerfile的简单应用及网络参数设置

然后在启动容器时指定使用相关的IP
docker run -di --name mas-ip --net masnet --ip 172.3.3.10 mas-centos-env-demo:v1.0 启动测试镜像
Docker导出镜像与Dockerfile的简单应用及网络参数设置

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!