构建docker镜像并上传至hub

使用Dockerfile构建容器

学习Dockerfile的最好方式就是阅读别人写的Dockerfile,遇到不会的指令就查一查Dockerfile的文档

文件结构

Dockerfile 一般分为 4 部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,“#”为 Dockerfile 中的注释。
Dockerfile 主要指令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM:指定基础镜像,必须为第一个命令。
MAINTAINER:维护者信息。
RUN:构建镜像时执行的命令。
ADD:将本地文件添加到容器中,tar 类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似 wget。
COPY:功能类似 ADD,但是是不会自动解压文件,也不能访问网络资源。
CMD:构建容器后调用,也就是在容器启动时才进行调用。
ENTRYPOINT:配置容器,使其可执行化。配合 CMD 可省去“application”,只使用参数。
LABEL:用于为镜像添加元数据。
ENV:设置环境变量。
EXPOSE:指定与外界交互的端口。
VOLUME:用于指定持久化目录。
WORKDIR:工作目录,类似于 cd 命令。
USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用 USER指定用户时,可以使用用户名、UID 或 GID,或是两者的组合。当服务不需要管理员权限时,可通过该命令指定运行用户。
ARG:用于指定传递给构建运行时的变量。
ONBUILD:用于设置镜像触发器。

接下来以 centos:latest 为基础镜像,安装 jdk1.8 并构建新的镜像 centos-jdk。
例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# CentOS with JDK 8
# 指定基础镜像
FROM centos
# 指定作者
MAINTAINER lewiserii
# 新建文件夹用于存放 jdk 文件
RUN mkdir /usr/local/java
# 将 JDK 文件复制到镜像内并自动解压
ADD jdk-8.tar.gz /usr/local/java/
# 创建软链接
RUN ln -s /usr/local/java/jdk1.8.0_281 /usr/local/java/jdk
# 设置环境变量
ENV JAVA_HOME=/usr/local/java/jdk
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH=${JAVA_HOME}/bin:$PATH

构建镜像

新建一个目录,然后在新目录下新建一个Dockerfile(注意D要大写)
放入jdk的压缩包
将你写好的内容复制进Dockerfile文件
使用build构建镜像

docker build -t centos-jdk8:v1.0 .

其中-t centos-jdk:v1.0表示打包的镜像名为centos-jdk,tag为v1.0(tag是可以任意命名的,不一定要是这种格式),注意命令的最后有一个.,这个表示打包的上下文(其实就是Dockerfile所在目录)是在当前目录,然后目录下的Dockerfile就会被编译执行。

执行完毕后运行docker images就会发现多了一个centos-jdk镜像。

可以先运行一下容器查看效果

上传至docker hub

1:首先需要在官网创建一个账户

2:在docker中登陆

docker login -u 用户名 -p 密码

3:将镜像命名你的用户名/镜像名这种形式,不然会push认证不通过

docker tag xxx:xxx 你的用户名/镜像名

4:上传

docker push 你的用户名/镜像名

5:登陆官网查看镜像信息
在首页就可以看到啦,这样你就可以向你的朋友们分享你的镜像了

6:删除hub镜像
进入镜像后在settings中可以找到delete repository选项


构建docker镜像并上传至hub
https://www.dr0n.top/posts/6a4ce58/
作者
dr0n
发布于
2021年7月5日
更新于
2024年3月21日
许可协议