Docker自定义镜像

接上一篇:Docker数据卷
♦️前期我们使用镜像都是从仓库中pull下来的
那么,仓库中的镜像其实也是docker的用户上传过去的,所以我们也可以通过自己的方式去自定义镜像


♦️创建Docker镜像的方式有三种

  • docker commit命令:由容器生成镜像;
  • Dockerfile文件+docker build命令;
  • 从本地文件系统导入:OpenVZ的模板。

下面来看第二种方式
♦️在windows下新建一个Dockerfile文件
把后缀名删了,该文件不给后缀
在这里插入图片描述
在Dockerfile文件中编写内容,指定我们需要的镜像信息
♦️Dockerfile文件中常用的内容如下:

🔹FROM :指定当前自定义镜像依赖的环境
🔹MAINTAINER :镜像创建者信息
🔹EXPOSE :开放的端口
🔹COPY:将相对路径下的内容复制到自定义镜像中
🔹ENV :设置变量
🔹ADD :复制文件到镜像
🔹RUN :制作镜像时执行的命令,可以有多个
🔹WORKDIR :定义容器默认的工作目录
🔹CMD :容器启动时执行的命令,可以写多个,只以最后一个为准。

♦️1. 自定义一个tomcat镜像,并把ssm.war部署到tomcat中
在这里插入图片描述
复制到daocloud.io/library/tomcat:8.5.15-jre8

返回Dockerfile文件完成编写

from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps

🔺from :指定当前自定义镜像依赖的环境
🔺copy:将相对路径下的内容复制到自定义镜像中。(注意是相对路径,所以ssm.war这个压缩包要和Dockerfile在同级目录下)
在这里插入图片描述
♦️2. 将准备好的Dockerfile和相应的文件拖拽到Linux操作系统中,通过Docker的命令制作镜像

🔹接下来打Xterm中,把这个Dockerfile和ssm.war都拖拽到新建的ssm-tomcat文件夹中
在这里插入图片描述
在这里插入图片描述
cd ssm-tomcat/切换到新建的ssm-tomcat文件夹
ls查看,发现存在Dockerfile和ssm.war
接下来输入以下命令
docker build -t ssm-tomcat:1.0.0 .
docker build -t 自定义镜像名:版本号 .

在这里插入图片描述
docker build命令,-t选项用来指定镜像的tag,最后一个点代表把当前目录下的Dockerfile文件制作成一个自定义的镜像
它会自动识别Dockerfile这个文件名
在这里插入图片描述
要想用我们的镜像启动一个容器,通过这个ssm-tomcat镜像的Image ID来创建容器

docker run -d -p 8081:8080 --name custom-ssm-tomcat 40

在这里插入图片描述

#启动容器
docker run -d -p 8081:8080 --name custom-ssm-tomcat 40

#防火墙开放端口
firewall-cmd --add-port=9090/tcp --permanent --zone=docker
firewall-cmd --reload

docker ps查看所有运行的容器
在这里插入图片描述
可以看到,刚刚创建的容器custom-ssm-tomcat已经存在了
浏览器访问报错:
在这里插入图片描述
看一下日志:
在这里插入图片描述
在这里插入图片描述
解决办法就是访问http,而不是https
具体看这篇:Tomcat报错:org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误

再次访问成功!
在这里插入图片描述
浏览器上访问https://192.168.199.10:8081/ssm
成功运行部署到自定义镜像的SSM项目

♦️这篇写的比较详细:Docker自定义镜像

🦩上面只演示了form和copy
Dockerfile文件中其他常用的内容,在下面例题中演示

♦️例1. Dockerfile文件

#指定基础镜像(java:8-alpine这个在dockerhub上面已经找不到了)
FROM openjdk:8-jre-alpine 

#拷贝jar包到上面基础镜像的/tmp目录下,并命名为 app.jar
COPY ./docker-demo.jar /tmp/app.jar

#暴露端口(就是容器的端口,前面有用过-p 8080:80,8080是宿主机端口,
# 而80就是这里EXPOSE的端口号,当然了,这里我们暴露出去的端口号是9090)
EXPOSE 9090
 
#入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

♦️例2. Dockerfile文件


# 指定基础镜像(即基于哪个系统,如果是Ubuntu16.04,那就是ubuntu:16.04,当然了,具体还得按照dockhub官网的来,不能乱写)
FROM centos:7
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包(这里的$JAVA_DIR就是上面的/usr/local)
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDKRUN就是使用我们的终端运行的指令)
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口(就是容器的端口,前面有用过-p 8080:80,8080是宿主机端口,
# 而80就是这里EXPOSE的端口号,当然了,这里我们暴露出去的端口号是9090EXPOSE 9090

# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

tar -xf ./jdk8.tar.gz命令,tar -x是解压

♦️Dockerfile创建自定义Docker镜像以及CMDENTRYPOINT指令的比较:
Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker允许用户通过Dockerfile来定义自己的镜像。下面是一个简单的示例,演示如何创建一个自定义镜像: 1. 首先,在一个空白目录中创建一个名为Dockerfile的文件。 2. 在Dockerfile中,使用FROM指令指定基础镜像。例如,可以选择一个适合你的应用程序的操作系统作为基础镜像。 ``` FROM ubuntu:latest ``` 3. 接下来,使用RUN指令执行一系列命令来设置镜像的环境。例如,安装一些软件包或配置一些文件。 ``` RUN apt-get update && apt-get install -y software-properties-common ``` 4. 使用COPY指令将本地文件复制到镜像中。例如,复制应用程序的源代码文件。 ``` COPY . /app ``` 5. 使用WORKDIR指令设置工作目录。例如,进入应用程序的根目录。 ``` WORKDIR /app ``` 6. 使用CMD指令定义容器启动时要运行的命令。例如,启动应用程序。 ``` CMD ["python", "app.py"] ``` 7. 保存并关闭Dockerfile。 接下来,你可以使用以下命令构建自定义镜像: ``` docker build -t my-custom-image:tag . ``` 其中,`-t`参数用于指定镜像的名称和标签,`.`表示Dockerfile所在的当前目录。 构建过程可能需要一些时间,取决于你的镜像大小和网络速度。构建完成后,你可以使用以下命令查看所有可用的镜像: ``` docker images ``` 你应该能够看到刚刚构建的自定义镜像。 希望这个简单示例可以帮助你开始创建自己的Docker自定义镜像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素心如月桠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值