您的位置:首页 > 运维架构 > Docker

[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镜像用于打包。下篇会详细记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker
相关文章推荐