podman 创建镜像
一、dockerfile 语法
FROM:指定基础镜像。构建过程从此镜像开始。例如:
FROM ubuntu:18.04这将使用Ubuntu 18.04版本的镜像作为构建过程的基础。
LABEL:添加元数据到镜像,这些元数据可以包含作者、版本等信息。例如:
LABEL maintainer="John Doe <john.doe@example.com>"这将添加一个标签,其中包含维护者的信息。
RUN:在构建过程中执行命令。这些命令会在镜像的上下文中执行,并创建新的镜像层。例如:
RUN apt-get update && apt-get install -y \ build-essential \ wget \ python3这将使用apt-get update和apt-get install命令安装一些软件包。
CMD:指定容器启动时默认执行的命令。这些命令会被加入到容器启动时的命令中。例如:
CMD ["python3", "./app.py"]这将使容器在启动时执行python3 ./app.py命令。
ENTRYPOINT:指定容器启动时执行的命令。这些命令会替换掉用户指定的命令。例如:
ENTRYPOINT ["python3", "./app.py"]这将使容器在启动时执行python3 ./app.py命令,即使用户指定其他命令,这个命令也会被替换掉。
EXPOSE:声明容器监听的端口。这些端口会在启动容器时自动映射到宿主机的端口。例如:
EXPOSE 8080这将使容器在启动时监听端口8080。
VOLUME:指定容器内的目录作为卷,用于持久化数据。例如:
VOLUME ["/data"]这将使容器内的/data目录作为卷,用于持久化数据。
ENV:设置环境变量。这些环境变量可以在构建过程中使用,也可以在容器运行时使用。例如:
ENV NAME World这将设置一个名为NAME的环境变量,其值为World。
USER:指定构建过程中使用的用户。例如:
USER root这将使用root用户进行构建。
WORKDIR:指定构建过程中的工作目录。例如:
WORKDIR /app这将设置工作目录为`/app`。11. COPY:将文件或目录从宿主机复制到镜像中。例如:
COPY . /app这将复制当前目录下的所有内容到镜像中的`/app`目录。12. ADD:与COPY类似,但它可以自动解压压缩文件。例如:
ADD ./path/to/source.tar.gz /app/path/to/destination/这将自动解压`./path/to/source.tar.gz`文件到`/app/path/to/destination/`目录。13. ONBUILD:指定当构建一个以当前镜像为基础的镜像时应该执行的命令。例如:
ONBUILD ADD . /app这将添加当前目录下的所有内容到以当前镜像为基础的镜像中的`/app`目录。14. STOPSIGNAL:指定在容器停止时发送的信号。例如:
STOPSIGNAL S以下是一个简单的Dockerfile示例:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \ build-essential \ wget \ python3
WORKDIR /app
COPY . /app
RUN pip3 install -r requirements.txt
CMD ["python3", "./app.py"]这个Dockerfile构建了一个基于Ubuntu 18.04的基础镜像,安装了构建必需的软件包,复制了应用程序代码,并安装了Python依赖。最后,它指定了容器启动时应该执行的命令。
二、podman的语法
Podman 是一个开源的容器引擎,用于构建、运行和连接容器。以下是一些基础的 Podman 命令:
`podman system migrate` # repair the podman`sudo systemctl restart podman`构建镜像
podman build -t myimage .这将使用当前目录中的 Dockerfile 构建一个名为 myimage 的镜像。
运行容器
podman run -it --rm myimage /bin/bash --name xx
podman run --name lglsoft -it --rm --env=DISPLAY=180.201.179.79:0.0 susoft:latest /bin/bash
podman run -it --device=/dev/dri:/dev/dri --volume=/tmp/.X11-unix:/tmp/.X11-unix:rw --volume=/etc/localtime:/etc/localtime:ro --env=DISPLAY=$DISPLAY dockerfile-su /bin/bash这将使用名为 myimage 的镜像创建并运行一个交互式的容器。
列出容器
podman ps这将列出当前正在运行的容器。
列出镜像
podman images这将列出所有可用的镜像。
删除容器
podman rm mycontainer这将删除名为 mycontainer 的容器。
删除镜像
podman rmi myimagepodman rmi <image_id>这将删除名为 myimage 的镜像。
列出网络
podman network list这将列出所有已创建的网络。
删除网络
podman network rm mynetwork这将删除名为 mynetwork 的网络。
导出容器
podman export mycontainer > mycontainer.tar这将导出名为 mycontainer 的容器为 tar 文件。
导入镜像
podman import myimage.tar myimage这将导入名为 myimage.tar 的 tar 文件为镜像。
导出镜像
podman save myimage > myimage.tar这将导出名为 myimage 的镜像为 tar 文件。
导入容器
podman import mycontainer.tar mycontainer这将导入名为 mycontainer.tar 的 tar 文件为容器。
这些是一些基础的 Podman 命令,根据您的具体需求,可能还需要使用其他命令。Podman 的命令行选项和功能可能会随着版本更新而变化,因此建议查阅最新的 Podman 文档以获取最准确的信息
########################################################################## This Dockerfile builds a base image to run Seismic UNIX on generic CPU# architectures using GCC compilers and OpenMPI.# WRITER: Guolong Li (1712343961@qq.com)# TIME: 06.18.2024#########################################################################
# Base imageFROM ubuntu:22.04 as base
# Verb=NOENV DEBIAN_FRONTEND noninteractiveLABEL maintainer="Guolong Li <1712343961@qq.com>"
# change the aliyun source to download softwareRUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.listCMD ["/bin/bash"]EXPOSE 8888
# cp Seismic Unix (unziped 44R28 and well configured)RUN mkdir -p /Software/Seismic_UnixADD ./seismic_unix.tar.gz /Software/Seismic_Unix/ENV CWPROOT=/Software/Seismic_UnixENV PATH=$PATH:/Software/Seismic_Unix/bin
# Install basic packageRUN apt-get update && \ apt-get install -y build-essential mpich\ git xorg gcc libx11-dev libxt-dev libxext-dev make libmotif-dev libtirpc-dev gfortran libglu1-mesa-dev freeglut3-dev \ libxmu-dev libxmu-headers libxi-dev libglu1-mesa-dev freeglut3-dev libxmu-dev libxmu-headers libxi-dev
# set the Basic varARG nproc="10"
# Install Seismic Unix (only support one thread)RUN cd /Software/Seismic_Unix/src/ && ls && make installRUN cd /Software/Seismic_Unix/src/ && make xtinstallRUN cd /Software/Seismic_Unix/src/ && make finstall
# Install MinicondaRUN mkdir -p /Software/Miniconda
# # Instal the OpenMPI# ARG OMPI_BRANCH="v4.1.4"# RUN mkdir -p /deps && mkdir -p /opt/openmpi && cd /deps && \# git clone --depth 1 --recursive --branch ${OMPI_BRANCH} https://github.com/open-mpi/ompi.git openmpi && \# cd openmpi && ./autogen.pl && \# mkdir build && cd build && \# ../configure --prefix=/opt/openmpi/ \# --enable-mca-no-build=btl-uct --enable-mpi1-compatibility && \# make -j ${nproc} && \# make install && \# rm -rf /deps/openmpi
# # Set OpenMPI path# ENV PATH=${PATH}:/opt/openmpi/bin# ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/openmpi/lib