如何使用Docker将.Net6项目部署到Linux服务器(一)

2023-12-13 19:42:34

目录

配置服务器环境

配置yum

配置docker

?安装.NetCore SDK6.0

发布Net6

添加Dockerfile。

?发布文件。

?编辑DockerFile文件

?编辑

上传文件

安装MySql


配置服务器环境

  • 配置yum

在配置yum之前,我们需要先了解yum是什么,yum,是Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者Terra Soft研发,用python写成,那时还叫做yup(yellow dog updater),后经杜克大学的Linux@Duke开发团队进行改进,遂有此名。

yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决。

yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http或ftp站点, 也可以是本地软件池,但必须包含rpm的header, header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header并加以分析,才能自动化地完成余下的任务。

它能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

更新yum包

sudo yum update

安装yum-utils 用来管理yum源代

sudo yum install -y yum-utils

yum的使用

首先用yum来升级软件,yum的操作大都须有超级用户的权限,当然可以用sudo。装了系统添加删除软件是常事,yum同样可以胜任这一任务,只要软件是rpm安装的。

安装命令

yum install xxx

删除命令

yum remove xxx

?其他常用命令

1.yum check-update        列出所有可更新的软件清单
2.yum update             安装所有更新软件
3.yum -y install <package_name> 安装指定的软件
4.yum update <package_name>  更新指定的软件
5.yum list  <package_name>       不加<package_name>列出所有可安裝的软件清单,加了列出指定的
6.yum -y remove <package_name> 删除软件
7.yum search <package_name>   查找软件       
8.yum list installed   列出所有已安装的软件包
9.yum list extras    列出所有已安装但不在 Yum Repository 內的软件包
10.yum info <package_name>  不加<package_name>列出所有软件包的信息,加了列出指定的 
11.yum provides <package_name> 列出软件包提供哪些文件
12.yum clean packages 清除缓存目录(/var/cache/yum)下的软件包
13. yum clean all     清除缓存目录(/var/cache/yum)下的软件包及旧的headers
  • 配置docker

查看资源库中有没有安装过docker rpm包

yum list installed | grep docker

如果之前安装过可以不用安装,如果想重新安装也可以,执行卸载老版本docker以及相关依赖即可

sudo yum remove docker docker-common container-selinux docker-selinux docker-engine

? 安装docker

yum -y install docker-ce

如果出现 No package docker-ce available 错误,这里我们只需要设置稳定的仓库,添加yum源即可。

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

然后再执行安装Docker命令进行安装就可以了?。

? 启动docker

sudo systemctl start docker

?设置Docker开机自启动

sudo systemctl enable docker

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

查看Docker是否运行?

systemctl status docker

docker.service - Docker Application Container Engine
? ?Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
? ?Active: active (running) since Tue 2023-12-12 16:54:00 CST; 34s ago
? ? ?Docs: https://docs.docker.com
?Main PID: 26847 (dockerd)
? ?CGroup: /system.slice/docker.service
? ? ? ? ? ?└─26847 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Dec 12 16:53:59 iZ2ze6on3jy8afby5yaj0bZ systemd[1]: Starting Docker Application Container Engine...
Dec 12 16:53:59 iZ2ze6on3jy8afby5yaj0bZ dockerd[26847]: time="2023-12-12T16:53:59.341325810+08:00" le...up"
Dec 12 16:53:59 iZ2ze6on3jy8afby5yaj0bZ dockerd[26847]: time="2023-12-12T16:53:59.490260781+08:00" le...t."
Dec 12 16:54:00 iZ2ze6on3jy8afby5yaj0bZ dockerd[26847]: time="2023-12-12T16:54:00.172727029+08:00" le...ng"
Dec 12 16:54:00 iZ2ze6on3jy8afby5yaj0bZ dockerd[26847]: time="2023-12-12T16:54:00.261938793+08:00" le...e."
Dec 12 16:54:00 iZ2ze6on3jy8afby5yaj0bZ dockerd[26847]: time="2023-12-12T16:54:00.287876345+08:00" le...0.7
Dec 12 16:54:00 iZ2ze6on3jy8afby5yaj0bZ dockerd[26847]: time="2023-12-12T16:54:00.287988480+08:00" le...on"
Dec 12 16:54:00 iZ2ze6on3jy8afby5yaj0bZ dockerd[26847]: time="2023-12-12T16:54:00.316181097+08:00" le...ck"
Dec 12 16:54:00 iZ2ze6on3jy8afby5yaj0bZ systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

?查看可用容器

若要列出正在运行的容器,请使用?docker ps?命令

docker ps -a

需要查看前述输出中的以下三个项

  • IMAGE 列中列出的映像名称;在此示例中为 tmp-ubuntu: latest。 请注意,你可以从同一映像创建多个容器。 这是一种强大的管理功能,可用于在解决方案中实现缩放。

  • STATUS 列中列出的容器状态。 在本例中,一个容器正在运行,一个容器已退出。 容器的状态通常是容器运行状况的第一个指标。

  • NAMES 列中列出的容器名称。 除了第一列中的容器 ID 之外,容器还会接收名称。 在本例中,由于你没有为每个容器显式提供名称,因此,Docker 为容器提供了随机名称。 若要使用?--name?标志为容器提供显式名称,请使用?run?命令。

