1. 镜像

安装podman



1.1 Docketfile


Dockerfile要点:

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行从上到下顺序执行
  3. # 表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交!
  5. 默认的名字叫Dockerfile
指令 说明
FROM 设置镜像使用的基础镜像
MAINTAINER 设置镜像的作者信息
RUN 编译镜像时运行的脚本命令
CMD 设置容器的启动命令
LABEL 设置镜像标签
EXPOESE 设置镜像暴露的端口
ENV 设置容器的环境变量
ADD 编译镜像时复制文件到镜像中
COPY 编译镜像时复制文件到镜像中
ENTRYPOINT 设置容器的入口程序
VOLUME 设置容器的挂载卷
USER 设置运行RUN CMD ENTRYPOIT的用户名
WORKDIR 设置RUN CMD ENTRYPOIT COPY ADD指令的工作目录
ARG 设置编译镜像时加入的参数
ONBUILD 设置镜像的ONBUILD指令
STOPSIGNAL 设置容器的退出信号量


例: 创建CentOS7镜像的Dockerfile文件

$ vi centos7.docketfile 

FROM centos:7
MAINTAINER Wii wfeii@163.com
 
# 更新
RUN yum makecache fast && yum -y update
 
# 安装常用软件
RUN yum install -y openssh-server vim tar wget curl rsync bzip2 iptables tcpdump less telnet net-tools lsof

# 初始化ssh登陆
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
RUN echo "RSAAuthentication yes" >> /etc/ssh/sshd_config
RUN echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config

RUN yum clean all

# 启动sshd服务并且暴露22端口
RUN mkdir /var/run/sshd
EXPOSE 22



1.2 常用命令

命令 说明
podman attach 附加到正在运行的容器  
podman commit 从更改的容器创建新镜像  
podman build 使用 Dockerfile 说明构建镜像 podman build -t centos7test2 -f ./centos7.docketfile .
podman create 创建一个容器,但不启动它  
podman diff 检查容器文件系统的更改  
podman exec 在正在运行的容器中运行进程 podman exec 66517860c2ef ifconfig
podman export 将容器的文件系统内容导出为 tar 归档  
podman help, h 显示某个命令的命令或帮助列表  
podman history 显示指定镜像的历史记录  
podman images 列出本地存储中的镜像 podman images
podman import 导入 tarball 创建文件系统映像  
podman info 显示系统信息  
podman inspect <CONTAINER ID> 显示容器或镜像的配置 podman inspect 66517860c2ef
podman kill 向运行的一个或多个容器发送特定信号  
podman load 从存档加载镜像  
podman login 登录到容器 registry  
podman logout 从容器 registry 中登出  
podman logs 获取容器日志  
podman mount 挂载可运行的容器根文件系统  
podman pause 暂停一个或多个容器中的所有进程  
podman ps 列出容器 podman ps -a #查看所有容器,包括 pause 容器
podman port 列出容器的端口映射或特定映射  
podman pull 从 registry 中拉取镜像  
podman push 将镜像推送到指定的目的地  
podman restart 重启一个或多个容器  
podman rm <CONTAINER ID> 从主机中删除一个或多个容器。如果要运行,添加 -f。 podman rm 66517860c2ef
podman rmi <IMAGE ID> 从本地存储中移除一个或多个镜像,有子镜像依赖和有容器引用的镜像不能删除 podman rmi 26bdb835d02f
podman run 在新容器中运行命令 podman run -ti centos7test
podman save 将镜像保存到存档中  
podman search 在 registry 中搜索镜像  
podman start 启动一个或多个容器  
podman stats 为一个或多个容器显示 CPU、内存、网络 I/O、块 I/O 和 PID 百分比  
podman stop 停止一个或多个容器  
podman tag 为本地镜像添加额外名称  
podman top 显示容器的运行进程  
podman umount, unmount 卸载正常工作容器的根文件系统  
podman unpause 取消暂停一个或多个容器中的流程  
podman version 显示 podman 版本信息  
podman wait 在一个或多个容器上阻止  
$ podman images
REPOSITORY             TAG     IMAGE ID      CREATED         SIZE
localhost/centos7test  latest  26bdb835d02f  21 minutes ago  523 MB
quay.io/centos/centos  7       8652b9f0cb4c  5 months ago    212 MB

$ podman ps -a
CONTAINER ID  IMAGE                         COMMAND  CREATED        STATUS            PORTS   NAMES
66517860c2ef  localhost/centos7test:latest  top      2 minutes ago  Up 2 minutes ago          angry_volhardn

