Docker:自定义镜像

(总结自b站黑马程序员课程)

环环相扣,跳过部分章节和知识点是不可取的。

一、镜像结构

镜像是分层结构,每一层称为一个Layer。

①BaseImage层:包含基本的系统函数库、环境变量、文件系统。

②Entrypoint:入口,是镜像中启动应用的命令。

③中间层:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置。

二、Dockerfile

Dockerfile的本质是一个文件,通过指令描述镜像的构建过程。其第一行必须是From,从一个基础镜像来构建。

基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine。

Dockerfile示例:

指定基础镜像

FROM ubuntu:16.04

配置环境变量,JDK的安装目录

ENV JAVA_DIR=/usr/local

拷贝jdk和java项目的包

COPY ./jdk8.tar.gz $JAVA_DIR/

安装JDK

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

COPY ./docker-demo.jar /tmp/app.jar

暴露端口

EXPOSE 8090

入口,java项目的启动命令

ENTRYPOINT java -jar /tmp/app.jar

我们首先在Linux中加入tmp目录并且创建一个docker-demo文件:

bash 复制代码
 cd /tmp/
 mkdir docker-demo

然后进入到创建docker-demo文件中:

bash 复制代码
 cd docker-demo

之后将需要的文件和Dockerfile文件本身拖入docker-demo中(使用MobaXterm很方便,文件直接拖入左侧目录即可)。

构建镜像:

bash 复制代码
 docker build -t javaweb:1.0 .

-t是tag标签,冒号前面是名字,冒号后面是版本。点代表从当前目录构建。

可以使用docker images检查镜像是否构建成功。

运行容器:

bash 复制代码
docker run --name web -p 8090:8090 -d javaweb:1.0

注意这里的8090是Dockerfile中指定暴露的端口。

也可以通过docker ps检查容器是否运行成功。

根据自己的端口号,课程的访问链接如下:

http://192.168.21.129:8090/hello/count

我们可以发现除了构建java项目以外,构建jdk项目具有通用性。可以使用其他人制作好的镜像,例如:java:8-alpine。更改一下版本号即可。

指定基础镜像

FROM java:8-alpine

COPY ./docker-demo.jar /tmp/app.jar

暴露端口

EXPOSE 8090

入口,java项目的启动命令

ENTRYPOINT java -jar /tmp/app.jar

三、附录

常用Dockerfile指令如下:

相关推荐
杨云龙UP14 小时前
ODA服务器RAC节点2/u01分区在线扩容操作记录及后续处理流程(Linux LVM + ext4 文件系统在线扩容操作手册)_20260307
linux·运维·服务器·数据库·ubuntu·centos
欲买桂花同载酒58221 小时前
程序人生-Hello’s P2P
运维·服务器·数据库
NineData21 小时前
AI时代的数据对比:DBA还需要盯着屏幕看差异吗?
运维·数据库
jyfool21 小时前
Ubuntu 远程桌面配置踩坑实录:从 TightVNC 到 x11vnc 的折腾之旅
linux·运维·ubuntu
网硕互联的小客服21 小时前
服务器防火墙是如何区分正常流量和攻击流量?
运维·服务器·网络
安当加密21 小时前
基于 RADIUS 的 Linux 服务器双因子认证:从 FreeRADIUS 到轻量级 ASP 方案的演进
linux·运维·服务器
ai产品老杨1 天前
打破异构算力壁垒:基于GB28181/RTSP与Docker容器化的企业级AI视频平台架构解析(附源码交付方案)
人工智能·docker·音视频
66清小风1 天前
服务器安装操作系统报X or window manager startup failed, falling back to mode
linux·kylin
A-刘晨阳1 天前
【Prometheus】Alertmanager配置钉钉告警
运维·云原生·钉钉·prometheus·监控
wangqiaowq1 天前
llama.cpp 启动命令优化
运维·服务器