在前文(Asp.Net Core 3.1 发布至Linux)已经将Asp.Net Core3.1站点发布到了CentOS8系统上。现在尝试将Asp.Net Core3.1站点进行容器化部署。其他的文章多是利用Docker进行容器管理,但CentOS8默认采用Podman作为容器管理工具。再加上也是第一次进行容器化部署,所以写下来后续备查。
参考文章:
1.CentOS8系统新特性(1)–Podman容器(再见Docker)
2..Net Core in Docker - 在容器内编译发布并运行
因为CentOS8.x默认将Podman作为容器管理软件,如果尝试在上面安装docker-ce,可能会提示与podman有文件冲突。
安装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已经存在。
参考文章:
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 !
参考文章:
总体而言,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