如果执行docker命令提示下面的权限错误:
需要在命令前加上sudo,例如:sudo docker image ls
但是每次都加sudo有些麻烦,有没有办法其他更简便的方法?
我们要去掉sudo就是让当前用户有执行docker命令的权限。
sudo groupadd docker
sudo gpasswd -a root docker
sudo service docker restart
现在开始创建一个Image
mkdir hello-world
cd hello-world
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 .
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