podman镜像
1. 镜像
1.1 Docketfile
Dockerfile要点:
- 每个保留关键字(指令)都必须是大写字母
- 执行从上到下顺序执行
- # 表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交!
- 默认的名字叫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
容器在退出时,自动清除挂在的卷,以便清除数据。