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测试
网友评论