• 3.3-DIY一个Base Image


            如果执行docker命令提示下面的权限错误

            需要在命令前加上sudo,例如:sudo docker image ls

            但是每次都加sudo有些麻烦,有没有办法其他更简便的方法?

            我们要去掉sudo就是让当前用户有执行docker命令的权限。

    • 第一步需要执行

    sudo groupadd docker

    • 第二步不要将当前用户添加到docker这个group里面,我这里是把root添加到docker的group里面,权限的报错可能不是root用户,这块需要根据情况修改用户。

    sudo gpasswd -a root docker

    • 第三步需要重启docker进程

    sudo service docker restart

    • 最后,退出shell窗口,重新登录Linux主机。

    现在开始创建一个Image

    • 创建一个hello-world的文件夹

    mkdir hello-world

    • 进入到hello-world文件夹里面

    cd hello-world

    • 创建Hello.java的java语言文件
    public class Hello {
      public static void main(String[] args) {
        System.out.println("Hello Docker!");
      }
    }

            然后编译Hello.java这个java语言文件,

    注意:编译前需要安装jdk,这里我安装的是jdk21。

    Centos Stream9安装jdk21的过程如下:

    1、jdk21下载地址:Java Downloads | Oracle

    注意:要下载箭头标注这个,不要下载错了。

    2、下载之后会得到一个jdk-21_linux-x64_bin.tar.gz压缩文件,将这个压缩文件上传到你的Centos stream9服务器上面。这里我上传到了/home/0-software/0-jdk21/路径下,这个路径可以自己定义。

    然后执行解压命令:

    cd /home/0-software/0-jdk21/

    tar -zxvf jdk-21_linux-x64_bin.tar.gz

    然后配置java21的环境变量

    vim /etc/profile

    在最下面加上下面这些:

    JAVA_HOME=/home/0-software/0-jdk21/jdk-21.0.1/
    CLASSPATH=.:$JAVA_HOME/lib.tools.jar
    PATH=$JAVA_HOME/bin:$PATH
    export JAVA_HOME CLASSPATH PATH

    再运行:

    source /etc/profile

    最后,执行下面的命令看看有没有配置成功。

    java -version

    环境变量配置完成之后,可以通过下面的命令编译Hello.java文件为Hello.class文件

    javac Hello.java

      创建Dockerfile文件: - 使用文本编辑器创建一个名为Dockerfile的文件,并将以下内容复制粘贴到文件中:

    FROM openjdk:21-jdk

    COPY Hello.class /app/Hello.class

    WORKDIR /app

    CMD ["java", "Hello"]

            以下是对Dockerfile中这些内容的详细解释:

    1. FROM openjdk:21-jdk: - 这行指令指定了基础镜像,即构建新镜像所依赖的镜像。在这里,我们使用了openjdk:21-jdk作为基础镜像,它是一个包含JDK 21的OpenJDK镜像。

    2. COPY Hello.class /app/Hello.class: - 这行指令将本地文件系统中的Hello.class文件复制到镜像中的/app/Hello.class路径。它指定了源文件的路径(相对于Dockerfile所在目录)和目标路径(镜像中的路径)。

    3. WORKDIR /app: - 这行指令设置了工作目录为/app。工作目录是在容器中运行命令时的默认目录,这里我们将其设置为/app。

    4. CMD ["java", "Hello"]: - 这行指令定义了容器启动后要执行的默认命令。在这里,我们使用CMD指令来运行Java程序,具体是运行Hello类的main方法。它使用了JSON数组的形式,将要执行的命令和参数传递给CMD指令。

            通过这些Dockerfile的内容,我们定义了镜像的构建过程和容器的启动配置。首先,我们选择了一个基础镜像,然后将Hello.class文件复制到镜像中的指定路径。接下来,我们设置了工作目录,并指定了容器启动后要执行的默认命令。这样,当我们基于这个Dockerfile构建镜像并运行容器时,它将自动执行Java程序并输出"Hello Docker!"。

         构建Docker镜像:

    使用以下命令构建Docker镜像(注意末尾的点符号)

    docker build -t lvdapiaoliang/hello-docker .

    https://hub.docker.com/

            lvdapiaoliang这个是docker的用户名,在https://hub.docker.com/的Account Settings里面看。最后有个点,表示从当前目录找Dockerfile文件。

            执行完docker build -t lvdapiaoliang/hello-docker .之后,运行下面的命令可以查看制作的image:

    docker image ls

    运行Docker容器:

    使用以下命令运行刚刚构建的Docker镜像:

    docker run lvdapiaoliang/hello-docker

  • 相关阅读:
    迅为iMX6ULL开发板NXP嵌入式ARM核心板Linux系统i.MX6ULL超STM32
    【OpenHarmony】系统应用权限管控与签名
    JDK8新特性 - Lambda表达式
    [LeetCode周赛复盘] 第 321 场周赛20221127
    WP光电信息学院2023年网络安全季度挑战赛-测试赛
    ME60单板加载故障维护经验
    新兴国家战略级安全话题-软件供应链安全
    springboot项目打包成可执行jar
    PowerDesigner中的反向工程,把PDM的注释转到NAME中
    均薪36W还缺人,DFT工程师到底有多重要?
  • 原文地址:https://blog.csdn.net/Xx13624558575/article/details/134264555