Docker定制镜像部署项目到Docker容器
1、docker下创建项目工程名称
mkdir -p /usr/local/docker/qfjy_exam
cd /usr/local/docker/qfjy_exam
2、将桌面qfjy_exam.zip复制到访目录下
cp qfjy_exam-1.0-SNAPSHOT.zip /usr/local/docker/qfjy_exam/
3、创建镜像文件Dockerfile
4、构建镜像
docker build -t qfjy_exam .
5、进入镜像内查看:
docker run -it qfjy_exam bash
-
- EXPOSE 暴露端口
格式为 EXPOSE <
端口1> [<端口2>...]
。
EXPOSE
指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P
时,会自动随机映射 EXPOSE
的端口。
此外,在早期 Docker 版本中还有一个特殊的用处。以前所有容器都运行于默认桥接网络中,因此所有容器互相之间都可以直接访问,这样存在一定的安全性问题。于是有了一个 Docker 引擎参数 --icc=false
,当指定该参数后,容器间将默认无法互访,除非互相间使用了 --links
参数的容器才可以互通,并且只有镜像中 EXPOSE
所声明的端口才可以被访问。这个 --icc=false
的用法,在引入了 docker network
后已经基本不用了,通过自定义网络可以很轻松的实现容器间的互联与隔离。
要将 EXPOSE
和在运行时使用 -p <
宿主端口>:<容器端口>
区分开来。-p
,是映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而 EXPOSE
仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射
docker run -P
时,会自动随机映射 EXPOSE
的端口。
执行 -P
docker run -P tomcat_1
浏览器访问:
docker run -p
时,<
宿主端口>:<容器端口> (将容器的端口指定宿主机端口)