为什么要为容器命名

借助此功能,可运行同一映像的多个容器实例。 容器名称是唯一的,这意味着如果指定了某一名称,则不能重复使用该名称来创建新的容器。 重复使用特定名称的唯一方法是删除之前的容器

?运行容器

若要启动容器,请使用?docker run?命令。 只需按名称或 ID 指定要运行的映像,即可从映像启动容器。 通过此方式启动的容器提供交互式体验

docker run -d tmp-ubuntu

暂停容器

若要暂停容器,请运行?docker pause?命令

docker pause happy_wilbur

?如何重启容器

若要重启容器,请运行?docker restart?命令

docker restart happy_wilbur

停止容器

若要停止正在运行的容器,请运行?docker stop?命令

docker stop happy_wilbur

?删除容器

若要删除容器,请运行?docker rm?命令

docker rm happy_wilbur

  • ?安装.NetCore SDK6.0

安装包配置

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

执行安装

sudo yum install dotnet-sdk-6.0

?验证Net6的安装环境

dotnet --info

发布Net6

  • 添加Dockerfile。

目前.NET6支持添加DockerFile。我们先将Dockerfile文件属性复制到输出目录的方式调整为** 如果较新则复制**,方便我们部署。

我们来解析以下Dockerfile文件里面的内容与流程

  • ?发布文件。

?切记,在发布系统时,目标运行时,一定要选择 可移植,不要选择liunx-64,否则会报错,报错内容为:

System.InvalidOperationException: Unable to resolve service for type '***.***.***' while attempting to activate '***.***.***'
  • ?编辑DockerFile文件

dockerfile文件可以由系统自动生成,但是手动发布需要修改系统生成的dockerfile文件,因为手动发布已经生成了dll文件,不需要调用build命令再次生成。所以我们需要修改DockerFile,只需要保留程序入口以及运行端口指定就可以了。

  • 上传文件

首先我们需要新建一个目录

mkdir forum_manage

然后我们将已经发布后的文件上传到服务器该目录下。我这里使用的工具是xftp

打开发布后的目录后,开始进行上传。

  • 安装MySql

查看系统版本

cat /etc/redhat-release

查看系统是否已经安装过MySql

rpm -qa | grep mysql

查看是否有安装?mariadb,该软件与 MySQL 数据库有冲突,需要手动卸载

rpm -qa | grep mariadb

移除MySql相关的软件

rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

安装MySql需要在MySql官网查看Mysql安装包。找到MySQL Community Server

选择 MySQL 的版本

注意 MySQL 的版本需要与 Linux 的版本对应上

centos7 系统对应的 MySQL 是 el7
centos8 系统对应的 MySQL 是 el8
一般情况下,直接选择第一个安装包即可,第一个安装包的版本会不定时的更新,与本文所用的安装包有略微的差别,但是并不影响具体的使用

截止 2023-5-11 最新版为 mysql-8.0.33-1.el8.x86_64.rpm-bundle.tar

下载安装包

cd /usr/local
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-1.el8.x86_64.rpm-bundle.tar

等待下载完成,查看下载后的文件

ll

解压

解压之后会有很多包产生,为了方便查看,将其解压到?/usr/local/mysql_package?里面

mkdir /usr/local/mysql_package
cd /usr/local/mysql_package
tar -xvf /usr/local/mysql-8.0.31-1.el8.x86_64.rpm-bundle.tar -C /usr/local/mysql_package

使用rpm安装

必须按照顺序执行命令,否则会出现依赖错误的报错

rpm -ivh mysql-community-common-8.0.31-1.el8.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.31-1.el8.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.31-1.el8.x86_64.rpm
rpm -ivh mysql-community-client-8.0.31-1.el8.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.31-1.el8.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.31-1.el8.x86_64.rpm
rpm -ivh mysql-community-server-8.0.31-1.el8.x86_64.rpm

常见错误总结

未按照规定顺序安装软件

按照顺序安装即可解决

?openssl 缺失

?安装?openssl-devel?即可解决

rpm -ivh mysql-community-devel-8.0.31-1.el8.x86_64.rpm

使用?yum install openssl-devel -y?安装?openssl-devel

yum install openssl-devel -y

?perl 和 libaio 缺失

安装?prel?和?libaio?即可解决

yum list perl
yum install -y perl.x86_64

查看与 libaio 相关的软件

yum list libaio

?安装

yum install -y libaio*

libc.so.6 缺失

大概率是因为下载的?MySQL版本与 Linux 版本对应不上,可以检查一下 MySQL 压缩包后缀名里面的参数是否与系统版本匹配

  • centos7 系统对应的 MySQL 是 el7
  • centos8 系统对应的 MySQL 是 el8

文章来源:https://blog.csdn.net/ckk_0821/article/details/134951211
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。