Podman
- Podman 是 Red Hat 在2018年推出的,源代码开放
- 是一个基于 Linux 系统的 daemon-less 的容器引擎;可以运行在root或者非root用户模式
- 最近总听到这个要代替docker什么的,可以参考
- 和docker的区别:
- 最主要的区别是podman是
Daemonless
的,而Docker在执行任务的时候,必须依赖于后台的docker daemon - podman不需要使用root用户或者root权限,所以更安全。
- podman可以创建
pod
,pod的概念和 Kubernetes 里定义的pod类似 - podman运行把镜像和容器存储在不同的地方,但是docker必须存储在docker engineer所在的本地
- podman是传统的 fork-exec 模式,而docker是 client-server 架构(daemon就是server,docker命令就是client)
- 最主要的区别是podman是
- 可以多了解一下docker的daemon,类似与kernel通信的工具,是操作容器必不可少的
- 我们知道容器技术就是隔离应用程序的运行时环境,但容器之间可以共享同一个操作系统
- 可以了解一下隔离技术,是一个比较复杂的话题
- docker架构
- podman架构
- 官网
安装&基操
- 安装:
sudo yum -y install podman
,最新版到4.0了,centos7默认1.6.4 - 可能需要开启user_namespace
sudo vim /etc/sysctl.conf user.max_user_namespaces=10000 reboot
- 使用上和docker极为类似
podman search nginx podman pull docker.io/library/nginx podman run -it --name nginx-d docker.io/library/nginx podman container ls podman ps -a
- 从操作上可以看出podman和docker的不同
- docker的daemon;而且非root用户必须加入docker组才能操作
- 添加个新用户:
# useradd -r doc-pod
,修改密码:# passwd doc-pod
- 可以尝试一下,podman用户之间的镜像容器是完全隔离的,而docker在哪个用户都能看见
- 在centos7下有些问题
- docker的daemon;而且非root用户必须加入docker组才能操作
pod
- 基本操作
# 创建pod podman pod create --name test podman ps -a --pod # 在pod中创建container podman container run -d --name testd --pod test docker.io/library/busybox ping 8.8.8.8 # 在一个pod中的容器具有相同的ip地址
- documentation,虽然是英文的,但是可以看看
- 虽然底层技术有所不同,但操作和docker很相似,即使k8s更换了container runtime也能快速入手(其实对直接使用k8s的开发者没什么影响)
多架构
- docker支持多架构,这个架构是指机器的硬件设计,常见的有ARM和x86(Intel、AMD)
- inspect镜像也能看到其Architecture,一般官网的镜像都有针对不同机器架构的版本
- 如何在单一架构机器下build出可以适应不同架构的镜像?使用
buildx
,Linux下需要自行安装# 安装,参考 https://github.com/docker/buildx#linux-packages wget https://github.com/docker/buildx/releases/download/v0.8.1/buildx-v0.8.1.linux-amd64 # copy it to the destination folder $HOME/.docker/cli-plugins # Or copy it into one of these folders for installing it system-wide. /usr/local/lib/docker/cli-plugins OR /usr/local/libexec/docker/cli-plugins # 可能需要开执行权限 chmod +x ~/.docker/cli-plugins/docker-buildx # 可以设置成default builder,应该就是软链过去
- 还可以直接在Dockerfile中引入buildx工具,直接构建多架构镜像:
docker image build
即可
FROM docker COPY --from=docker/buildx-bin /buildx /usr/libexec/docker/cli-plugins/docker-buildx RUN docker buildx version
- 还可以直接在Dockerfile中引入buildx工具,直接构建多架构镜像:
- 使用buildx
docker login docker buildx create --name mybuilder --use docker buildx ls # 使用自己的buildx # build完会自动推到远程 docker buildx build --push --platform linux/arm/v7,linux/arm64/v8,linux/amd64 -t roykun/flask-redis:latest .
CI/CD
- 我们编镜像的代码推到GitHub或者其他仓库,然后再dockerhub关联一下,当代码发生变化,可以根据设置自动触发build
- 上面只是自动化的一小部分,从代码提交、设置环境、运行命令到产生报告一系列的行为都可定义;这方面的工具很多,比如Jenkins;这里介绍用的也比较多的GitHub Actions
- 可以直接从官网学习;这里有个Hello World教程。最重要的就是理解workflow和jobs
- 一般包括拉取镜像、配置环境、验证代码、推到仓库、产生报告一套步骤;官网的文档写的很好值得看
- 后面实践项目时在看
- 同样,支持配置buildx
容器安全
- 代码、基础镜像、镜像、容器、host都可能有安全隐患
- docker可以配置安全扫描,代码下载到本地
- 启动了你的docker容器后,可以执行上面的代码:
sudo ./docker-bench-security.sh
,会给出一些log和score - 也可以使用synk扫描GitHub/Bitbucket的代码,或者下载trivy
监控
- 可以在容器运行时进行监控,例如使用sysdig
- 没有软件是无漏洞的,视情况而定,如果这个漏洞的部分你没使用到就可以