Docker镜像的创建方式有使用docker commit 方式创建及使用Dockerfile的方式创建镜像,这里我们使用Dockerfile的定义文件和docker build命令来构建镜像。
在Docker上运行java程序首选我们得有相应的jdk环境,本文我们基于Centos7及jdk8创建jdk镜像。
1. 下载Centos7镜像
$ sudo docker pull centos:7
下面就是我们从docker hub官方下载的镜像。
[wxt@localhost ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos 7 1e1148e4cc2c 2 months ago 202 MB
2. 编写Dockerfile文件
创建一个目录将jdk-8u201-linux-x64.tar.gz拷贝进去,并创建一个jdk_dockerfile文件,编辑vi jdk_dockerfile
文件。
FROM centos:7
MAINTAINER will
ADD jdk-8u201-linux-x64.tar.gz /usr/local/nlp/java
ENV JAVA_HOME /usr/local/nlp/java/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
dockerfile指令说明
指令的一般格式为INSTRUNCTION arguments,指令包括FROM、MAINTAINER、RUN等。具体指令及说明如下:
指令 | 说明 |
---|---|
FROM | 指定所创建镜像的基础镜像 |
MAINTAINER | 指定维护者信息 |
RUN | 运行命令 |
CMD | 指定启动容器时默认执行的命令 |
ADD | 赋值指定的路径下的内容到容器中的路径下,可以为URL;如果为tar文件,会自动解压到路径下 |
ENV | 指定环境变量 |
LABEL | 指定生成镜像的元数据标签信息 |
EXPOSE | 声明镜像内服务所监听的端口 |
COPY | 赋值本地主机的路径下的内容到容器中的路径下;一般情况下推荐使用COPY而不是ADD |
ENTRYPOINT | 指定镜像的默认入口 |
VOLUME | 创建数据挂载点 |
USER | 指定运行容器时的用户名或UID |
WORKDIR | 配置工作目录 |
ARG | 指定镜像内使用的参数(例如版本号信息等) |
ONBUILD | 配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作的命令 |
STOPSIGNAL | 容器退出的信号 |
HEALTHCHECK | 如何进行健康检查 |
SHELL | 指定使用SHELL时的默认SHELL类型 |
3. 构建镜像
$ sudo docker build -t jdk-8u201:1.0 . -f jdk_dockerfile
1、 -t 指定镜像的名称和tag;
2、. 表示当前路径
3、 -f 指定要使用的dockerfile,如果不指定会寻找当前目录名为Dockerfile的文件
构建成功效果如下:
[wxt@localhost nlp]$ sudo docker build -t jdk-8u201:1.0 . -f jdk_dockerfile
Sending build context to Docker daemon 191.8 MB
Step 1/6 : FROM centos:7
---> 1e1148e4cc2c
Step 2/6 : MAINTAINER will
---> Using cache
---> 497ffa01b5b5
Step 3/6 : ADD jdk-8u201-linux-x64.tar.gz /usr/local/nlp/java
---> 4b9d5d50e5c9
Removing intermediate container bd27740620aa
Step 4/6 : ENV JAVA_HOME /usr/local/nlp/java/jdk1.8.0_201
---> Running in 1630e5218d9a
---> 58d6de448b2a
Removing intermediate container 1630e5218d9a
Step 5/6 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in f2a7aaed304f
---> 1cdc2e3177d3
Removing intermediate container f2a7aaed304f
Step 6/6 : ENV PATH $PATH:$JAVA_HOME/bin
---> Running in 931f50f2aa20
---> f1ee62462c0d
Removing intermediate container 931f50f2aa20
Successfully built f1ee62462c0d
运行sudo docker images
查看镜像,就可以看到自己创建的jdk镜像。
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk-8u201 1.0 f1ee62462c0d 8 minutes ago 598 MB
docker.io/centos 7 1e1148e4cc2c 2 months ago 202 MB
4. 运行镜像
$ sudo docker run -d -it jdk-8u201:1.0 /bin/bash
-d 后台运行
-p 宿主机端口:容器端口 #开放容器端口到宿主机端口
查看是否已运行
[wxt@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d605c070f7aa jdk-8u201:1.0 "/bin/bash" 12 seconds ago Up 11 seconds fervent_kilby
5. 进入Docker容器
通过docker exec 命令从虚拟机进入相应的docker容器,查看jdk是否配置成功。
$ sudo docker exec -it d605c070f7aa /bin/bash
d605c070f7aa 为运行容器的CONTAINER ID
[wxt@localhost ~]$ sudo docker exec -it d605c070f7aa /bin/bash
[root@d605c070f7aa /]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
运行后可以看到配置成功,ctrl+d
退出容器。
上一篇:【Docker】2.Docker安装及常用命令
下一篇:【Docker】4.Docker私库Registry及Harbor搭建