将本地主机的war在docker的tomcat容器上发布
docker run -d --name tomcat -p 8080:8080 tomcat #创建一个tomcat容器
docker exec -it tomcat /bin/bash #进入到容器内部查看文件结构
exit #退出容器
#自行cd到本地主机war所在的目录
docker cp war包名称 tomcat:/usr/local/tomcat/webapps #将本地主机的war复制到容器内部即可。
使用docker inspect tomcat查看tomcat容器信息
lowerdir=镜像的各个层,镜像层相关的文件均为只读的。如果用户在容器层中引入一个与镜像层中同名的文件,则会覆盖掉镜像层中对应的文件,用户只能看见容器层中的那个文件。容器的文件挂载就是基于这一原理实现的
容器层
| |
镜像各个层
容器层文件和镜像层文件的本质区别是:是否能够删除,镜像层文件是无法删除的。
因此,docker通过镜像创造出一个容器,只需要将镜像层的文件保持不变并在上面增加一个容器层即可。
如果需要通过容器转换为镜像,则直接将容器层的文件转换为只读即可。
将容器转换为镜像:
docker commit -a "w" -m "test" tomcat tomcat:test
#-表示提交的作者信息,-m表示添加的注释,tomcat表示提交的容器名,tomcat:test表示创建的新镜像的名称为tomcat,版本为test
docker images #查看提交到本地仓库的tomcattest版本镜像。
docker run -d --name tomcat2 -p 8081:8080 tomcat:test #以提交的tomcat镜像创建一个tomcat容器
docker ps #查看当前docker所使用的端口
将容器转换为镜像(使用dockerfile命令):
使用vi命令新建一个Dockerfile文件。如,现在要新建一个tomcat镜像,则在文件里写入,
FROM tomcat #通过当前镜像库中的哪个镜像创建
ADD ['本地主机中需要添加到镜像的war包路径','复制到的容器路径'] #前者的路径是以当前Dockerfile文件所在的路径
EXPOSE 8080 #加上这一句,可以让用户了解到当前镜像所占用的端口为8080
#创建了Dockerfile文件后,
docker build -t tomcat:test2 . #-t后面跟的是主体容器名称,后面的点表示创建使用的dockerfile就在当前目录,因为dockerfile文件的名字固定。因此不用写明文件名
docker images #查看docker本地仓库的镜像
docker run -d --name tomcat3 -p 8082:8080 tomcat:test2 #以创建的tomcat镜像创建一个tomcat容器
docker ps #查看当前docker所使用的端口
使用 docker history tomcat3命令查看镜像的文件结构,发现Dockerfile新增的命令会在最上层,Dockerfile文件中操作命令越多,镜像文件结构的层数越多,因此,将Dockerfile的多条操作命令写成一行,可以加快镜像部署速度。
Dockerfile指令集:
Dockerfile指令集
1 FROM
第一条指令必须为FROM指令,用于指定基础镜像。
2 MAINTAINER
指定维护者信息。
3 RUN
会在shell终端运行命令。
4 EXPOSE
格式为 EXPOSE [ ...],声明容器需要暴露的端口号。
-----------镜像启动可以通过 –P 或 -p 进行端口映射的绑定。
5 ENV
指定一个环境变量,可以被后续的RUN引用,并且在容器中记录该环境变量。
6 ADD
该命令将复制指定的到容器中的。
-------其中可以是Dockerfile所在目录的一个相对路径;也可以是tar文件(自动解压)。
7 VOLUME
格式为 VOLUME [path]。
--------创建一个可以从本地主机或其他容器挂载点,一般用来存放需要保持的数据。
8 USER
指定运行容器时的用户名,后续的RUN也会指定该用户。
9 WORKDIR
指定工作空间,后续命令都在此目录下执行。
10 CMD
11 ENTRYPOINT
CMD与ENTRYPOINT命令的区别:使用了ENTRYPOINT命令后,如果在运行由该Dockerfile文件创建的镜像语句后面增加了echo这些命令,则只会作为参数附加。如:
docker run -d --name test5 tomcat echo 123
发布war步骤:
1.mvn打包
2.docker build 因为指定镜像名字的不确定,因此将docker build作为一个mvn插件来封装
3.docker run
在项目文件夹下,使用mvn clean package docker:build命令对项目进行打包并制作成一个镜像。