目录
一、安装镜像
下载并安装需要版本的tomcat镜像,步骤参考“安装MySQL8.0镜像”
二、将war包放入服务器
用FileZilla工具将war包上传至运行容器的服务器中
三、创建并运行容器
sudo docker run -d
--name=container_name
-p 80:8080
-e DB_HOST=11.11.11.11
-e DB_PORT=3306
...//很多环境变量
tomcat:8-jdk8
四、在容器内部部署war包并运行
sudo docker cp ***.war container_name:/usr/local/tomcat/webapps/
进入容器相应路径验证war包是否已存在。
至此,已完成tomcat容器的创建,并在容器内部部署了war包
在网页中输入11.11.11.11:80/***,验证是否可以访问
五、保存镜像
通过基础镜像进行一系列操作,再将修改过的基础镜像镜像提交成一个新的副本,下次可以直接使用修改过后的镜像。
方法一:docker commit
sudo docker commit -m="描述信息" -a="作者" 容器名/容器ID 目标镜像名:[TAG]
sudo docker commit container_name image_name:1.0
验证新镜像是否存在
sudo docker images
方法二:Dockerfile
1、Dockerfile介绍
Dockerfile是用来构建docker镜像的构建文件,命令参数脚本。
2、构建步骤
- 编写一个Dockerfile文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像(Docker Hub 、阿里云镜像仓库)
3、Dockerfile指令
-
FROM #基础镜像
FROM是Dockerfile文件开篇第一个非注释行代码,用于为镜像文件构建过程指定基础镜像,后续的指令都基于该基础镜像环境运行,基础镜像可以是任何一个镜像文件,docker build会在docker宿主机上查找指定的文件,如未找到会自动去Docker Hub Registry上拉取,如果没找到对应的镜像就会返回错误信息 -
MAINTAINER #维护者信息(新版即将废弃)
-
LABLE #镜像描述信息
-
ADD
将本地文件添加到容器中,tar文件会自动解压(网络压缩资源不会被解压),可以访问网络资源
格式:
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例:
ADD hom* /mydir/ # 添加所有以"hom"开头的文件
ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt"
ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
- COPY
功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 - WORKDIR #镜像的挂载目录
用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY、ADD指定设定工作目录。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录
格式:
WORKDIR /path/to/workdir
示例:
WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c)
- RUN
镜像构建的时候被需要运行的命令 - ENV
构建的时候设置环境变量 - CMD
指定这个容器启动的时候要运行的命令,只有之后一个会生效,可被替代
注:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
4、示例
编写Dockerfile文件
FROM tomcat:8-jdk8
MAINTAINER Ariel-W
COPY ***.war usr/local/tomcat/webapps/***.war
将Dockerfile文件上传至服务器的相关文件夹内,进入到该路径下,构建镜像
sudo docker build -f Dockerfile文件路径 -t 镜像名:[tag]
sudo docker build -t image_name:1.0 . //“.”表示在当前文件夹
用此镜像创建容器
sudo docker run -d
--name=container_name
-p 80:8080
-e DB_HOST=11.11.11.11
-e DB_PORT=3306
...//很多环境变量
//也可将环境变量用ENV加至Dockerfile文件内,这里就可以不用再写
image_name:1.0