【Docker】3.基于Dockerfile创建自己的镜像

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搭建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值