文章目录
自定义镜像的作用
在我们创建一个容器的时候,使用了基础镜像,但是在工作等使用中基础镜像是不能满足需要的,而且在容器中安装了jdk、mysql等等之后一旦删除掉了容器,容器里面的配置也被删掉了。
这样我们可以把一个已经配置好了的容器打包成镜像,想用的时候直接使用即可。
docker目前镜像的制作有两种方法:
- 基于Docker Commit制作镜像
- 基于dockerfile制作镜像,Dockerfile方式为主流的制作镜像方式
Commit构建自定义镜像
对容器的修改以及保存
启动并进入容器:
docker run -it centos:7 /bin/bash
在/usr/local 路径下创建demo目录:
mkdir /usr/local/demo
安装ifconfig命令:
yum -y install net-tools
退出容器后
构建镜像:
docker commit 4eb9d14ebb18 mycentos:7
docker commit -a "XD" -m "mkdir /home/xdclass" 4eb9d14ebb18 mcentos:7
-a:标注作者
-m:说明注释
再查询镜像就有了:
删除原来的容器,使用自定义的镜像重新创建,查看容器的demo文件夹还在不在、ifconfig有没有:
退出容器后,可以查看详细信息(镜像和容器都可以):
docker inspect [ID]
Dockerfile构建镜像
dockerfile文件:
# this is a dockerfile
FROM centos:7
MAINTAINER zyTen 123456@qq.com
RUN echo "running..."
WORKDIR /usr/local/demo # 指明工作路径,没有会进行创建
COPY 123.txt /usr/local/demo # 123.txt存放位置与dockerfile存放位置要相同
RUN yum install -y net-tools
构建:
docker build -t mycentos:dockerfile .
查看镜像,进入验证:验证成功
dockerfile常用命令
- FROM
基于哪个镜像 - MAINTAINER
注明作者 - COPY
复制文件进入镜像(只能用相对路径,不能用绝对路径) - ADD
复制文件进入镜像(假如文件是.tar.gz文件会解压) - WORKDIR:
指定工作目录,假如路径不存在会创建路径 - ENV
设置环境变量 - EXPOSE
暴露容器端口 - RUN
在构建镜像的时候执行,作用于镜像层面 - ENTRYPOINT
在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条 - CMD
在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条
容器启动后执行默认的命令或者参数,允许被修改
命令格式:
shell命令格式:RUN yum install -y net-tools
exec命令格式:RUN [ "yum","install" ,"-y" ,"net-tools"]
虚拟机(宿主机)构建java环境
下载jdk和Tomcat压缩包
在这里我将压缩包放在创建好的/root/test
目录下,解压缩后,将解压后的文件移动到创建好的/usr/local/jdk
目录下
官网下载jdk->地址:https://www.oracle.com/java/technologies/downloads/
官网下载Tomcat->地址:https://tomcat.apache.org/download-80.cgi
或者使用wget下载Tomcat:
yum install -y wget
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.43/bin/apachetomcat-8.5.43.tar.gz
本地文件上传到虚拟机中:
解压缩
解压:
tar -xf apache-tomcat-8.5.87.tar.gz
tar -xf jdk-8u361-linux-x64.tar.gz
配置jdk、检验
移动jdk文件:
添加配置环境
# 打开文件
vi /etc/profile
# 插入到文件的最后位置
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# 退出文件后执行
source /etc/profile
检验:配置成功
java -version
启动tomcat
移动Tomcat文件:
进入/usr/local/tomcat/bin
目录下,执行./startup.sh
启动Tomcat
使用虚拟机的ip地址和8080端口访问,检验是否启动成功:
Dockerfile构建java环境
tomcat运行:前台运行;后台运行
使用./startup.sh
是后台运行,如果使用dockerfile执行这个命令会导致自动退出,所以需要使用前台运行:./catalina.sh run
dockerfile编写
FROM centos:7
ADD jdk-8u211-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
ADD apache-tomcat-8.5.35.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
构建容器
docker build -t mycentos:jdk .
运行容器
运行之前,先打开一下防火墙:docker start firewalld.service
运行容器:docker run -itd -p 80:8080 mycentos:jdk /bin/bash
-p 80:8080
:把容器中暴露出来的8080端口映射给宿主机的80端口
测试:
挂载目录,运行容器:docker run -itd -p 8080:8080 -v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT mycentos:jdk /bin/bash
-v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT
:挂载目录,/root/test/ROOT
挂载到/usr/local/tomcat/webapps/ROOT
上
/usr/local/tomcat/webapps/ROOT
:tomcat发布目录
宿主机创建/root/test/ROOT
目录,并创建一个html文件:
测试:
可能出现的问题
创建的容器分配不到ip,没有网络
解决方法:创建虚拟机的iso镜像文件是否是最新的?不是的话去下载一个新的→地址:
https://mirrors.aliyun.com/centos/7/isos/x86_64/?spm=a2c6h.25603864.0.0.33324511p08phk
选择带DVD的
或者使用我下载的文件:
链接:https://pan.baidu.com/s/1PmNramL-PnsIkD-W_9pOFg?pwd=037p
提取码:037p