7、CentOS7 Dockerfile 构建镜像

2019-05-09  本文已影响0人  LH_0811

Dockerfile 可以基于一个已有的镜像。添加一些配置或部署一下程序后 构建成为一个新的对象。
常用的命令。

FROM image_name:tag  定义使用哪个基本镜像启动构建流程 
MAINTAINER user_name  声明镜像的创建者。版权声明
ENV key value  添加环境变量 这个可以写多个
RUN command  表示要执行的命令 这个是核心内容 可以写多条
ADD source_dir/file dest_dir/file  将宿主机的文件复制到容器中 如果是压缩文件的话 会自己解压
COYP source_dir/file dest_dir/file  同ADD 就是不会解压
WORKDIR path_dir  工作目录 就是这样命令执行的目录 登录容器后也在这个目录
CMD 容器启动后要处理的命令

这个方式 可以很方便的在一台装有docker的宿主机上 同步系统的环境 方便系统的部署和迁移

现在以docker官方的centos7 镜像 添加 jdk1.8 然后 部署一个springboot的HelloWorld项目 来练习下Dockerfile

准备下面的三个东西

1/  从官网下载的jdk8的rpm安装包  重命名为 jdk8.rpm
2/  一个springboot的web程序 请求路径 localhost:61001/hello 返回 springboot hello world
3/ Docker 内容如下

FROM centos
WORKDIR /hello
COPY jdk8.rpm jdk8.rpm
RUN rpm -ivh jdk8.rpm
COPY helloword.jar helloword.jar
CMD java -jar /hello/helloword.jar 

这里尝试最后一句话换成
CMD nohup java -jar /hello/helloword.jar & 但是容器启动失败原因还没搞清楚

把这三个文件上传到宿主机

注意是这个Dockerfile的名称是固定的
docker会在当前目录下找到这个文件来进行构建
如果基础镜像没有 就会下下载基础镜像

[root@localhost hello]# pwd
/root/hello
[root@localhost hello]# ls
Dockerfile  helloword.jar  jdk8.rpm
[root@localhost hello]# 

然后 使用docker 构建命令来构建镜像

docker build -t='hello_jdk8' ./

这个指令中 -t是指定 构建后的镜像的名称 后面的./是指 Dockerfile文件所在目录,当前目录下 就是./

执行构建命令后 输出结果

[root@localhost hello]# docker build -t='hello_jdk8' ./
Sending build context to Docker daemon  196.2MB
Step 1/6 : FROM centos
 ---> 9f38484d220f
Step 2/6 : WORKDIR /hello
 ---> Running in efe3c8785b3e
Removing intermediate container efe3c8785b3e
 ---> 16a36455f95b
Step 3/6 : COPY jdk8.rpm jdk8.rpm
 ---> 7c21acc6b2dc
Step 4/6 : RUN rpm -ivh jdk8.rpm
 ---> Running in 4fbae5500ff0
warning: jdk8.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ########################################
Updating / installing...
jdk1.8-2000:1.8.0_211-fcs             ########################################
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
Removing intermediate container 4fbae5500ff0
 ---> 992c75d314e6
Step 5/6 : COPY helloword.jar helloword.jar
 ---> 36b6db9b184f
Step 6/6 : RUN nohup java -jar helloword.jar &
 ---> Running in 0ecccfc8a477
Removing intermediate container 0ecccfc8a477
 ---> 9cc272777893
Successfully built 9cc272777893
Successfully tagged hello_jdk8:latest

成功之后 查看docker images列表

[root@localhost hello]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE
hello_jdk8                latest              9cc272777893        About a minute ago   803MB
nginx                     latest              27a188018e18        3 weeks ago          109MB
tomcat                    latest              5a069ba3df4d        3 weeks ago          465MB
centos/mysql-57-centos7   latest              e35b3f7a4ea0        5 weeks ago          452MB
redis                     latest              a55fbf438dfd        6 weeks ago          95MB
centos                    latest              9f38484d220f        7 weeks ago          202MB

发现hello_jdk8的镜像已经构建成功

我们使用hello_jdk8镜像 创建一个容器 看看是不是已经部署了 helloworld的程序

[root@localhost hello]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost hello]# docker run -di --name=hello_jdk8 -p 61001:61001 hello_jdk8
544e11293bcadda2b134e88326eae2402f067aff325ba28bf9d762d362981a69
[root@localhost hello]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
544e11293bca        hello_jdk8          "/bin/bash"         5 seconds ago       Up 4 seconds        0.0.0.0:61001->61001/tcp   hello_jdk8

访问宿主机的61001/hello测试

上一篇 下一篇

猜你喜欢

热点阅读