赞
踩
Docker官方维护镜像的公共仓库网站 Docker Hub 国内无法访问了,大部分镜像无法下载,准备逐步构建自己的镜像库。【转载aliyun官方-容器镜像服务 ACR】Docker常见问题
阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)是面向容器镜像、Helm Chart等符合OCI标准的云原生制品安全托管及高效分发平台。ACR企业版支持全球同步加速、大规模和大镜像分发加速、多代码源构建加速等全链路加速能力,与容器服务ACK无缝集成,帮助企业降低交付复杂度,打造云原生应用一站式解决方案。
Java SE Development Kit 11.0.19
需要Oracle账号登录后才能下载。
这里放一个其他博主公开的Oracle公共账号和密码
建议:dockerfile文件和jdk包放在同一个文件夹下,这样不用build时用-f参数指定dockerfile的位置。
这里文件夹的名称写成了mydockfile,应该是mydockerfile,后续已经重命名改正:
前提:安装配置好docker,可参考我这篇 基于CentOS7安装配置docker与docker-compose。
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 dockerfile 文件,通过 docker build 命令来构建一个镜像。
注意:dockerfile文件要写上Linux的系统版本,我这里使用的是CentOS的系统,查询linux系统版本可参考我这篇
查看CentOS版本及系统位数与设置CentOS 7.9 2009 防火墙配置放开端口的命令与过程
dockerfile文件内容:
# 建立一个新的镜像文件,配置模板:新建立的镜像是以centos为基础模板 # 因为jdk必须运行在操作系统之上 #每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。 #第一条FROM,指定使用哪个镜像源 FROM centos:7.9.2009 #维护者 作者 邮箱 MAINTAINER djcking <djc**4*****@qq.com> #RUN 指令告诉docker 在镜像内执行命令,安装了什么 #创建一个新目录来存储jdk文件 RUN mkdir "/usr/local/java" #将jdk压缩文件复制到镜像中,它将自动解压缩tar文件 ADD jdk-11.0.19_linux-x64_bin.tar.gz /usr/local/java # 设置时区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 设置环境变量 ENV JAVA_HOME /usr/local/java/jdk-11.0.19 ENV PATH $JAVA_HOME/bin:$PATH # VOLUME 指定了临时文件目录为/tmp # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp
上传dockerfile文件:
建议:dockerfile文件和jdk包放在同一个文件夹下,这样不用build时用-f参数指定dockerfile的位置。
dockerfile文件、镜像-IMAGE,容器-CONTAINER三者的关系(个人学习理解):
1、docker build命令使用dockerfile文件中的配置来构建镜像-IMAGE;
2、docker run命令运行构建好的镜像-IMAGE来启动容器-CONTAINER;
3、镜像-IMAGE是死的,因为它本质上就是为了生成容器而存在的,容器-CONTAINER是活的,因为最终运行服务时使用的是容器-CONTAINER。
构建镜像命令-docker build:
参数说明:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
//进入存放jdk包与dockerfile的目录mydockerfile
cd mydockerfile
//-t 给新构建的镜像取名为java, 并设定版本为11
//注意最后有个点,代表使用当前路径的 Dockerfile 进行构建
//成功执行下面的docker build命令后,docker images 命令中,TAG就是11(镜像标签或者版本),Repository就是java,为镜像仓库源名。
docker build -t java:11 .
通过上图使用docker images命令 查看创建的jdk镜像已经在列表中存在,IMAGE ID也成功生成了。
docker images 各参数说明:
REPOSITORY:表示镜像的仓库源名
TAG:镜像的标签或版本
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一镜像仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 jdk仓库源里,有 11、12、13....20 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义并区分不同的镜像,例如jdk:11,jdk:12,jdk:13,jdk:20等。
//运行该镜像
//此命令使用镜像java:11,创建并启动容器,执行成功会根据算法返回一个字符串,是CONTAINER ID,即辨别容器的ID。
// --name djcjdk11 代表一个别名。
docker run -id --name djcjdk11 java:11
//docker run 参数说明:
-i:交互式操作
-d:后台运行
-t:终端。
docker ps命令查看正运行的容器(默认只显示CONTAINER ID的前12位,完整的容器ID有64位,但已经足以区分不同的容器):
因为我们创建的 djcjdk11容器是的本源包是 jdk-11.0.19_linux-x64_bin.tar.gz,所以校验即检查JDK的版本。
//docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。 //可以使用NAMES即djcjdk11或者CONTAINER ID的前四位或完整的CONTAINER ID //以下6个命令任意一个皆可 docker exec -it NAMES bash docker exec -it CONTAINER ID bash docker exec -it CONTAINER ID前几位 bash 即 docker exec -it djcjdk11 bash docker exec -it 4001866f057c bash docker exec -it CONTAINER ID前几位 bash ,如 docker exec -it 4001 bash 或者 docker exec -it NAMES /bin/bash docker exec -it CONTAINER ID /bin/bash docker exec -it CONTAINER ID前几位 /bin/bash 即 docker exec -it djcjdk11 /bin/bash docker exec -it 4001866f057c /bin/bash docker exec -it CONTAINER ID前几位 /bin/bash,如 docker exec -it 4001 /bin/bash //检测Java版本 java --version 或java -version java --version 或java -version
//1-进入文件夹 cd /home/mydockerfile //2-构建镜像命令 //-t 给新构建的镜像仓库源取名为java, 并设定版本或者标签为为11 即TAG docker build -t java:11 . //3-查看images docker images //4-启动运行镜像 //此命令使用镜像java:11,创建并启动容器,执行成功会根据算法返回一个字符串,是CONTAINER ID,即辨别容器的ID。 docker run -id --name djcjdk11 java:11 //5-查看正在运行的容器 docker ps //6-进入容器 //docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。 docker exec -it djcjdk11 bash 或 docker exec -it 4001 /bin/bash //7-检测Java版本 java --version 或java -version java --version 或java -version --------其他命令--------- //关闭容器 //这里使用CONTAINER ID的前四位 docker stop 4001 //docker logs CONTAINER ID或者NAMES 可以查看容器内部的标准输出。 //-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。 //补充:tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。 //tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。 docker logs 4001或者 docker logs djcjdk11 docker logs -f 4001或者docker logs -f djcjdk11
镜像和容器更多操作可以参考我这两篇文章:
Docker基本操作之删除容器Container和删除镜像IMAGE
Docker容器基本操作之启动-停止-重启
Docker 镜像使用
Docker 容器使用
Docker Dockerfile
Docker Compose
Docker 仓库管理
Linux tail 命令
查看CentOS版本及系统位数与设置CentOS 7.9 2009 防火墙配置放开端口的命令与过程
实战:用dockerfile创建镜像实现springboot项目容器化
实战:用docker-compose容器化springboot项目
【Docker】手动构建 OracleJDK11 镜像
【SpringBoot + Docker】编写Dockerfile安装jdk11.0.3,并部署SpringBoot项目
Docker - 安装openjdk11并启动运行
Docker之dockerfile制作jdk镜像
docker 文件编写,和jdk11运行java的Dockerfile文件
Linux rm命令 删除文件夹
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。