[docker]Centos7环境JAVA基础docker镜像构建
2018-02-04 21:28
1171 查看
写在前面
对于初入Docker的童鞋来说,构建基础镜像可能无从下手。此文以java例,对构架Docker基础镜像的过程做简要的记录。创建镜像也可以使用
Dockerfile。本文主要介绍使用最基础的自定义方式创建镜像。
环境要求:
Centos7安装Docker CE版。参见这里
如果Docker镜像下载慢,可参考Docker 中国官方镜像加速
构建JAVA镜像环境
以centos为基础镜像,启动一个docker实例。attach到这个环境内部:sudo docker run -it -v <your-local-volumn-dir>:<docker-volumn-dir> centos /bin/bash
其中相关参数包括:
-i:表示以交互模式运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式
-v<宿主机目录>:<容器目录>
假设我们的所有安装程序(例如java安装包、maven安装包等)都放在了宿主机的
/root/software/目录下,现在需要将其挂载到容器的
/mnt/software/目录下,就可以将上述命令中的
-v部分写成:
-v /root/software/:/mnt/software/
现在,就可以为这个容器安装软件了。
另:Docker 传送文件命令
docker cp more.log <Docker ID>:/tmp/
安装JAVA环境
安装jdk。
2.1 从Oracle官网下载所需要的JDK压缩包。进入Docker启动时指定的存放软件的目录中,解压JDK,然后重命名文件夹
mv jdk1.8.0_73/jdk/
2.2 配置环境变量(重要)
vim ~/.bashrc
在文件末尾添加如下配置:
export JAVA_HOME=/usr/local/jdk export PATH=$PATH:$JAVA_HOME
用文本编辑器打开
/etc/profile,在profile文件末尾加入:
export JAVA_HOME=/usr/local/jdk export JRE_HOME=$JAVA_HOME/jre export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
保存文件,退出。使用source命令,让环境变量生效:
$ source ~/.bashrc $ source /etc/profile
上传docker镜像
退出你刚才配置好的docker实例:
$ exit
使用以下命令可以看到刚才退出的docker实例(这个命令类似与Linux的
ps -a可以查看所有docker实例,包括正在运行的和停止运行的):
$ docker ps -a
可以看到,你刚才停止的docker实例的
Docker ID,假设为
89c153ff574e。使用以下命令,根据某
Docker ID来创建一个新的
image:
docker commit 89c153ff574e java-base:1.8
该容器ID是
89c153ff574e,所创建的镜像名是
java-base:1.8
提交了新的镜像你可以把这个镜像储存tar包:
docker -o ~/java-base.tar java-base
docker save -o 保存的目录 镜像名
查看镜像
用
docker images看看当前所有的镜像,可以看到刚才提交的镜像。
用
docker push <your-image-name:TAG>可以将镜像提交到DockerHub。(需要先注册)
在完成上述操作后,你就有一个
centos为操作系统的
java8环境了。可以以此为基础构建项目、工程。
构建自己的项目
使用以上述java8 Docker镜像构建项目,本质上是以上述镜像为底层镜像,将你的项目的jar包、启动命令(假设是shell脚本)打包构建成一个新的镜像。打包方式可以使用Dockerfile.
可以考虑这种做法:
将项目jar包放在某个映射路径下(例如上文中的/root/software/),在启动脚本中,将此jar包拷贝到工作路径下,然后再启动。这样可以确保你的项目的base镜像肯定可以运行(因为在最初创建base镜像的时候,有个初始的jar包在工作路径下),而后续更新,只需要更新宿主的映射路径下的项目jar包即可。
示例
Dockerfile:
FROM <your-repository>/java-base:1.8 WORKDIR /var/project COPY /home/docker1/certs /var/prog/certs COPY /home/docker1/project /mnt/software/project EXPOSE 8080 CMD ["/bin/bash", "./start_api.sh"]
start_api.sh示例:
#!/bin/bash cp /mnt/software/project/* . /usr/local/jdk/bin/java -cp your-project.jar com.your.project.Application &
关于
Dockerfile中的
ADD,
COPY的简单区别,可以参见这里
启动项目
命令行启动:docker run -d -p 10000:8080 -v /home/docker1/project:/var/project -v /home/docker1/certs:/var/project/certs <your-repository>/<your-image-name> /var/project/start_api.sh
参数解释:
-d: 表示后台运行。用于启动一个服务,例如后端服务器、web服务器等等。
-p <local-port>:<docker-inside-port>: 指定将宿主机的port映射到docker内部的port。这样通过访问宿主机的port,就可以访问docker内部对应的服务。
最后一个参数,是启动时执行的指令。这里假设是通过某个shell脚本启动的,就指定运行该脚本。
使用脚本启动时,需要注意:如果开头这一行
#!/bin/bash丢了,会报错
使用
docker-compose
更为方便的启动方式,是使用
docker-compose命令。先创建一个空的
docker-compose.yml文件,例如:
version: '2' services: <your-service-name>: image: "<your-repository>/<your-image-name>" ports: - "10000:8080" volumes: - /home/docker1/project:/var/project - /home/docker1/certs:/var/project/certs
在
docker-compose.yml所在路径,使用命令:
$ docker-compose
即可自动按照
docker-compose.yml中的配置启动docker实例。
如果项目需要在docker中增加自定义的hosts,即修改/etc/hosts文件。
命令行启动方式:
在
docker run命令中使用
--add-host <your-host-name>:<your-host-ip>选项增加。如果有多个,就写多个
--add-host
docker-compose方式:
使用
extra_hosts来指定。示例:
version: '2' services: <your-service-name>: image: "<your-repository>/<your-image-name>" ... extra_hosts: - "host1:1.2.3.4" - "host2:1.2.3.5" ...
由于项目需要,要基于java8镜像构建maven镜像用于打包。下篇会详细记录。
相关文章推荐
- 【Dockerfile】CentOS6.x中Docker通过Dockerfile构建常用的基础环境 # 设置基本的镜像,后续命令都以这个镜像为基础 FROM centos # 作者信息 MAI
- 从零开始构建一个centos+jdk7+tomcat7的镜像文件 centos7系统下docker运行环境的搭建 准备centos基础镜像 docker pull centos 或者直接下载我准备
- 第3章 DockerFile构建Java环境镜像
- 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像
- 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像
- docker实战1 (docker-toolbox的安装,docker基础命令详解[运行,容器导入/导出,镜像导入/导出,数据卷,网络],构建100个docker实例的测试环境)
- Docker 从零开始制作基础镜像[centos]
- Docker 从零开始制作基础镜像[centos]
- Java基础学习总结(52)——liunx系统centos上搭建java开发环境
- Centos下二进制方式安装MySQL (Docker-Centos镜像环境)
- 使用Docker镜像搭建consul和swarm集群基础环境及overlay网络
- docker 构建基础镜像 时区问题
- docker 的java编译环境构建详细介绍
- Docker之java web开发基础环境
- Docker安装初试&&制作centos6.5基础镜像
- Docker 构建 Java Web 开发环境(一)
- Docker 从零开始制作基础镜像[centos]
- Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境
- Docker 构建 Java Web 开发环境——使用Dockerfile(二)
- Docker 从零开始制作基础镜像[centos]