Docker 跨平台在 netCore 中的从入门到部署
前言
1、跨平台第一部曲:MySql
当然,不仅仅迁移过去就行了,这只是一个开头,后期还是有很多东西,需要自己好好研究,比如缓存,数据一致性,索引,存储,锁,队列等等知识,只有用到了才会打开进一步专研的大门。
2、跨平台第二部曲:Linux
我之前有篇文章已经对我的所有项目做了迁移,还是比较详细的:
《[最全操作指南] 在线六个项目全部迁移Linux》
还是那句话,只有用了,才会去研究,螃蟹这东西,如果没吃过,永远不会知道是酸的还是甜的。因为这个Linux迁移基础的比较简单,或者说是一个长期学习的东西,所以一篇文章就搞定了。
3、剩下三部曲
说完Docker,就说一说CI/CD相关的内容,应该就是基于Docker+Jenkins的吧。
最后一部曲就是K8S一把梭了。
(PS:我的讲解速度,取决于各位的素质三连的速度了🙃)
好啦,今天就说说Docker在netCore中的从入门到部署吧!
1、服务器与工具准备
本次所用到的工具主要有:
1、git:提供源代码管理;
2、docker:容器服务;
3、dotnetcore:SDK环境;
4、nginx:服务器代理;
购买然后登录上服务器,我们开始一一安装。
2、安装辅助工具
1、更新系统 [可选]
sudo yum update预计310M,预计10~20分钟
2、安装Git [可选]
第二种是本地发布,然后本地build,推到仓库里,服务器拉取;
第三种就是服务器PULL代码,然后服务器发布,再build;
我习惯了第三种,所以我这里安装Git了。
sudo yum -y install git预计5m,1~5分钟
3、安装Nginx [必要]
sudo yum install nginx预计14m,1~5分钟
启用和启动服务:
sudo systemctl enable nginxsudo systemctl start nginx
4、安装Dotnet SDK [核心]
每台计算机只需要执行一次此操作。
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.1
预计119M,20~30分钟,这个时间比较长,所以你可以考虑在本地发布好,ftp到服务器,当然如果创建了sdk,以后就省事儿了,反正各有利弊。
安装成功,测试一下版本:
dotnet --list-sdks完成!
到了这里,我们辅助工具已经安装完成了,接下来,重头戏就来了——Docker安装。
3、安装Docker环境
1、安装Docker源
sudo yum remove docker-ce然后我们就可以安装指定的源了,有官方版本和阿里云版本,我这里尝试使用阿里云版本的吧,听说会快一些。
Step 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2Step 2: 添加软件源信息
sudo yum-config-manager --add-repo >Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ceStep 4: 开启Docker服务
sudo service docker start
安装预计 5 分钟
设置docker开机启动
systemctl enable docker
启动docker
systemctl start docker
查看版本
docker --versio
2、测试Hello World
docker run hello-world如果本地没有改镜像,会自动从远程仓库拉取,然后再生成容器。这个时候,我们可以来检查一下:
当前服务器有哪些镜像:
docker images可以看到,这个就是刚刚我们拉取的镜像:名称是hello-world,ID是bf756fb1ae65,大小13.3k的镜像。
那如何查看有哪些容器呢:
docker ps -a这个就是刚刚我们看到有输出内容的容器:容器ID是4fb4bdc352ff,镜像是hello-world,状态是已退出。
PS:这里的镜像就像我们定义了一个hello的Class类,
容器呢,就是这个class类生成的对象,当然可以创建很多个。
这个时候,我们的环境已经已经搞好了,接下来就是重中之重,将我们的项目发布镜像文件了。
4、发布自己的镜像
1、添加Docker支持
FROM swr.cn-south-1.myhuaweicloud.com/mcr/aspnet:3.1-alpineWORKDIR /appCOPY . . EXPOSE 8081 ENTRYPOINT ["dotnet", "Blog.Core.dll","-b","0.0.0.0"]
简介一下:
FROM:意思是我们的项目源镜像是哪个;
WORKDIR:镜像的工作目录;
COPY:复制文件(将Dockerfile所在目录下文件复制到镜像中的工作目录中)
EXPOSE:容器要开放的端口(我们用.NETCORE的8081端口)
ENTRYPOINT:为容器启动后要执行的命令 (这里将执行dotnet Blog.Core.dll命令)
然后右键,始终属性、始终复制到输出(bin)目录:
2、发布
执行发布命令:
接下来就是docker 编译镜像了。
3、创建镜像
dotnet Blog.Core.dll可以看到已经正常的监听了8081端口,这里要注意一下,我们在Program.cs文件中,需要配置这样:
.UseUrls("http://*:8081")否则的话,系统找不到我们对应的端口信息。
没问题后,开始build了,还是在当前文件夹下(记得那个点):
docker build -t laozhang/apkimg .其中laozhang/apkimg是我们的镜像名。因为我们的Dockerfile是五步,所以这里也正好是5个Step。
然后查看机器上的镜像:
4、推送镜像到Docker hub仓库
先注册
(注意注册的时候,第一个选项,这个Docker ID是我们创建的镜像的ID,
也就是laozhangisphi/apkimg的laozhangisphi)
当然如果不一样,你后期也可以自己做配置,不要方。
第二:验证完邮件后,登录,创建仓库
第三步:服务器镜像推送
docker push laozhangisphi/apkimg:tagname
检查:
我们登录管理后台,查看结果
docker pull laozhangisphi/apkimg:latest
现在我们有了镜像,那就可以创建容器了,因为有了容器才能运行。
5、生成并运行容器
生成容器
docker run -it -p 8081:8081 laozhang/apkimg
docker start 53d047bb3a66
状态已经是运行中了,那怎么测试接口是否正常了呢,可以用curl命令:
curl http://localhost:8081/api/blog
如果到了这里,恭喜你,Docker部署NetCore基本已经搞定了,如果你想看看容器内的日志信息。
查看日志
docker logs 53d047bb3a66
其他常用命令
删除一个imageid的镜像
docker rmi [IMAE_ID]
#删除所有镜像
sudo docker rmi $(docker images -q)
#查看所有容器运行状态
docker ps -a
docker container ls -all
#删除一个containerid的容器(实例)
docker rm 6f0c67de4b72
#删除所有容器
docker rm $(sudo docker ps -a -q)
容器日志
#查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2019-06-08" --tail=100 CONTAINER_ID
#查看某时间之后的日志:
docker logs -t --since="2019-06-08" CONTAINER_ID
#查看某时间段日志:
docker logs -t --since="2019-06-08" --until "2019-06-09" CONTAINER_ID
#查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID
过程
1、停止容器 docker stop 5ab35ebcb6e22、删除容器 docker rm 5ab35ebcb6e2
3、删除镜像 docker rmi 7567a38d491c
4、启动容器 docker start 685cb02f53
剩下最后一步了,nginx代理,因为我们的Docker已经守护了这个进程,所以我们不需要其他的守护进程的工作。
6、Nginx代理服务
vim xxx
i
:wq!
如果看不懂,还是下载本地修改吧。修改的内容如下:
###### apk begin #######server {listen 9001;server_name localhost;location / {root html;proxy_pass 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection keep-alive;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_cache_bypass $http_upgrade;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;index index.html index.htm;} }###### apk end #######
接下来就是重启Nginx服务,首先可以检测语法错误:
nginx -t
nginx -s reload
好啦,今天到这里已经完全说完了,整个过程大约2个小时,中间没发现什么问题,因为我有Linux的基础,所以总体还是很简单的,主要就是docker的那几个常用命令,需要看文档查一查。加油!
来源:老张的哲学
No comments:
Post a Comment