对于开发.net 的同学来说,使用docker来跑程序,在没学会之前自以为很复杂,实际上学会了发现,敲几条命令就可以了,可能是.net对docker适配做得比较友好,比较容易上手,不用以为很难学。
有几个概念理清就简单了:
第一步创建 “镜像”:每次发版一次,就建一个新的镜像
第二步在镜像中创建一个“容器”,大概是一个虚拟机的意思,可以建很多个"容器”虚拟机,形成集群
第三步测试一下访问地址正不正常,就OK了
运行环境:
CentOS 7.0
容器:Docker 1.13.1
.Net Core版本: .NET Core 2.1/3.1都可以用
1.安装docker
(1)安装docker
sudo yum install docker
(2)启动docker
systemctl start docker.service
(3)配置开机启动
systemctl enable docker.service
(4)查看docker版本信息
docker version
2.部署程序
(1)准备你的.net core web程序
(2)确保你的项目能在windows上运行
(3)添加Dockerfile
填入如下内容
#基于 `microsoft/dotnet:2.1-aspnetcore-runtime` 来构建我们的镜像,这里镜像会自动下载对应的SDK
FROM microsoft/dotnet:2.1-aspnetcore-runtime
#.net core 3.1使用FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
#拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中
COPY . /publish
#设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
WORKDIR /publish
#设置Docker容器对外暴露80端口
EXPOSE 80
#使用`dotnet HelloWorld.dll`来运行应用程序
ENTRYPOINT ["dotnet", "HelloWorld.dll"]
并设置Dockerfile属性
增加了一个配置运行端口80
(4)发布
发布完成后可看到如下文件结构
(5)上传应用程序到linux
这里使用了xftp工具上传到linux
(6)切换到Dockerfile所在目录
cd /home/vsftpd/admin/publish
(7)生成镜像
构建一个名字叫 helloworld的镜像,注意build命令后面的 . 不可去掉,这个 . 代表的是当前构建镜像的上下文路径
docker build -t helloworld .
看到Successfully就说明镜像构建成功了
(8)查看生成的镜像
docker images
(9)运行docker容器
docker run --name helloworldtest -d -p 6002:80 helloworld
helloworldtest 容器的名称
helloworld 镜像名称
-d 后台进程
-p 是进行宿主和容器之间端口的映射(-p 宿主端口:容器端口)
(10)检验docker容器是否运行成功
docker ps -a
(11)因为运行docker容器的时候进行了端口映射, 所以外部访问端口为6002
3.删除镜像步骤
需先停止容器,然后删除容器,最后才删除镜像
(1)查看容器ID及状态
docker ps -a
(2)停止容器(90a31caf1297是容器ID)
docker stop 90a31caf1297
(3)删除容器(90a31caf1297是容器ID)
docker rm 90a31caf1297
(4)查看镜像ID
docker images
(5)删除镜像(bfed045a3f12是镜像ID)
docker rmi bfed045a3f12
觉得有用 请同学们点个赞!
遇到问题
1、运行应用时提示 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
查看现有的版本
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
缺少
GLIBCXX_3.4.20
解决
查找系统内存在其它位置的包
find / -name "libstdc++.so.6*"
找一个本机高版本的包
例如找到一个
libstdc++.so.6.0.26
复盖旧包
rm -f libstdc++.so.6
ln -s libstdc++.so.6.0.26 libstdc++.so.6 //一定要用指令覆盖,直接copy复盖不行的,试过
2、遇到问题 /lib64/libc.so.6: version `GLIBC_2.18' not found
进入某个目录,一行一行执行以下指令,即可解决
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxf glibc-2.18.tar.gz
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j2
make install