Video Reference:容器技术-Podman
本章内容
- 容器技术介绍
- 安装 Docker
- 安装和使用 podman
1 Docker 介绍和基础操作
各大公司的容器使用情况
阿里巴巴: https://www.infoq.cn/article/2015/07/paas-tae-docker/
腾讯: https://www.infoq.cn/article/tencent-millions-scale-docker-application-practice/
美团: https://tech.meituan.com/2018/11/15/docker-architecture-and-evolution-practice.html
京东: http://www.infoq.com/cn/news/2015/06/jd-618-docker
新浪微博: https://www.infoq.cn/article/large-scale-docker-cluster-practise-experience-share/
Container容器是一种工具,指的是可以装下其它物品的工具,以方便人类归纳放置物品、存储和异地运输,比如人类使用的衣柜、行李箱、背包等可以成为容器,Container除了容器以外,另一个意思是集装箱。提到集装箱的时候,你的脑海里第一反应是不是大船停靠在岸边,然后好多整齐划一的箱子可以运来运去。
为什么这些集装箱可以很方便的运来运去呢?因为它们大小一致标准化尺寸的箱子,所以当我们使用Container来形容容器的时候,就是我们想要让容器达到一个可以打包,符合标准的状态。
但今天我们所说的容器是一种IT技术。容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用装起来。这样,应用与应用之间就有了边界而不会相互干扰;同时装在沙盒里面的应用,也可以很方便的被搬来搬去,这也是PaaS想要的最理想的状态。
容器是软件工业上的集装箱的技术,集装箱的标准化,减少了包装成本,大大提高货物运输和装卸效率,是传统运输行业的重大变革。早期的软件项目中软件更新,发布低效,开发测试发布周期很长,很难敏捷。有了容器技术,就可以利用其标准化的特点,大幅提高生产效率。
容器技术是虚拟化、云计算、大数据之后的一门新兴的并且是炙手可热的新技术,容器技术提高了硬件资源利用率、方便了企业的业务快速横向扩容(可以达到秒级快速扩容)、实现了业务宕机自愈功能(配合K8S可以实现,但OpenStack无此功能),因此未来数年会是一个容器愈发流行的时代,这是一个对于IT行业来说非常有影响和价值的技术,而对于IT行业的从业者来说,熟练掌握容器技术无疑是一个很有前景的行业工作机会。 :::color1 传统的业务开发与运维之间的开发环境和部署环境无法做到有效的统一。 目前处于DevOps的时代,软件更新迭代极快。开发会不断的迭代应用,运维部署在生产环境会出现很多问题。这就是开发环境和生产环境不统一。 解决方法:容器Container技术。开发人员开发的代码,运行环境(应用程序,配置,数据)打包成一个镜像,用于部署容器。 :::![🐳[Podman] 容器技术-Podman - 图4](/uploads/projects/seekerzw@yaaygq/f93e7f633d0feefa96c44f9014d1cdbb.png)
LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求
Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。
8、Warden
在最初阶段,Warden使用LXC作为容器运行时。如今已被CloudFoundy取代。
9、LMMCTFY
LMCTY是Let me contain that for you的缩写。它是Google的容器技术栈的开源版本。
Google的工程师一直在与docker的libertainer团队合作,并将libertainer的核心概念进行抽象并移植到此项目中。该预目的进展不明,估计会被libcontainer取代。
10、Docker
Docker是一个可以将应用程序及其依赖打包到几乎可以在任何服务器上运行的容器的工具。
11、RKT
RKT是Rocket的缩写,它是一个专注于安全和开放标准的应用程序容器引擎。
正如我们所看到的,Docker并不是第一个容器化技术,但它的确是最知名的一个。
1.1.2 Docker是什么
:::color1 Docker 是开源的管理容器的工具
:::
Docker (码头工人)是一个开源项目,诞生于2013年初,最初是dotCloud公司(后由于Docker开源后大受欢迎就将公司改名为Docker Inc,总部位于美国加州的旧金山)内部的一个开源的PAAS服务(Platform as a Service )的业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会,遵从了Apache 2.0协议,项目代码在GitHub 上进行维护。
Docker是基于linux内核实现,Docker最早采用LXC技术,LXC是Linux原生支持的容器技术,可以提供轻量级的虚拟化,可以说docker就是基于LXC发展起来的,提供LXC的高级封装,标准的配置方法,在LXC的基础之上,docker提供了一系列更强大的功能。而虚拟化技术 KVM(KernelKernel-based Virtual Machine Machine)基于模块实现,后来Docker改为自己研发并开源的runc技术运行容器,彻底抛弃了LXC。
Docker相比虚拟机的交付速度更快,资源消耗更低,Docker采用客户端/服务端架构,使用远程API来管理和创建容器,其可以轻松的创建一个轻量级的、可移植的、自给自足的容器,docker的三大理念是build(构建)、ship(运输)、run(运行),Docker遵从apache 2.0协议,并通过(namespace及cgroup等)来提供容器的资源隔离与安全保障等,所以Docke容器在运行时不需要类似虚拟机(空运行的虚拟机占用物理机6-8%性能)的额外资源开销,因此可以大幅提高资源利用率,总而言之Docker是一种用了新颖方式实现的轻量级虚拟机.类似于VM但是在原理和应用上和VM的差别还是很大的,并且docker的专业叫法是应用容器(Application Container)。
Docker 的主要目标Build, Ship and Run Any App, Anywhere,即通过对应用组件的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行((Runtime)等生命周期的管理,达到应用组件级别的”一次封装,到处运行“。这里的应用组件,既可以是一个Web应用,也可以是一套数据库服务,甚至是一个操作系统。将应用运行在Docker容器上,可以实现跨平台,跨服务器,只需一次配置准备好相关的应用环境,即可实现到处运行,保证研发和生产环境的一致性,解决了应用和运行环境的兼容性问题,从而极大提升了部署效率,减少故障的可能性。
:::color1 镜像Image 就是静态的磁盘文件,类似于固定的软件包。
将镜像跑起来,运行在内存中 ,就形成了容器Container,类似于正在运行中的软件包。
镜像仓库Repository,分为公开仓库和私有仓库。公开仓库有DockerHub,阿里云以及其他公有云等。私有仓库有registory,harbor。
:::
docker官网:http://www.docker.com
帮助文档链接: https://docs.docker.com/docker
中文网站: http://www.docker.org.cn/
1.1.3 Docker 组成
- Docker 主机(Host):一个物理机或虚拟机,用于运行Docker服务进程和容器,也称为宿主机,node节
- Docker 服务端(Server): Docker守护进程,运行docker容器
- Docker 客户端(Client):客户端使用docker命令或其他工具调用docker API
- Docker 仓库(Registry):保存镜像的仓库,官方仓库: https://hub.docker.com,可以搭建私有仓库harbor
- Docker 镜像(Images):镜像可以理解为创建实例使用的模板
- Docker 容器(Container):容器是从镜像生成对外提供服务的一个或一组服务
Docker 客户端和服务端是使用 Socket 方式连接,主要有以下几种方式:
1)本地的 socket 文件 unix:///var/run/docker/sock (/var/run/docker.sock) (默认)
2)tcp:///host:prot(演示)
3)fd://socketfd
:::color1 Docker 默认连接方式:
未启动的状态,说明 Docker 在默认情况下使用本地的 /var/run/docker.sock 连接,默认打开端口2375。可以实现跨主机管理Docker容器。
:::
:::color1 Docker 是基于C/S架构的。有专门的服务器端和客户端。Docker 其实本身不需要为其暴露服务。因为实际使用中,Docker并不需要像传统的服务,例如HTTP,MySQL服务需要暴露服务来进行网络通信,Docker 其实本身不需要进行网络通信功能。
Podman 就打破了 Docker 的C/S架构,Podman 变成了轻量级容器管理工具。
:::
1.1.4 Docker 和虚拟机、物理主机
容器和虚拟机比较
- 资源利用率更高:一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机
- 开销更小:不需要启动单独的虚拟机OS内核占用硬件资源
- 启动速度更快:可以在数秒内完成启动
- 集成性更好:和CICD(持续集成/持续部署)相关技术结合性更好,实现自动化管理
使用虚拟机是为了更好的实现服务运行环境隔离,每个虚拟机都有独立的内核,虚拟化可以实现不同操作系统的虚拟机,但是通常一个虚拟机只运行一个服务,很明显资源利用率比较低且造成不必要的性能损耗,我们创建虚拟机的目的是为了运行应用程序,比如Nginx、PHP、Tomcat等web程序,使用虚拟机无疑带来了一些不必要的资源开销,但是容器技术则基于减少中间运行环节带来较大的性能提升。
根据实验,一个运行着CentOS的KVM虚拟机启动后,在不做优化的情况下,虚拟机自己就需要占用100~200 MB内存。此外,用户应用运行在虚拟机里面,它对宿主机操作系统的调用就不可避免地要经过虚拟化软件的拦截和处理,这本身又是一层性能损耗,尤其对计算资源、网络和磁盘I/O的损耗非常大。
1.1.5名称空间Namespace技术
一个宿主机运行了N个容器,多个容器共用一个OS,必然带来的以下问题:
- 怎么样保证每个容器都有不同的文件系统并且能互不影响?
- 一个docker主进程内的各个容器都是其子进程,那么实现同一个主进程下不同类型的子进程?各个进程间通信能相互访问(内存数据)吗?
- 每个容器怎么解决IP及端口分配的问题?
- 多个容器的主机名能一样吗?
- 每个容器都要不要有root用户?怎么解决账户重名问题?
namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个docker
容器运行在同一个docker主进程并且共用同一个佰土斗系统内核,尤目AA进程内实现运行指定服务的运行环容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指正服务的厂行邛境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,目前主要
通过以下技术实现容器运行空间的相互隔离:
NameSpace | 系统调用参数 | 隔离内容 | 内核版本 |
---|---|---|---|
UTC | CLONE_NEWUTS | 主机名和域名 | 2.6.19 |
IPC | CLONE_NEWIPC | 信号量,消息队列和共享内存(进程间通信) | 2.6.19 |
PID | CLONE_NEWPID | 进程编号 | 2.6.24 |
Network | CLONE_NEWNET | 网络设备,网络栈,端口等 | 2.6.29 |
Mount | CLONE_NEWNS | 挂载点(文件系统) | 2.4.19 |
User | CLONE_NEWUSER | 用户和用户组 | 3.6 |
1.1.6 Docker 优势
- 快速部署:短时间内可以部署成百上千个应用,更快速交付到线上
- 高效虚拟化:不需要额外hypervisor支持,基于linux内核实现应用虚拟化,相比虚拟机大幅提高性能和效率
- 节省开支:提高服务器利用率,降低IT支出
- 简化配置:将运行环境打包保存至容器,使用时直接启动即可
- 环境统一:将开发,测试,生产的应用运行环境进行标准化和统一,减少环境不一样带来的各种问题
- 快速迁移和扩展:可实现跨平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从A宿主机迁移到B宿主机,甚至是A平台迁移到B平台
1.2 Docker 安装及基础命令介绍
1.2.1 Docker安装准备
官方网址: https://www.docker.com/OS系统版本选择:
Docker目前已经支持多种操作系统的安装运行,比如Ubuntu、CentOS、Redhat、Debian、Fedora,甚至是还支持了Mac和Windows,在linux系统上需要内核版本在3.10或以上
Docker版本选择:
docker版本号之前一直是0.X版本或1.X版本,但是从2017年3月1号开始改为每个季度发布一次稳版,其版本号规则也统一变更为YY.MM,例如17.09表示是2017年9月份发布的
Docker之前没有区分版本,但是2017年推出(将docker更名为)新的项目Moby,github地址: https://github.com/moby/moby,Moby项目属于Docker项目的全新上游,Docker将是一个隶属于的Moby的子产品,而且之后的版本之后开始区分为CE (Docker Community Edition,社区版本)和EE(Docker Enterprise Edition,企业收费版),CE社区版本和EE企业版本都是每个季度发布一个新版本,但是EE版本提供后期安全维护1年,而CE版本是4个月,以下为官方原文:
https://blog.docker.com/2017/03/docker-enterprise-edition/
Docker CE and EE are released quarterly,and CE also has a monthly “Edge”option. EachDocker EE release is supported and maintained for one year and receives security andcritical bugfixes during that period. we are also improving Docker CE maintainability by maintaining each quarterly CE release for 4 months. That gets Docker CE users a new 1-month window to update from one version to the next.
1.2.1 安装Docker
1.2.1.1 Ubuntu 安装和删除Docker
Ubuntu 14.04/16.04/18.04 安装Docker
# Step1:安装必要的一些系统工具
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release apt-transport-https software-properties-common
# Step2:安装GPG证书
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step3:写入软件源信息
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# step4:更新并安装Docker-CE
apt-get update
apt-get install -y docker-ce
#安装指定版本的Docker-CE
# Step1:查找Docker-CE的版本
apt-cache madison docker-ce
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
sudo apt-get -y install docker-ce=[VERSION] docker-ce-cli=[VERSION]
删除Docker
apt purge docker-ce
rm -rf /var/lib/docker
实战案例:基于 ubuntu1804的docker-ce安装脚本
~ vim install_docker_ubuntu.sh
#!/bin/bash
#Description: Install docker on Ubuntu1804
#Version:1.0
#SHELL ENV
DOCKER_VERSION="5:19.03.5~3-0~ubuntu-bionic"
COLOR='echo -e \E[1;32m'
END='\E[0m'
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt -y update
${COLOR}"Docker有以下版本"${END}
apt-cache madison docker-ce
${COLOR}"5秒后即将安装:docker-"${DOCKER_VERSION}"版本....."${END}
${COLOR}"如果想安装其它Docker版本,请按ctrl+c键退出,修改版本再执行"${END}
apt -y install docker-ce=${DOCKER_VERSION} docker-ce-cli=${DOCKER_VERSION}
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
1.2.2.2 CentOs安装和删除Docker
官方文档: https://docs.docker.com/install/linux/docker-ce/centos/
CentOS 6 因内核太旧,即使支持安装docker,但会有各种问题,不建议安装
CentOS 7 的extras源虽然可以安装docker,但包比较旧,建议从官方源或镜像源站点下载安装docker
CentOS 8 有新技术 podman 代替docker
因此建议在Centos 7上安装docker
下载 rpm 包安装:
#extras 源中包名为docker
yum list docker
官方rpm包下载地址:
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
阿里镜像下载地址:
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/
通过 yum 源安装:由于官网的yum源太慢,下面使用阿里云的Yum源进行安装
rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -o /etc/yum. repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum install -y docker-ce
systemctl enable --now docker
删除 docker
yum remove -y docker-ce
rm -rf /var/lib/docker
范例:CentOS 7基于阿里云的安装docker方法
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's|download.docker.com|mirrors.aliyun.com/docker-ce|' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
实战案例:基于 CentOS 7的docker-ce安装脚本
cat install_docker_for_centos7.sh
#!/bin/bash
#FileName: install_docker_for_centos7.sh
COLOR="echo -e \\033[1;31m"
END="\033[m"
VERSION="19.03.5-3.el7"
wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo || { ${COLOR}"互联网连接失败,请检查网络配置!"${END};exit; }
yum clean all
yum -y install docker-ce-$VERSION docker-ce-cli-$VERSION || { ${COLOR}"Base,Extras的yum源失败,请检查yum源配置"${END};exit; }
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
docker version && ${COLOR}"Docker安装成功"${END} || ${COLOR}"Docker安装失败"${END}
1.2.2 Podman
什么是Podman?简而言之: alias docker = podman,是CentOS 8新集成的功能,未来代替docker
Podman是一个为Kubernetes 而生的开源的容器管理工具,原来是CR-O(即容器运行时接口CRI和开放容器计划OCI)项目的一部分,后来被分离成一个单独的项目叫libpod。其可在大多数Linux平台上使用,它是一种无守护程序的容器引擎,用于在Linux系统上开发,管理和运行任何符合Open Container Initiative (OCI)标准的容器和容器镜像。 Podman提供了一个与Docker兼容的命令行前端,Podman CLI里面87%的指令都和Docker CLl相同,因此该前端可以简单地为Docker CLl别名,即”alias docker = podman” > CRI-0 is an implementation of the Kubernetes CRI (Container Runtime Interface) to enableusing ocr (open container Initiative) compatible runtimes > 官网地址: https://podman.io/ 项目地址: https://github.com/containers/libpod Podman和docker不同之处- docker需要在我们的系统上运行一个守护进程(docker daemon),而podman不需要
- 启动容器的方式不同:
docker cli命令通过API跟Docker Engine(引擎)交互告诉它我想创建一个container,然后docker
Engine才会调用ocI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker cLI的child process(子进程),而是Docker Engine的child process。
Podman是直接给ocI containner runtime(runc)进行交互来创建container的,所以containerprocess直接是podman的child process。
- 因为docke有docker daemon,所以docker启动的容器支持—restart策略,但是podman不支持
- docker需要使用root用户来创建容器,podman既可以由root用户运行,也可以由非特权用户运行
1.2.2.1 安装 podman
范例:在CentOs8上安装docker
#在Centos8上安装docker会自动安装podman , docker工具只是一个脚本,调用了podman
[root@centos8 ~]# dnf install docker
[root@centos8 ~]# rpm -ql podman-docker
/usr/bin/docker
[root@centos8 ~]# cat /usr/bin/docker
#!/bin/sh
[-f /etc/containers/nodocker ] ll \
echo "Emulate Docker cLI using podman. create /etc/containers/nodocker to quiet msg." >&2 exec /usr/bin/podman "$@"
[rootacentos8 ~]# podman version
Version: 3.3.1
API Version: 3.3.1
Go Version: go1.16.7
Built: Wed Nov 10 09:48:06 2021
OS/Arch: linux/amd64
#修改拉取镜像的地址的顺序,提高速度
[root@centos8 ~]# vim /etc/containers/registries.conf
[registries.search]
registries = ['docker.io','quay.io','registry.redhat.io','registry.access.redhat.com']
1.2.2.2 podman 管理容器
范例:podman 管理容器
#运行hello-world
~ podman run hello-world
#安装httpd
~ podman pull httpd
~ podman run -d --name web -p 80:80 httpd
~ curl localhost
<html><body><h1>It works!</h1></body></html>
~ podman exec -it web /bin/sh
# ls
bin build cgi-bin conf error htdocs icons include logs modules
# cd htdocs
# cat index.html
<html><body><h1>It works!</h1></body></html>
# echo "Welcome to kubesphere" > index.html
# exit
~ curl localhost
Welcome to kubesphere
~ ss -ntlp | grep 80
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("conmon",pid=17660,fd=5))
#安装nginx
~ podman run -dt -p 80:80 --name nginx -v /data:/data -e NGINX_VERSION=1.16 nginx:1.16.0
#查看nginx容器进程
~ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6aecfd56f06c docker.io/library/nginx:1.16.0 nginx -g daemon o... 9 minutes ago Up 8 minutes ago 0.0.0.0:80->80/tcp nginx
~ podman exec -it nginx /bin/sh
# cat /etc/issue
Debian GNU/Linux 9 \n \l
# uname -r
4.18.0-348.el8.0.2.x86_64 #共享宿主机内核
~ podman stop nginx
#查看镜像
~ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest ac826143758d 11 days ago 149 MB
docker.io/library/hello-world latest feb5d9fea6a5 9 months ago 19.9 kB
docker.io/library/nginx 1.16.0 ae893c58d83f 2 years ago 113 MB
#将容器设为开机启动
~ vim /lib/systemd/system/nginx_podman.service
~ cat /lib/systemd/system/nginx_podman.service
[Unit]
Description=Podman Nginx service
After=network.target
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/podman start -a nginx
ExecStop=/usr/bin/podman stop -t 10 nginx
Restart=always
[Install]
WantedBy=multi-user.target
~ systemctl daemon-reload
~ systemctl enable --now nginx_podman.service
~ curl 127.0.0.1