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

 

    1. 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 时,<宿主端口>:<容器端口>  (将容器的端口指定宿主机端口)