Asp.Net Core 3.1在CentOS8下采用Podman进行容器化部署

  在前文(Asp.Net Core 3.1 发布至Linux)已经将Asp.Net Core3.1站点发布到了CentOS8系统上。现在尝试将Asp.Net Core3.1站点进行容器化部署。其他的文章多是利用Docker进行容器管理,但CentOS8默认采用Podman作为容器管理工具。再加上也是第一次进行容器化部署,所以写下来后续备查。

运行环境

  1. 宿主机:CentOS Linux release 8.1.1911 (x64)
  2. podman:1.4.2-stable2
  3. dotnet运行时:aspnetcore 3.1

安装容器管理软件(Podman)

参考文章:
  1.CentOS8系统新特性(1)–Podman容器(再见Docker)
  2..Net Core in Docker - 在容器内编译发布并运行
  因为CentOS8.x默认将Podman作为容器管理软件,如果尝试在上面安装docker-ce,可能会提示与podman有文件冲突。
Asp.Net Core 3.1在CentOS8下采用Podman进行容器化部署_第1张图片
  安装podman(CentOS8中dnf代替了yum 包管理软件)

#yum 安装
[dotnba@CentOS8 ~]$ sudo yum install -y podman
#dnf 安装
[dotnba@CentOS8 ~]$ sudo dnf install -y podman
CentOS-8 - AppStream                                                                                                                                     953  B/s | 4.3 kB     00:04    
CentOS-8 - Base                                                                                                                                          861  B/s | 3.8 kB     00:04    
CentOS-8 - Extras                                                                                                                                        161  B/s | 1.5 kB     00:09    
packages-microsoft-com-prod                                                                                                                              167  B/s | 2.9 kB     00:17    
软件包 podman-1.4.2-5.module_el8.1.0+237+63e26edc.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!

  因为默认已经安装,所以podman已经存在。

创建Asp.Net Core镜像

参考文章:

  1. 微软官方: ASP.NET Core Docker Sample
  2. RedHat官方:Getting started with .NET Core in Red Hat Enterprise Linux 8.1
  3. Docker的asp.net core应用部署系列目录
  4. Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署
  5. asp.net core 发布到docker

1. 创建Dockerfile文件
  关于Dockerfile文件参考:Dockerfile reference

[dotnba@CentOS8 docker]$ pwd
/home/dotnba/docker
[dotnba@CentOS8 docker]$ cat Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 
WORKDIR /wwwroot/dotnet31
COPY . .
ENTRYPOINT ["dotnet", "WebApiDemo.dll"]
[dotnba@CentOS8 docker]$ ls
appsettings.json  Dockerfile  hosting.json  WebApiDemo.dll  WebApiDemo.runtimeconfig.json

  关于镜像文件的位置(mcr.microsoft.com/dotnet/core/aspnet),参看文章:https://hub.docker.com/_/microsoft-dotnet-core-aspnet/。
2.生成镜像文件

[dotnba@CentOS8 docker]$ podman build -t aspnetwebapi .
STEP 1: FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
Getting image source signatures
Copying blob bc51dd8edc1b done
Copying blob 6848f14cfbf7 done
Copying blob e5a46ebecd63 done
Copying blob 8425bc024e3a done
Copying blob 01ae9269f21a done
Copying config e28362768e done
Writing manifest to image destination
Storing signatures
STEP 2: WORKDIR /wwwroot/dotnet31
038151de5ad01b8247c85074e4eea81847fb2b185770b2932765bfbe6dc77f54
STEP 3: COPY . .
9d7c0121d2e04c7789adebf1f562708b1ed69dbdc80b2a5f014c3a42ef6c42b0
STEP 4: ENTRYPOINT ["dotnet", "WebApiDemo.dll"]
STEP 5: COMMIT aspnetwebapi
6f3721d0028ee2a2534a1a35b5c48ed6f3ca5abfd7db6af3792bd366e6e43309

3.查看和运行镜像文件

[dotnba@CentOS8 docker]$ podman images
REPOSITORY                                  TAG      IMAGE ID       CREATED          SIZE
localhost/aspnetwebapi                      latest   6f3721d0028e   26 seconds ago   211 MB
localhost/webapi                            latest   e331a1c488c6   20 hours ago     727 MB
mcr.microsoft.com/dotnet/core/aspnet        3.1      e28362768eed   4 days ago       211 MB
registry.access.redhat.com/ubi8/dotnet-31   latest   0359590b092d   7 days ago       727 MB
[dotnba@CentOS8 docker]$ podman run -ti -d --name aspnetwebapi -p 127.0.0.1:9999:80  localhost/aspnetwebapi:latest
634233fb8d31710d6b67260b62e7da45685207aeb8ad7145efd3c4142c228b8e
[dotnba@CentOS8 docker]$ podman ps -a
CONTAINER ID  IMAGE                          COMMAND               CREATED         STATUS             PORTS                     NAMES
7ace85dce6eb  localhost/aspnetwebapi:latest  dotnet WebApiDemo...  35 minutes ago  Up 35 minutes ago  127.0.0.1:9999->80/tcp    aspnetwebapi

关于端口映射,参考文章:Docker容器内部端口映射到外部宿主机端口
4.验证站点内容

[dotnba@CentOS8 docker]$ curl http://localhost:9999/index
Hello World !

Podman常用命令

参考文章:

  1. podman.命令集锦
  2. Docker 命令大全

  总体而言,docker能用的命令,podman也都能用。常用的记录被查。
1. 进入容器

#7a是容器ID
[dotnba@CentOS8 docker]$ podman exec -it 7a /bin/bash
root@7ace85dce6eb:/wwwroot/dotnet31# pwd
/wwwroot/dotnet31

2.宿主机和容器间文件拷贝

#46b2d750ab4b是容器ID
podman  cp  /mnt/WebApiDemo.dll 46b2d750ab4b:/home/dotnba/docker/

3.停止/启动容器

[dotnba@CentOS8 docker]$ podman ps -a 
CONTAINER ID  IMAGE                          COMMAND               CREATED            STATUS                PORTS                     NAMES
7ace85dce6eb  localhost/aspnetwebapi:latest  dotnet WebApiDemo...  About an hour ago  Up About an hour ago  127.0.0.1:9999->80/tcp    aspnetwebapi
[dotnba@CentOS8 docker]$ podman stop 7ace
7ace85dce6eb79d9121ab30f8d7ccc4751c6cf9ed94ac21d77a09b0662bb6f6e
[dotnba@CentOS8 docker]$ podman start 7ace
7ace85dce6eb79d9121ab30f8d7ccc4751c6cf9ed94ac21d77a09b0662bb6f6e

4.删除容器
  删除容器的前提是容器处于非运行状态。

[dotnba@CentOS8 docker]$ podman rm 7ace

5.删除镜像
  删除镜像的前提是镜像没有运行容器。

[dotnba@CentOS8 docker]$ podman rmi fe200

你可能感兴趣的:(C#)