$ podman inspect 66517860c2ef
[
    {
        "Id": "66517860c2ef9e8a3d6c43f13ae2685fe24fc269d6ebb273ba13c5369eee7822",
        "Created": "2021-04-13T15:54:24.92642625+08:00",
        "Path": "top",
        "Args": [
            "top"
        ],
        "State": {
            "OciVersion": "1.0.2-dev",
            "Status": "running",
            "Running": true,
            "Paused": false,

$ podman exec 66517860c2ef ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tap0: flags=67<UP,BROADCAST,RUNNING>  mtu 65520
        inet 10.0.2.100  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::909d:eeff:feb1:d47d  prefixlen 64  scopeid 0x20<link>
        ether 92:9d:ee:b1:d4:7d  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 656 (656.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

1.3 Pod 容器组

# 拉取k8s.gcr.io中pause应用组件,它是一个后台运行的容器,用来保持容器组状态。
$ podman pull mirrorgcrio/pause:3.2 && podman tag docker.io/mirrorgcrio/pause:3.2 k8s.gcr.io/pause:3.2
✔ docker.io/mirrorgcrio/pause:3.2
Trying to pull docker.io/mirrorgcrio/pause:3.2...
Getting image source signatures
Copying blob c74f8866df09 done  
Copying config 80d28bedfe done  
Writing manifest to image destination
Storing signatures
80d28bedfe5dec59da9ebf8e6260224ac9008ab5c11dbbe16ee3ba3e4439ac2c

# 创建一个pod 
$ podman pod create --name helloworld
4b19b2d950fc3207652d2766f424da1e70833f8ca9c9270686f0eb5e0545d69b

# 查看pod列表
$ podman pod ls
POD ID        NAME        STATUS   CREATED        INFRA ID      # OF CONTAINERS
4b19b2d950fc  helloworld  Created  7 seconds ago  8f7bf0cd6205  1

# 查看默认pod中的容器
$ podman container ls -a
CONTAINER ID  IMAGE                            COMMAND  CREATED         STATUS   PORTS   NAMES
8f7bf0cd6205  docker.io/mirrorgcrio/pause:3.2           34 seconds ago  Created          4b19b2d950fc-infra

# 在pod下运行一个容器
$ podman run --pod helloworld centos7test

# 查看容器
$ podman ps -ap
CONTAINER ID  IMAGE                            COMMAND    CREATED             STATUS                     PORTS   NAMES               POD ID        PODNAME
8f7bf0cd6205  docker.io/mirrorgcrio/pause:3.2             6 minutes ago       Up 58 seconds ago                  4b19b2d950fc-infra  4b19b2d950fc  helloworld
3e9bfcfe317b  localhost/centos7test:latest     /bin/bash  About a minute ago  Exited (0) 56 seconds ago          vigilant_leavitt    4b19b2d950fc  helloworld

$ podman pod top -l
USER   PID   PPID   %CPU    ELAPSED          TTY   TIME   COMMAND
0      1     0      0.000   7m13.32901458s   ?     0s     /pause

$ podman pod start --all
4b19b2d950fc3207652d2766f424da1e70833f8ca9c9270686f0eb5e0545d69b

$ podman container ls -a
CONTAINER ID  IMAGE                            COMMAND    CREATED         STATUS                    PORTS   NAMES
8f7bf0cd6205  docker.io/mirrorgcrio/pause:3.2             19 minutes ago  Up 2 seconds ago                  4b19b2d950fc-infra
3b98c215bb49  localhost/centos7test:latest     /bin/bash  8 minutes ago   Exited (0) 2 seconds ago          sad_agnesi

$ podman pod stop --all
4b19b2d950fc3207652d2766f424da1e70833f8ca9c9270686f0eb5e0545d69b

$ podman container ls -a
CONTAINER ID  IMAGE                            COMMAND    CREATED         STATUS                     PORTS   NAMES
8f7bf0cd6205  docker.io/mirrorgcrio/pause:3.2             19 minutes ago  Exited (0) 2 seconds ago           4b19b2d950fc-infra
3b98c215bb49  localhost/centos7test:latest     /bin/bash  8 minutes ago   Exited (0) 16 seconds ago          sad_agnesil

1.4 磁盘与网络配置

podman run -p <本地端口>:<镜像中端口> --rm --mount type=bind,source=<本地路径>,target=<映射路径> --name <容器名称> -ti <镜像名称> <cmd>
  • --rm 容器在退出时,自动清除挂在的卷,以便清除数据。




2. 镜像源

官方关于镜像源配置的说明