整站优化该怎么做,在工行网站上如何做现金理财,wordpress产品展示主题,驻马店网站开发公司电话前言“不对啊#xff0c;在我这运行很正常啊”#xff0c;这句话小伙伴们在前几年应该听得很多#xff1b;每次一到安装、部署时总有一堆问题#xff0c;毕竟操作系统版本、软件环境、硬件资源、网络等因素在作怪#xff0c;此时难免会导致开发小伙伴和运维哥们互相甩锅在我这运行很正常啊”这句话小伙伴们在前几年应该听得很多每次一到安装、部署时总有一堆问题毕竟操作系统版本、软件环境、硬件资源、网络等因素在作怪此时难免会导致开发小伙伴和运维哥们互相甩锅其实很多时候与要部署的系统没有太大关系。如果能减少差异化带来的不和谐同时还能提高工作效率肯定是最好的解决方案Docker的出现让此类问题迎刃而解即把应用程序、配置依赖等打包形成一个可交付的运行环境直接启动运行即可当然不限于此接下来就一起来学习和探究吧。正文1. 概述1.1 Docker简介Docker 是一个开源的应用容器引擎是用Go语言开发的。用于开发、交付和运行应用程序的开放平台能够将应用程序与基础设施分开从而可以快速交付软件。看看Docker 的Logo图image-20210814101505393Docker就好比是下面的小鲸鱼上面装满的每个集装箱(方块)可以理解为容器不管集装箱里面装的什么统一按集装箱的形式打包存放、运输即可集装箱之间互不影响即Docker不在乎容器里的内容是什么统一基于容器这种形式进行标准化管理容器之间相互隔离所以Docker上运行的多个容器是相互不影响的。Docker 从 17.03 版本之后分为 CECommunity Edition: 社区版 和 EEEnterprise Edition: 企业版通常社区版足够用了功能强大还免费。1.2 Docker架构Docker Architecture DiagramDocker是客户端/服务器模式架构(C/S)Client(客户端)和Docker daemon(守护进程)通信 后者接收到客户端指令并执行。简述上图的三个流程客户端(Client) 发送docker build指令 服务端(Docker daemon) 收到指令之后就执行将对应文件打包生成为镜像(Images) 客户端(Client) 发送docker pull指令服务端(Docker daemon) 收到指令之后就执行从远程仓储中(Registry) 寻找镜像(Images) 并下载到Docker主机上(DOCKER_HOST) 如果找不到就报错客户端(Client) 发送docker run指令服务端(Docker daemon) 收到指令之后就执行先从本地查找镜像(Images) 如果本地存在直接通过镜像启动容器(Containers) 实例如果本地没有镜像(Images)就会从远程仓储中(Registry)下载然后再根据镜像启动容器(Containers) 实例如果都没找到那就报错。上面只是用三关键指令大概描述了从客户端到服务端的执行流程其实还有很多指令后续会专门整理文章分享。上图术语解释及作用Docker daemon(守护进程) 负责监听客户端发过来的指令请求并管理Docker的各种对象如镜像(Images)、容器(Containers)、网络等。Client(客户端) 用户和Docker主机交互的主要方式就是用来发指令请求的。远程仓储(Registry) 用于各种镜像的存储Docker Hub是最大的镜像存储库基本上平时能用到的镜像都可以找到为了提升拉取速度可以指定国内的一些仓储。镜像(Images) 是一个启动容器(Containers) 的只读模板比较容易理解的比喻镜像就是编程语言中的类(Class)容器就是通过类(Class) new出来的实例。容器(Containers) 就是镜像(Images) 可运行的实例。1.3 Docker带来的好处开发更加敏捷 让开发人员可以自由定义环境创建和部署的应用程序更快、更容易运维人员快速应对变化也更加灵活性。高可移植性和扩展性 Docker容器可以运行在各种设备环境中如开发电脑、虚拟机、服务器上等根据业务需求可实时扩展或拆除应用程序及相关服务充分利用硬件资源Docker轻量级、启动快能共用公共服务不像传统的虚拟机那样需要单独虚拟出整个系统占用资源多速度还不够快。Docker容器之间相互隔离互不冲突所以同时可运行很多个容器充分利用资源。理论先说那么多主要是实操应用用明白了理论自然就清晰了。2. 安装这里安装的主机环境是我之前的买的云服务器系统为CentOS7其他系统版本安装会有差别具体细节小伙伴可以参考官网(https://docs.docker.com/get-docker/)里面步骤都很详细。1、移除移动旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
2、安装需要的依赖包 sudo yum install -y yum-utils
3、设置镜像仓库 sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
4、更新Yum软件包索引 sudo yum makecache fast # 提高安装速度
5、开始安装Docker sudo yum install docker-ce docker-ce-cli containerd.io
6、启动Docker sudo systemctl start docker
7、测试Docker sudo docker run hello-world # 运行Hello-world
安装成功以上步骤已经完成Docker的安装但由于拉取镜像时是从国外下载比较慢所以通常我们会配置镜像加速器国内腾讯云、阿里云等都提供加速站点这里还是用阿里云演示因为有账号。配置镜像加速器3. 初体验安装完成之后这里不急着往下说先来体验一下很方便的就将自己的项目打包然后运行步骤如下准备一个项目这里就直接创建一个默认的API项目(基于.NetCore3.1)即可什么都不做。编写Dockerfile在项目根目录下增加一个Dockerfile文件里面内容如下具体内容如下FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
WORKDIR /app
COPY . .
EXPOSE 80
ENTRYPOINT [dotnet, DockerDemo.dll]
设置Dockerfile的文件属性为始终复制如下以文件系统的形式发布项目指定本地目录如下将发布之后的文件拷贝到装有Docker的主机上将项目进行发布把发布之后的文件拷贝到我的阿里云服务器上用到的工具是FinalShell(一个工具完成连接服务器和上传文件很好用)如下打包为镜像进入发布文件目录执行docker build命令将发布文件打包为一个镜像如下上图中的mydockerdemo 是镜像名可以自定义通过docker images查看镜像是否生成如下根据镜像启动容器(里面包含我们的项目)镜像生成之后就可以通过docker run指令根据镜像启动容器了即启动我们的项目docker run -d --name mydockerdemo -p 9999:80 mydockerdemo
-d后台模式运行--name给运行中的容器指定一个名字-p指定端口映射 主机的端口9999映射到容器的端80因为在容器里面我们的项目是以80 端口启动的最后一个参数是上一步生成的镜像名称 即根据此镜像启动一个容器实例。测试访问看看只要配置了云服务器的安全组和防火墙放开9999端口那么外网就可以访问了,如下可能有小伙伴说也挺麻烦的其实编写Dockerfile打包镜像等操作都是一次性的只要生成了镜像后续其他环境直接根据镜像启动即可不用再单独安装.NetCore运行时等基础设施了打包好的镜像里包含了完整的运行环境。总结这里先初步了解Docker并进行安装和体验接下来的文章会把常用命令、Dockerfile、容器数据卷挂载、DockerCompose及DockerSwarm等相关知识依次说到。Docker已经成为必备技能再不学习就Out了关注“Code综艺圈”和我一起学习吧图片\