一、工具
1.IDEA、2.VMware-CentOS7(安装好Docker)、3.合理的传输工具
二、准备
1.将springboot项目打成jar包;
2.利用合理的方式传输到虚机准备好的文件夹(InvoiceFile)内;
首次自以为是的利用Vmware Tools直接将jar包从物理机拖入到了虚机内,部署到容器内后死活启动不起来,查询日志才发现jar包损坏。
3.创建一个新的文件(命名为Dockerfile)
1.# vi Dockerfile --创建并编辑文件(此时处于命令模式);
2.# 键入i切换到输入模式,以输入字符;
3.# 输入:
#FROM命令定义构建镜像的基础镜像,该条必须是dockerfile的首个命令
FROM java:8
#用于指定持久化目录
VOLUME /temp
#将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
ADD invoice-0.0.1-SNAPSHOT.jar invoice.jar
#构建镜像时执行的命令;
RUN bash -c ‘touch /invoice.jar’
#配置容器,使其可执行化。配合CMD可省去"application",只使用参数,删除线文字可以不带;
ENTRYPOINT [“java”,"-Djava.security.egd-file:/dev/./urandom","-jar","-Xmx1024m","-Xms1024m","/invoice.jar"]
4.# 键入ESC,退出输入模式,切换到命令模式;
5.# 键入:,进入底线命令模式,然后依次输入wqEnter,保存退出;
三、打包镜像
1.在此文件夹(InvoiceFile)打开终端;
2.输入docker build -t invoice-images .,最后的.是必须的,表示当前目录;
3.回车等待镜像创建完成即可;
若出现下面情况,应该就是最后少输了.:
“docker build” requires exactly 1 argument.
See ‘docker build --help’.
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile
四、运行容器
-
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04
就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。 -
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
1.在终端输入:
docker run -d -p 8080:8080 invoice-images
docker run -d -p 8080:8080 --name invoice-container invoice-images
-d: 让容器在后台运行
-P(大写): 将容器内部使用的网络端口映射到我们使用的主机上
-p: 指定端口
–name :设置容器命名
invoice-images是容器镜像
2.在终端输入docker ps即可查看正在运行的容器,若是有invoice-container则证明容器运行成功;
3.若无则可在终端输入docker ps -a查看所有容器,这里有就表示容器创建成功但是运行失败;
4.可以输入docker logs imagesID查看日志,imagesID是镜像的ID,可以输入docker images查看(此命令是查看镜像信息)
五、其他
1.容器镜像的相关指令
docker ps // 查看所有正在运行容器
docker logs containerID //查看xxx容器的日志
docker stop containerId // containerId 是容器的ID
docker ps -a // 查看所有容器
docker ps -a -q // 查看所有容器ID
docker stop (具体ID) // stop停止所有容器(或具体ID的容器)
docker restart containerID //重启此ID的容器
docker rm (具体ID) // remove删除所有容器(或具体ID的容器)
docker rmi imagesID //删除此ID的镜像2.镜像导入导出
方式一:导出的文件大于方式二(因为这个方式将镜像的所有历史信息都保留了下来,能够回滚操作)
docker save -o aaa.tar bbb-images //将bbb镜像导出到(-o) aaa.tar
docker load -i aaa.tar //从aaa.tar导入(-i)到镜像及相关元数据(包含tag信息)
方式二:导出的文件小于方式一(只是单纯的在容器中导出)
docker export -o aaa.tar bbb-container //将bbb容器导出到(-o) aaa.tar
docker import aaa.tar aaa:aaa //将aaa.tar导入到aaa:aaa(tag)镜像