使用Podman将容器镜像发布到Docker Hub /镜像注册表

时间:2020-02-23 14:31:37  来源:igfitidea点击:

Podman是一种用于管理容器和Pod的工具,不需要像Docker世界中一样常见的容器守护进程。所有容器和Pod均作为Podman工具的子进程创建。 Podmans CLI(podman)基于Docker CLI。在本教程中,很好地展示了如何使用Podman创建和发布Docker镜像并将其发布/推送到Docker Hub。

在开始之前,请确保已在系统中安装了podman。

创建Docker镜像。为此,请创建一个简单的Node.js应用程序。

$mkdir ~/docker-images/demo/
$cd ~/docker-images/demo/

这是我的app.js文件。

$vim app.js        
const http = require('http');
const os = require('os');

console.log("Node server starting...");

var handler = function(request, response) {
  console.log("Received request from " + request.connection.remoteAddress);
  response.writeHead(200);
  response.end("You've hit " + os.hostname() + "\n");
};

var www = http.createServer(handler);
www.listen(8080);

创建Dockerfile。

$vim Dockerfile 
FROM node
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]

用标签构建图像。

$podman build -t docker.io/jmutai/nodejs-demo:v1 .
STEP 1: FROM node
STEP 2: ADD app.js /app.js
afbd0b73b68748a693427c1ed7bf4a40d293632691b385a565a40d0d1092b4de
STEP 3: ENTRYPOINT ["node", "app.js"]
STEP 4: COMMIT docker.io/jmutai/nodejs-demo:v1
ffe0449e93f36fddecc71e701a6011dbbfa0cfcdf6565209c84b845bfca60bae

将docker.io/jmutai/nodejs-demo:v1替换为应用程序的标记。

登录Docker Hub

$podman login docker.io                           
Username: jmutai
Password: 
Login Succeeded!

由于我已经按照Docker Hub要求的格式在构建时标记了镜像,因此我可以将其推送。

$podman push docker.io/jmutai/nodejs-demo:v1

使用podman从Docker Hub中提取Docker镜像

然后,我们可以通过运行以下命令在其他计算机上提取图像:

--- Using docker client --
$docker pull docker.io/jmutai/nodejs-demo:v1
$docker pull jmutai/nodejs-demo:v1

--- Using podman --
$podman pull docker.io/jmutai/nodejs-demo:v1
$podman pull jmutai/nodejs-demo:v1

运行一个测试容器:

--- With podman --
$podman  run --name nodejs-demo -p 8080:8080 -d docker.io/jmutai/nodejs-demo:v1
d1a669579a39580fd1dfa19aaeed2c7a29aa28a1324d87c301d20f41e30e014f

--- With Docker --
$docker run --name nodejs-demo -p 8080:8080 -d docker.io/jmutai/nodejs-demo:v1

现在尝试访问位于http://localhost:8080的应用程序(如有必要,将localhost替换为Docker主机的主机名或者IP):

$curl localhost:8080
You've hit d1a669579a39

确认容器ID以验证输出

$podman ps                                                                         
CONTAINER ID  IMAGE                            COMMAND  CREATED             STATUS                 PORTS                   NAMES
d1a669579a39  docker.io/jmutai/nodejs-demo:v1           About a minute ago  Up About a minute ago  0.0.0.0:8080->8080/tcp  nodejs-demo

清理环境:

$podman rm -f d1a669579a39
$docker rm -f d1a669579a39