This one is just between you and me, don't tell anyone else! Promise? Okay, I have your word, so here goes: There's a brand new REST API that is included with version 2.0 of Podman! That release has just hit testing on the Fedora Project and may have reached stable by the time this post is published. With this new REST API, you can call Podman from platforms such as cURL, Postman, Google's Advanced REST client, and many others. I'm going to describe how to begin using this new API.
The Podman service only runs on Linux. You must do some setup on Linux to get things going.
Install Podman v2.0
First, install Podman v2.0 or later. Currently, you can do that on Fedora with a call such as dnf -y install --enablerepo updates-testing podman
, or you can clone Podman from GitHub and then use the Building from scratch instructions near the end of this page.
Set up the REST API
Once Podman v2.0 is installed on your machine, it's time to check out the REST API documentation on docs.podman.io. At the top of this REST document are instructions to set up the REST API service on your Linux server for testing. Here is a look at the command:
# podman system service -t 5000 &
Phew, that was a lot of heavy lifting!
Seriously, it's just that simple. With this command, the service stays up and running for 5000 seconds, and it starts accepting requests. Note that the 5000 seconds uptime is refreshed after every command is received. If you want the service to stay up until the machine goes down or the process is killed, use 0 (zero) instead of 5000. You can do so with this command:
# podman system service -t 0 &
Gather Podman information
Let's take a quick look at a few commands to use against the server now that it's running. First, let's query Podman for its information, and then pipe the results through jq
, a command-line JSON processor that's available in most Linux distributions. A quick warning: jq
formats the JSON file in a very digestible format, but it can hide errors if they pop up. Let's leverage d
in the below curl
command to query the Unix domain socket set up when the service was started:
# curl -s --unix-socket /run/podman/podman.sock http://d/v1.0.0/libpod/info | jq
{
"host": {
"arch": "amd64",
"buildahVersion": "1.15.0",
"cgroupVersion": "v1",
"conmon": {
"package": "Unknown",
"path": "/usr/local/libexec/podman/conmon",
"version": "conmon version 2.0.3-dev, commit: 002da2522941fde456f5213c8a5a96c9836c2592"
},
"cpus": 1,
"distribution": {
"distribution": "fedora",
"version": "30"
},
… (removed a number of lines for brevity)
"version": {
"APIVersion": 1,
"Version": "2.1.0-dev",
"GoVersion": "go1.13.12",
"GitCommit": "0e4b73456d4c545136a5cfd664b6d9d819ffc498",
"BuiltTime": "Sun Jun 21 14:07:25 2020",
"Built": 1592762845,
"OsArch": "linux/amd64"
}
}
This output displays the information about the Podman installation on the Linux server where the REST API service is running.
Next, let's try a couple of small tasks with a little more oomph. Let's pull an image, and then let's list it.
First, we'll pull the Podman image from quay.io. This step could take a few seconds to process. For those new to encoded URL arguments, the %2f
below is an escaped forward slash /
:
# curl -XPOST --unix-socket /run/podman/podman.sock -v 'http://d/v1.0.0/images/create?fromImage=quay.io%2Fcontainers%2Fpodman'
*
Trying /run/podman/podman.sock:0...
* Connected to d (/run/podman/podman.sock) port 80 (#0)
> POST /v1.0.0/images/create?fromImage=quay.io%2Fcontainers%2Fpodman HTTP/1.1
> Host: d
> User-Agent: curl/7.65.3
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Sun, 21 Jun 2020 19:13:19 GMT
< Content-Length: 185
<
{"status":"pulling image () from quay.io/containers/podman:latest","error":"","progress":"","progressDetail":{},"id":"5a9a0e9623e33dec906d8d38908d0681cee1e09fbdf282fa65fe8dfb878ab943"}
* Connection #0 to host d left intact
Now that we’ve an image pulled down, let’s examine it:
# curl --unix-socket /run/podman/podman.sock -v 'http://d/v1.0.0/libpod/images/json' | jq
*
Trying /run/podman/podman.sock:0...
% Total % Received % Xferd Average Speed Time Time Time
Current
Dload
Upload Total Spent Left
Speed
0 0 0 0 0 0
0 0 --:--:-- --:--:-- --:--:-- 0* Connected to d (/run/podman/podman.sock) port 80 (#0)
> GET /v1.0.0/libpod/images/json HTTP/1.1
> Host: d
> User-Agent: curl/7.65.3
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Sun, 21 Jun 2020 19:16:51 GMT
< Transfer-Encoding: chunked
<
{ [3980 bytes data]
100 5871 0
5871 0 0
38625 0 --:--:-- --:--:-- --:--:-- 39668
* Connection #0 to host d left intact
[
{
"Id": "eb7134a03cd6bd8a3de99c16cf174d66ad2d93724bac3307795efcd8aaf914c5",
"RepoTags": [
"registry.fedoraproject.org/fedora:32",
"registry.fedoraproject.org/fedora:latest"
],
"Created": "2020-05-15T06:48:40Z",
"Size": 207772777,
"Labels": {
"license": "MIT",
"name": "fedora",
"vendor": "Fedora Project",
"version": "32"
},
"Containers": 1,
"Names": [
"registry.fedoraproject.org/fedora:32",
"registry.fedoraproject.org/fedora:latest"
],
… (removed a number of lines for brevity)
"Names": [
"quay.io/containers/podman:latest"
],
"Digest": "sha256:1af265e9e85af5d7a4f626c65b136d4eb610b5c7f84873a05e103e91352d6387",
"Digests": [
"sha256:1af265e9e85af5d7a4f626c65b136d4eb610b5c7f84873a05e103e91352d6387"
],
"History": [
"5a9a0e9623e33dec906d8d38908d0681cee1e09fbdf282fa65fe8dfb878ab943",
"<missing>",
"<missing>",
"<missing>",
"<missing>",
"eb7134a03cd6bd8a3de99c16cf174d66ad2d93724bac3307795efcd8aaf914c5"
]
}
]
That's it!
It's just that easy to get the REST API service running. You're ready to pull images, create containers, and do any other needed Podman operation. You can also call the service directly through the podman --remote
option, or include Podman calls in your Go programs by using the Go bindings. Details on all of that are coming soon.
Wrap up
Granted, in this introduction, I showed only a very small section of the available commands and ways to call the REST API. There's work underway to create a more in-depth blog. In the meantime, the available commands are documented in the Podman API Documentation for your use. The main takeaway today is that if you can do it from Podman's command line, you should be able to do it using this new REST API, too.
Now, remember, this is our little secret!
[ Getting started with containers? Check out this free course. Deploying containerized applications: A technical overview. ]
저자 소개
Software engineer at Red Hat working on containers focusing on the Buildah and Podman projects. Manages the buildah.io and podman.io websites and can be found on freenode at #buildah and #podman. Joined the Open Source world in 2016 and wished he'd joined the community sooner. Husband and dad of 3 just trying to contain them, but has better luck containing bits and bytes with containers. When it's time to do some serious coding, it's time to crank the Bluegrass in the headphones and get the tea brewing!
채널별 검색
오토메이션
기술, 팀, 인프라를 위한 IT 자동화 최신 동향
인공지능
고객이 어디서나 AI 워크로드를 실행할 수 있도록 지원하는 플랫폼 업데이트
오픈 하이브리드 클라우드
하이브리드 클라우드로 더욱 유연한 미래를 구축하는 방법을 알아보세요
보안
환경과 기술 전반에 걸쳐 리스크를 감소하는 방법에 대한 최신 정보
엣지 컴퓨팅
엣지에서의 운영을 단순화하는 플랫폼 업데이트
인프라
세계적으로 인정받은 기업용 Linux 플랫폼에 대한 최신 정보
애플리케이션
복잡한 애플리케이션에 대한 솔루션 더 보기
가상화
온프레미스와 클라우드 환경에서 워크로드를 유연하게 운영하기 위한 엔터프라이즈 가상화의 미래