现在有需求要用docker跑java项目,而且有多个项目,所以我的思路是自己搭建一个基于jdk8的基础镜像,后边所有的项目镜像在这个基础上再编译。
将要用到的技术及软件:
- 编译方式:dockerfile
- Linux镜像:centos7
- jdk:jdk1.8.0_192
- 这里要构建一个基于centos7和jdk1.8的镜像。
1、 下载centos7镜像
执行docker search centos
[root@localhost]# docker search centos
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/centos The official build of CentOS. 4392 [OK]
docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 112 [OK]
docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 97 [OK]
docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 55 [OK]
docker.io docker.io/tutum/centos Simple CentOS docker image with SSH access 42
docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 41 [OK]
docker.io docker.io/gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glu... 30 [OK]
docker.io docker.io/centos/mysql-57-centos7 MySQL 5.7 SQL database server 28
docker.io docker.io/openshift/base-centos7 A Centos7 derived base image for Source-To... 26
docker.io docker.io/centos/python-35-centos7 Platform for building and running Python 3... 23
第一个是官方的,现在使用这个
docker pull centos:7
下载完后查看本地镜像
[root@localhost]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos 7 49f7960eb7e4 2 weeks ago 199.7 MB
可以看到centos的基础镜像只有200M。
2、编译Dockerfile
新建一个文件,这里命名为jdk_dockerfile
vi jdk_dockerfile
很多地方都是使用的Dockerfile这种固定名称,其实创建的时候可以通过 -f 来指定dockerfile
jdk_dockerfile中的内容
FROM centos:7
MAINTAINER tuheishan
ADD jdk-8u192-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_192
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
1、这里使用的镜像是上面下载的centos镜像;
2、jdk拷贝到dockerfile同级目录,如果在其它目录拷贝的时候可能出现找不到目录错误;
3、使用ADD指令会直接对jdk-8u192-linux-x64.tar.gz进行解压缩,不用再单独的tar解压jdk了。
3、使用Dockerfile创建镜像
docker build -t jdk-8u192:20181227 . -f jdk_dockerfile
执行上面指令后在本地镜像中就能查询到创建的jdk镜像了
[root@localhost]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk-8u192 20181227 f2a16d7176f4 2 hours ago 575.8 MB
docker.io/centos 7 49f7960eb7e4 2 weeks ago 199.7 MB
这时候看到jdk的镜像增长到了570M。
1、 -t 指定镜像的名称和tag;
2、 使用-f 指定要使用的dockerfile,如果不指定会寻找当前目录名为Dockerfile的文件
3、上面有个 . ,这个表示当前目录,必不可少的
4、 运行创建的镜像
[root@localhost]# docker run -d -it jdk-8u192:20181227 /bin/bash
4b4a9120e6acbd47011e93efc4970b7fc5c6d0bcd916e13e5cbbe9a26810a639
[root@localhost]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b4a9120e6ac jdk-8u192:20181227 "/bin/bash" 39 seconds ago Up 38 seconds hopeful_brahmagupta
上面包含两条指令,run创建容器和查看容器。
注意:创建容器的时候一定要使用 -it /bin/bash这种方式,要不然jdk的容器起不来。
5、验证镜像中的jdk
进入容器中查看jdk:
[root@localhost]# docker exec -it 4b /bin/bash
[root@4b4a9120e6ac /]# java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b01, mixed mode)
说明咱们的jdk镜像创建成功了。