1.基础准备
1. ubuntu 18.04
2. docker version 18.09 安装 https://blog.csdn.net/qq_36379495/article/details/92837897
3. netcore 2.1
4 管理docker 中文件 https://www.cnblogs.com/pcy0/p/ftp-server-for-docker.html
5 部署3.1 https://www.cnblogs.com/zhoumeng0736/archive/2020/01/04/12149856.html
2.简介
自从netcore支持跨平台之后,以及现在很多公司都是采用容器化部署,今天在比较空闲的时候学习了一下。
3.使用
3.1 创建netcore 项目 ,选择api程序完成创建
3.2 添加dockerfile
项目右键=》添加=》docker支持,添加成功之后会生成一个dockerfile文件,打开该文件,系统自动生成了一堆代码,但是在发布的时候发现不可用,因此从网上找了下面这种方式进行发布,把dockerfile属性改为始终复制,发布文件的时候直接把dockerfile文件也一块发布,如下图配置的dockerfile文件:
在发布目录下创建一个文本文档Dockerfile.txt ,或者在Linux系统创建一个文件Dockerfile
内容:
# 声明使用的基础镜像
FROM microsoft/aspnetcore:latest
# 设置工作目录
WORKDIR /app
# 将本地应用拷贝到 容器 /app/ 目录下 "./"代表的就是/app 因为dockerfile文件和程序文件都在发布文件夹下 所以两个目录是一样的
COPY ./ ./
# 设置导出端口
EXPOSE 5000/tcp
# 指定应用入口点 NetCore.dll代表的是主程序文件
ENTRYPOINT ["dotnet", "NetCore.dll"]
版本2
FROM microsoft/dotnet:latest #所需依赖
WORKDIR /web #容器中系统工作空间
#拷贝当前文件夹下的文件到容器中系统的工作空间(注意:“.”后面有空格)
COPY . ./
EXPOSE 80 #对外提供的端口号
EXPOSE 443
#容器中使用 ["dotnet","系统启动的dll"] 来运行应用程序
ENTRYPOINT ["dotnet", "testDocker.dll"]
版本3 -项目使用版本
# 添加基础镜像
FROM docker.io/microsoft/dotnet:2.2.0-aspnetcore-runtime
#容器中系统的工作空间
WORKDIR /app
#拷贝当前文件夹下的文件到容器中系统的工作空间
COPY . /app
#设置Docker容器对外暴露的端口
EXPOSE 80
#容器中使用 ["dotnet","系统启动的dll"] 来运行应用程序
ENTRYPOINT ["dotnet","WalkingTec.Mvvm.Demo.dll"]
3.3 发布
跟以往发布net程序一样选择文件系统进行发布:
3.4 安装asp.net core镜像
sudo docker pull microsoft/dotnet
因为我们在dockerfile中要求的from镜像是microsoft/aspnetcore:latest,所以下载的时候我们直接pullmicrosoft/dotnet,如果下载慢的话 可以配置国内镜像站,这里我用的阿里云的镜像
sudo vi /etc/apt/sources.list
镜像下载完成之后输入sudo docker images 检查一下是否下载成功,下图中箭头所指就是我们下载的镜像,到此需要准备工作已经完成。
sudo docker images
3.5 把文件上传到liunx指定文件夹当中
本人所用sudo rz 把文件上传到liunx当中(如果您的linux系统没有安装,在终端输入:
sudo apt-get install lrzsz 进行自动安装),图中所示,刚才所发布的文件,全部上传到了liunx系统上的web文件夹当中
sudo apt-get install lrzsz
sudo rz
3.6 build 镜像
在build的时候注意,命令最后一定要有个".", 并且镜像名称也不允许出现大写,如果想带上版本号的话 可以输入命令:
sudo docker build -t web:v0.1 .
,如果不输入默认显示tag的latest
build之后就可以查看镜像列表:sudo docker images,下图中web 就是我们刚才所生成的镜像文件:
sudo docker images
3.7 运行build的镜像
sudo docker run -d -t -p 5000:80 web #运行镜像
sudo docker ps #查看正在运行的容器
sudo docker ps -a #查看所有容器信息
通过命令运行
docker run --name=aspnetcoredocker -p 7777:80 -d aspnetcoredocker
--name
:指定容器名称
-d参数表示容器在后台运行,我们不需要进入到容器。
-p参数表示端口映射,“-p 5000:80”表示将容器的80端口映射到本地5000端口。
-v参数表示目录映射,将服务器的/home/www目录挂到容器的/app目录。
出现一长串字符串,便是表示运行成功:
startdocker.sh文件快捷部署方式
#!/bin/bash
#zip -r /web/garbage_classification/bak/pcadmin`date +%Y%m%d`bak.zip ./ #备份
#unzip -o Web.zip #解压
docker stop walkingtec.mvvm.demo && docker rm walkingtec.mvvm.demo && docker rmi walkingtec.mvvm.demo #停止并删除容器并删除原镜像
docker build -t walkingtec.mvvm.demo . #构建镜像
docker run --name=walkingtec.mvvm.demo -v /web/dockerdemo/upload:/app/wwwroot/Upload --privileged=true -p 80:80 -d --restart=always walkingtec.mvvm.demo #
docker ps #
执行命令(进入到具体目录中):sudo sh startdocker.sh
3.8 测试可正常访问
4.小结
在整个发布流程中涉及一些需要提前准备的例如docker环境,linux系统等还请自行配置。
三 安装DOCKER
#安装Docker
yum
install
docker
#启动docker服务
systemctl start docker.service
#配置开机启动
systemctl
enable
docker.service
配置docker加速
配置docker加速最快的方法直接修改/etc/docker/daemon
.json下的配置信息
/etc/docker/daemon
.json
{
"registry-mirrors"
: [
"https://d8b3zdiw.mirror.aliyuncs.com"
]
}
然后在终端重启docker服务
sudo
systemctl daemon-reload
sudo
systemctl restart docker
Linux相关命令及docker配置
第一次接触linux,很蒙圈,这里记录一下基础的命令,及docker需要用到的一些配置,以便以后查阅
Linux命令
- 查看目录: ls
- 创建目录: mkdir (目录名)
- 删除文件:rm (文件或目录名)
- 删除目录(包括其中的子目录和文件):rm -rf (文件或目录名)
- 切换到root 用户: sudo -i 或sudo su -
- 退出root 用户: exit
- 显示当前目录: pwd
- 复制文件/目录:cp 源文件或目录/目标文件或目 cp -r 复制文件夹 包括子目录和文件
- 重命名文件/目录: mv (文件或目录名)
- 进入目录:cd
文件权限设置:
chmod 777 home1 777是读、写、执行权限
在学习Linux过程中,我们常常需要将本地文件上传到Linux主机上,这里简单记录下使用Xsheel工具进行文件传输
1:首先连接上一台Linux主机
2:输入rz命令,看是否已经安装了lrzsz,如果没有安装则执行 yum -y install lrzsz命令进行安装。
3:安装成功后,输入rpm命令确认是否正确安装
4: 使用 rz -y命令进行文件上传,此时会弹出上传的窗口:
5:选择要上传的文件,点击确定即可将本地文件上传到Linux上,如图表示成功上传文件
6:使用ls命令可以看到文件已经上传到了当前目录下
Linux的压缩/解压缩文件处理 zip & unzip
Linux的压缩/解压缩命令详解及实例
压缩服务器上当前目录的内容为xxx.zip文件
zip -r xxx.zip ./*
解压zip文件到当前目录
unzip filename.zip
另:有些服务器没有安装zip包执行不了zip命令,但基本上都可以用tar命令的,实例如下:
tar -zcvf /home/zdzlibs.tar.gz /home/zdz/java/zdzlibs/
zip命令详解
1.zip -r myfile.zip ./*
将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件
2.unzip
unzip -o -d /home/sunny myfile.zip
把myfile.zip文件解压到 /home/sunny/
-o:不提示的情况下覆盖文件;
-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;
Linux文件夹文件创建、删除
Linux删除文件夹命令
linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。
直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字
删除目录、文件 rm(remove)
功能说明:删除文件或目录。
语 法:rm [-dfirv][--help][--version][文件或目录...]
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数”-r”,否则预设仅会删除文件。
参 数:
-d或–directory 直接把欲删除的目录的硬连接数据删成0,删除该目录。
-f或–force 强制删除文件或目录。
-i或–interactive 删除既有文件或目录之前先询问用户。
-r或-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose 显示指令执行过程。
1 删除文件夹
de>rm -rf fileNamede>
-删除文件夹实例:
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的
2 删除文件
de>rm -f fileNamede>
使用 rm -rf 的时候一定要格外小心,linux没有回收站的
Linux添加文件命令
创建目录:mkdir(make directories)
功能说明:建立目录
语 法:mkdir [-p][--help][--version][-m <目录属性>][目录名称]
补充说明:mkdir可建立目录并同时设置目录的权限。
参 数:
-m<目录属性>或–mode<目录属性> 建立目录时同时设置目录的权限。
-p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
例:mkdir test
创建文件 touch
功能说明:改变文件或目录时间。
语 法:touch [-acfm][-d <日期时间>][-r <参考文件或目 录>][-t <日期时间>] [--help] [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时 间][文件或目录...]
补充说明:使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。
参 数:
-a或–time=atime或–time=access或–time=use 只更改存取时间。
-c或–no-create 不建立任何文件。
-d<时间日期> 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m或–time=mtime或–time=modify 只更改变动时间。
-r<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。
-t<日期时间> 使用指定的日期时间,而非现在的时间。
例:touch test.txt (注:Linux下没有文件后缀名区分文件类型之说,系统文件类型只有可执行文件和不可执行文件)