dockerfile示例
dockerfile使用注意准则
1.CMD指令
CMD指定在 Dockerfile中只能使用一次,如果有多个,则只有最后一个会生效。
CMD的目的是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
CMD会在启动容器的时候执行,build 时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关了
2.启动容器并启动bash(交互方式):
$docker runi-t /bin/bash
表示当前用户使用的shel1是/bin/bash,所谓的she1l你可以理解为操作系统和人之间交互的平台
3.前台运行
CMD指令就是用于指定默认的容器主进程的启动命令的。Docker 不是虚拟机,容器中的应用都应该以前台执行,而不是像虚拟机、物理机里面那样,用 upstart/systemd 去启动后台服务,容器内没有后台服务
为什么要这么做呢?因为Docker容器仅在它的1号进程(PID为1)运行时,会保持运行。如果1号进程退出了,Docker容器也就退出了。
4.将多个RUN指令合并为一个
Docker镜像是分层的,Dockerfile中的每个指令都会创建一个新的镜像层。
5.设置默认的环境变量,映射端口和数据
ENV MEDIA DIR=/media \
NODE ENV=production \
APP PORT=3000
VOLUME SMEDIA DIR
EXPOSE SAPP PORT
6.ADD和ICOPY
虽然ADD和COPY功能相似,但一般来讲,更建议使用COPY。因为COPY比ADD更透明,COPY只支持从本地文件到容器的拷贝
ADD的最优用处是本地tar包自动解压缩到镜像中
任务:
方法一:
mkdir tomcat cd tomcat/ docker images
我们先把已有的先干掉
docker rm -f `docker ps -aq`
给容器起个名字叫做c1
docker run -it --name c1 rockylinux:8 /bin/bash
先把jdk传到rocky-8.10-1里
然后把jdk传到192.168.6.11:/root/tomcat
然后把jdk拷到容器c1底下,比如说是opt底下
进入容器
rpm -ivh /opt/jdk-8u202-linux-x64.rpm
因为有依赖所以报错了
那就换另一种
yum install /opt/jdk-8u202-linux-x64.rpm
在容器里
在外面下载
应该在容器里这样写
拷进容器里面
解压
启动
提交一下
看下是不是在运行中
用这个给提起来
把这个删了换一种方式
看一下日志,启动起来了,但好像端口映射好像没有
要加一个监控他的日志
还是有问题
用另一种方法吧
然后进到里面去
方法二:dockerfile的方式做
vim Dockerfile
在后台运行
docker run -d --name c3 -p 8888:8080 tomcat:v2
还是没起来
看下日志是什么原因
内存溢出,通过查找资料发现由于文件描述符不够导致的
这样加参数就好了