基于netcore 3.1的aspnet core发布到Docker

参考:
https://www.cnblogs.com/lonelyxmas/p/10748667.html

https://hub.docker.com/_/microsoft-dotnet-core

https://github.com/dotnet/dotnet-docker/blob/master/samples/aspnetapp/Dockerfile

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/docker/building-net-docker-images?view=aspnetcore-3.1

1.Docker服务端环境准备

a)docker安装:略
b)拉取aspnet依赖镜像,建议先把镜像仓库改成国内服务商,比较快,这里是使用阿里。

   docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1 
   //(指定tag为3.1版本,可以用其他版本)也可以使用runtime镜像,或者sdk镜像,这里建议使用专用的。https://hub.docker.com/_/microsoft-dotnet-core-aspnet/

微信截图_20200303173726

2.源码准备(手动发布)

a)编写Dockerfile文件:
通过vs项目右键添加Docker支持,会自动创建一个Dockerfile文件及内容,修改文件属性为始终复制并修改里面的内容为以下内容(因为是自己手动发布,而原文件内容是要做持续集成需要编译)

#使用专有镜像及指定netcore版本作为原始依赖镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

#在容器中的当前操作目录
WORKDIR /web 

#把服务器中的当目录 复制到 容器中的当前操作目录WORKDIR
COPY . ./ 

#暴露容器的端口
EXPOSE 80  

#使用ENTRYPOINT启动容器中的应用(也可以使用CMD,两者有区别)
ENTRYPOINT ["dotnet", "MVCProject3_1.dll"]

b)发布
点击发布到目录中,并上传到linux服务上

3.docker操作

a)创建镜像

cd publish  //进入linux中的源码目录中
docker build -t web1 .  //不要忘记最后一个点号,使用build命令创建镜像,名字为web1,点号表示在当前目录寻找Dockerfile文件。

b)生成容器,并后台运行式启动

docker run -i -t -d -p 5000:80 --name=my-web1 web1 /bin/bash   //使用服务器端口5000映射容器的端口80

c)查看容器运行状态

  docker ps //查看容器是否启动
  docker logs $container_id //查看容器的日志 
  docker exec -it my-web1 /bin/bash  //进入容器查看发布源码

d)访问部署好的容器应用

   curl 192.168.31.51:5000  //5000为docker run指定的服务器端口,映射对应容器的中EXPOSE端口

4.使用nginx作为netcore应用程序的反向代理:80端口

生成容器时注意选项:–link参数

docker基础

####1.虚拟化:将计算机各种实体资源予以抽象,转换后呈现出来。目的是对资源的充分利用,比如性能高的产能过剩和旧机器产能过低的重组重用。
####2.包括三种:全虚拟化,os虚拟化,硬件层虚拟化。
hypervisior:vmm,虚拟监视管理系统。常见的产品有vmware,kvm,xen
####3.docker简介:
Docker使用客户端-服务器 (C/S) 架构模式 使用远程API来管理和创建Docker容器。Docker 容器(Container)通过 Docker 镜像(Image)来创建,二者之间的关系类似于面向对象编程中的对象与类。

其中,Docker客户端用于向Docker服务器或守护进程发送请求。而服务器或守护进程会接受来自客户的请求(创建、运行、分发容器),并在处理完请求后返回响应结果。Docker提供了一个命令行工具docker,及一整套RESTful API。客户端和服务端既可以运行在一个机器上,也可通过 socket或者RESTful API来进行通信。
####4.docker组件:
a)Docker客户端和服务端(c/s程序):客户端发送命令,服务端执行命令,客户端可以链接其他服务端,类似于mysqld与mysql。
b)镜像:文件系统
c)Registry:变是镜像仓库,需要登录
d)容器:容器与镜像的关系类似于面向对象编程中的对象与类。

5.安装docker(默认服务端和客户端一起安装)

step 1: 安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Step 2: 添加docker软件源信息

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step 3: 更新并安装 Docker-CE

sudo yum makecache fast
sudo yum -y install docker-ce

//docker-ce代表社区版本,docker-ee代表父付费的企业版本
Step 4: 开启Docker服务

sudo service docker start

5.**只安装客户端版本:

yum list docker-ce-cli**

6.修改国内镜像仓库
阿里云:
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://4efqxjkt.mirror.aliyuncs.com"]
}

