如果你对docker比较熟,请直接看第2部分
开始前说下docker的几个概念:
a.镜像 image
b.容器 container
c.注册中心 registry
镜像与容器的关系,相当于类与实例的关系,一个类可以创建多个实例。一个操作系统的镜像可以不断地用于安装操作系统。
注册中心里有仓库,用于存储、拉取镜像的地方,本例中没有用到。除了用registry还可以用导入导出的方式进行移植,不过这种方法已经不推荐了。
docker具有隔离性强、可移植、安全、可进行版本控制等特点。
1.Docker安装
这里使用的操作系统是CentOS7 ,其它系统可点开参考官方安装说明
1.1移除原有的包
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine -y
1.2安装相关工具
yum install yum-utils device-mapper-persistent-data lvm2 -y
国内的服务器使用国内源,速度比较快
官方源 https://download.docker.com/linux/centos/docker-ce.repo
这里拉取的是docker ce版,即社区版;它还有ee版,即企业版。
yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
1.3安装docker
yum install docker-ce docker-ce-cli containerd.io -y
1.4 开启,并运行一下官方测试镜像看正不正常
systemctl start docker
docker run hello-world
1.5 docker基本管理
systemctl start docker #开启
systemctl stop docker #关闭
systemctl restart docker #重启
systemctl enable docker #设为开机启动
systemctl status docker #查看状态
docker version #查看版本
2..Net Core 站点容器化
这里演示的方式是在windows下编译,发布到linux上的方式。也可以直接在linux上编译发布项目。
2.1创建网站
在windows下建一个.NET Core站点WebApp1,这里用的是.NET Core 2.2版本
2.2添加一个Dockerfile文件
在vs项目上点右键>添加>Docker支持>选Linux。也可以手动直接创建一个Dockerfile文件
修改Dockerfile文件如下:
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
COPY . .
EXPOSE 8081
ENTRYPOINT ["dotnet", "WebApp1.dll"]
EXPOSE 8081,暴露端口8081,项目里监听端口被我改成8081了,.NET Core2.1默认监听5000端口,2.2是80端口。
一定要跟项目中的端口一致,否则部署完访问不了。不知道端口多少的话可以在发布完后先运行下dotnet WebApp1.dll 就能看到端口了,或者进入容器查看。
其它具体解释看本文最后。
2.3让Dockerfile发布完能输出到发布目录
VS中在Dockerfile上点右键>属性,属性选项卡中,复制到输出目录 选择 如果较新则复制 。
这样发布时就会把这个文件输出到发布目录。
2.4发布网站
略
3.在CentOS7中操作
3.1在CentOS7上创建一个目录
mkdir WebApp1
把发布后的文件传到WebApp1文件夹下,然后进入WebApp1
cd WebApp1
3.2创建镜像
通过DockerFile创建镜像webapp1imag(镜像名不能用大写字母),后面的"."表示告诉docker创建镜像时在当前目录寻找DockerFile
docker build -t webapp1image .
3.3运行
基于镜像 webapp1image 把docker里的端口映射到主机(左边8081是主机的端口,右边是docker,左边的端口可随意变化)
docker run webapp1image -p 8081:8081
这时正常可访问http://IP:8081,按ctrl+c退出,退出后网站不能访问
3.4后台运行容器
基于webapp1image运行一个容器,别名WebApp1,-d表示在后台运行
docker run --name=WebApp1 -p 8081:8081 -d webapp1image
如果网站有上传功能,上传的文件存储在wwwroot/Upload文件夹中,那么应该用-v把它映射到主机上。应把Docker视为只读的,不应在里面存储文件。
那么应该这样:
docker run --name=WebApp1 -p 8081:8081 -v /Upload:/app/wwwroot/Upload -d webapp1image
访问http://IP:8081
#这时可用别名停止、开启、删除
docker stop WebApp1
docker start WebApp1
docker rm WebApp1
3.5再创建个WebApp1a容器 映射到主机的7081端口
docker run --name=WebApp1a -p 7081:8081 -d webapp1image
此时另一个端口http://IP:7081也可以访问
#如果访问不了,请看下日志,看下报什么错
a.查看CONTAINER ID(容器id)
docker ps -ls
b.根据容器id查看相应容器日志
docker logs 容器id
#进入容器
docker exec -it 容器id bash
容器id 可以用上面的别名代替,容器id很长,可以只输入前几位
运行ls即可看到被拷到doker里的文件
4.本文用到的Dockerfile说明
#----------------------DockerFile---------------------------
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base #使用2.2版的运行时作为基础镜像,根据项目的目标框架,首次会自动下载
WORKDIR /app #docker内的工作目录
COPY . . #将当前目录拷贝到docker的当前目录中
EXPOSE 8081 #暴露端口,2.1默认5000,2.2默认80端口
EXPOSE 443 #可以加多个端口
ENTRYPOINT ["dotnet", "WebApp1.dll"] #改成自己的 WebApp1.dll为发布完的Dll,比如项目是WebApp1.csproj,生成的dll一般就是WebApp1.dll
#----------------------DockerFile---------------------------
类别:OperationMaintenance 阅读(0) 评论(0) 发表时间:2019-08-17 10:07 星期六