systemctl restart docker.service //重启docker以生效
docker images //测试是否可以

6.常见镜像命令

a)docker search centos //查找镜像
b)docker pull nginx //拉取镜像,需要其他版本的tag,需要到docker官方查看
c)docker rmi nginx //删除镜像
d)docker commit //构建自己的镜像1,会提交到本地服务端的镜像
e)docker build //构建自己的镜像2,使用自己的文件,制作自己的镜像

7.常见容器命令

a)docker run //使用镜像创建运行容器
b)docker exec //进入容器
如: docker exec -it mynginx /bin/bash //与run选项一致
c)docker rm //删除容器
d)docker ps //查看正在运行的容器
e)docker ps -a //查看所有的容器

8.运行容器

a)docker run -i -t -d -p 5000:5000 –name=mynginx nginx /bin/bash
选项说明:-i 交互式运行,-t 启动终端命令行,-d 后台守护式运行,-p映射端口, –name 容器名称,nginx 镜像,/bin/bash放在镜像名后的是命令,这里我们希望有个交互式 Shell

9.创建自己的容器:

a)使用commit方式:常用来修改现有容器
b)使用build方式:常用来新部署
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/docker/building-net-docker-images?view=aspnetcore-3.1
文件格式:1基础镜像信息 2维护者的信息 3镜像操作命令 4容器启动执行命令
FROM //基础镜像
MAINTAINER //维护者信息
COPY //从本地目录复制到镜像的容器目录中
WORKDIR //指定容器的当前的工作目录
RUN //相当于执行bash
CMD //容器启动

“`
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

WORKDIR /web

COPY . ./

EXPOSE 80

ENTRYPOINT ["dotnet", "MVCProject3_1.dll"]
“`

10.容器与主机之间的数据拷贝,有占类似于scp的命令写法

docker cp $con_id:/xxx/xxx /root/tools //复制容器里的数据到本机
docker cp/root/tools $con_id:/xxx/xxx //复制本机数据到容器指定目录, 在部署的时候,如果不想复制,可以用-v映射


部署nginx整体操作:

使用中的docker容器备份与恢复

1.备份
先把运行中的容器提交为镜像:docker commit -p 70d5ee222609 container-mysql56-backup
再把该镜像tar保存到本地:docker save -o ~/container-mysql56-backup.tar container-mysql56-backup

2.恢复
如果是在同一台机子上做实验,先删除上一步提交的镜像:docker rmi 9ca852b519bd #最好是镜像的ID
先加载本地的tar文件到镜像列表:docker load -i ~/container-mysql56-backup.tar
再重新运行容器:docker run –name db002 -p 3308:3306 -d container-mysql56-backup #此处可以不用指定root密码,因为备份的容器中已经保存.
可以看出,恢复容器时,容器之内的原始镜像已经保存信息,但主机与容器之间的信息并未保存?

3.迁移
迁移其实就是把备份保存的tar文件迁移后再恢复的过程!

附:
删除镜像:docker rmi {ID}
删除容器:
先停止容器:docker kill {ID}
查看包括停止的所有容器:docker ps -a #查看运行的容器:docker ps,不带”-a”
删除容器:docker rm {ID}

docker安装mysql

使用docker应用,基本两个步骤.

1.有应用镜像,如mysql

2.docker容器

安装过程:

1.拉取镜像

先搜索:docker search mysql
再拉取:docker pull mysql:5.6

2.运行容器
先查看镜像是否存在:docker images
运行:docker run –name db001 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=mytest -d mysql:5.6
db001容器名称,3307为本机端口映射,mytest为root密码,mysql:5.6为镜像

3.查看进程
docker ps

4.本机连接docker映像
mysql -h192.168.1.80:3307 -uroot -pmytest

centos6安装docker

1.升级系统内核为3.10

centos6版本升级内核

2.安装epel源

yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

3.安装docker,(因为6.5系统中有同名的docker系统包),可能需要先卸载这个系统包

#yum -y remove docker   #不一定执行此命令,看是否有安装此系统包

yum -y install docker-io  #在6.x系统中是此命名docker-io,在7以上系统是docker

4.设置启动

chkconfig –add docker

chkconfig –level 2345 docker on

参考:https://mos.meituan.com/library/26/how-to-install-docker-on-centos/