架构师修炼之微服务部署 - Docker简介

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

架构师修炼之微服务部署 - Docker简介

Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker动手实验平台:Play with Docker。

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在
GitHub上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动开放容器联盟(OCI)。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

Docker 使用 Google 公司推出的Go 语言进行开发实现,基于 Linux 内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的libcontainer,从 1.11 开始,则进一步演进为使用runC和containerd。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

容器(Containers) 虚拟主机(Virtual Machines)

容器内应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。 虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。缺点:消耗硬件资源;配置和启动都慢。
内部架构

组成部分:

Docker客户端
Docker服务端
daemon 守护进程
image 镜像
container 容器
Docker镜像仓库
概念
Docker客户端
发布操作指令给Docker服务端进行容器与镜像操作,类似Xshell,Teraterm。

Daemon守护进程
daemon在服务端宿主主机后台运行,接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。

DockerFile文件
一个用来构建镜像的文本文件,包含了一条条构建镜像所需要的指令和说明。

镜像(image)
创建容器的模板,一般程序员通过编译DockerFile文件创建。

镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。无法对镜像进行修改。--简书

容器(Container)
镜像实例-标准化的应用,可以进入容器进行修改。一个镜像可以创建多个独立运行的容器。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。--简书

仓库(Repository)
集中化存储镜像的地方,一般使用Docker Registry构建自己的私有仓库。而官方的DockerHub提供操作系统、数据库、web服务或者其他公开的镜像。

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。--简书

镜像容器创建实操(Windows版)
创建Asp.netCore项目
因为安装VS2019太费时间,所有通过SDK命令来创建项目。

安装Asp.netCore开发环境
因为需要使用模板创建项目,所有需要进入官网(https://dotnet.microsoft.com/download)下载安装.NETCore SDK 3.1

确认是否安装成功
启动cmd命令窗口
输入以下命令
dotnet --version
如果输出为 3.1 打头,代表安装成功
启动cmd窗口,cd到作业目录。输入以下命令创建项目。
dotnet new webapp -o aspnetcoreapp
进入项目目录,运行项目。
D:docker>cd aspnetcoreapp
D:dockeraspnetcoreapp>dotnet restore
D:dockeraspnetcoreappaspnetcoreapp.csproj 的还原在 65.58 ms 内完成。

D:dockeraspnetcoreapp>dotnet run
info: Microsoft.Hosting.Lifetime[0]

Now listening on: https://localhost:5001

info: Microsoft.Hosting.Lifetime[0]

Now listening on: http://localhost:5000

info: Microsoft.Hosting.Lifetime[0]

Application started. Press Ctrl+C to shut down.

info: Microsoft.Hosting.Lifetime[0]

Hosting environment: Development

info: Microsoft.Hosting.Lifetime[0]

Content root path: D:\docker\aspnetcoreapp

进入浏览器,输入地址:https://localhost:5001 或者 http://localhost:5000。如果显示了Welcome,代表创建成功。

创建DockerFile
在作业目录,创建无后缀的文件:DockerFile。内容如下:

备注:如果使用VS2019可以通过右键项目,选择“Docker支持”自动生成此文件。

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["aspnetcoreapp/aspnetcoreapp.csproj", "aspnetcoreapp/"]
RUN dotnet restore "aspnetcoreapp/aspnetcoreapp.csproj"
COPY . .
WORKDIR "/src/aspnetcoreapp"
RUN dotnet build "aspnetcoreapp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "aspnetcoreapp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "aspnetcoreapp.dll"]
创建镜像
安装Docker Desktop for windows.
https://www.docker.com/products/docker-desktop
进入CMD窗口,查看安装版本。(因为是本地演示,必须保证Client和Server都存在)
D:docker>docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:23:10 2020
OS/Arch: windows/amd64
Experimental: false

Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:29:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
CMD窗口进入工作目录,通过DockerFile创建镜像
备注:因为我有缓存Aspnet3.1和sdk3.1,所以没有出现下载信息。

D:docker>dir
驱动器 D 中的卷是 Soft
卷的序列号是 CC3B-E6AD

D:docker 的目录

2020/04/22 15:46

.
2020/04/22 15:46 ..
2020/04/22 13:08 aspnetcoreapp
2020/04/22 15:40 615 DockerFile
        1 个文件            615 字节
        3 个目录 86,923,542,528 可用字节

D:docker>docker build -t aspnetcore .
Sending build context to Docker daemon 6.373MB
Step 1/17 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
---> 0661f995e7db
Step 2/17 : WORKDIR /app
---> Running in 361e77bdad90
Removing intermediate container 361e77bdad90
---> add07effc24a
Step 3/17 : EXPOSE 80
---> Running in 9a384d1bd5e4
Removing intermediate container 9a384d1bd5e4
---> bea582d752fc
Step 4/17 : EXPOSE 443
---> Running in 4690332ca309
Removing intermediate container 4690332ca309
---> 47da2ca7d6ce
Step 5/17 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
---> 3edbb65c61da
Step 6/17 : WORKDIR /src
---> Using cache
---> 5464ff3ac1fb
Step 7/17 : COPY ["aspnetcoreapp/aspnetcoreapp.csproj", "aspnetcoreapp/"]
---> Using cache
---> d9cbfaaf5a1a
Step 8/17 : RUN dotnet restore "aspnetcoreapp/aspnetcoreapp.csproj"
---> Using cache
---> f3fc708d4809
Step 9/17 : COPY . .
---> Using cache
---> c30b51b049a7
Step 10/17 : WORKDIR "/src/aspnetcoreapp"
---> Using cache
---> 089b9f9f7a27
Step 11/17 : RUN dotnet build "aspnetcoreapp.csproj" -c Release -o /app/build
---> Using cache
---> 01728a06901e
Step 12/17 : FROM build AS publish
---> 01728a06901e
Step 13/17 : RUN dotnet publish "aspnetcoreapp.csproj" -c Release -o /app/publish
---> Using cache
---> bf5986a7c2e4
Step 14/17 : FROM base AS final
---> 47da2ca7d6ce
Step 15/17 : WORKDIR /app
---> Running in 098789c69783
Removing intermediate container 098789c69783
---> 373b88783227
Step 16/17 : COPY --from=publish /app/publish .
---> 2a00a6670e90
Step 17/17 : ENTRYPOINT ["dotnet", "aspnetcoreapp.dll"]
---> Running in 94f2bb2fae82
Removing intermediate container 94f2bb2fae82
---> 73ae1ad12839
Successfully built 73ae1ad12839
Successfully tagged aspnetcore:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

D:docker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnetcore latest 73ae1ad12839 32 seconds ago 212MB

创建容器
先确认容器列表,然后使用镜像名称创建容器。
-d:表示后台运行;-P:表示自动分配端口(-p 8080:80 形式自定义端口)

D:docker>docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

D:docker>docker run -d -P aspnetcore
4129eb2516af33ea9346c8d6eefec6e1d5d83ec728ab3ddb093a4a3610dd3001

D:docker>docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4129eb2516af aspnetcore "dotnet aspnetcoreap…" 4 seconds ago Up 3 seconds 0.0.0.0:32771->80/tcp, 0.0.0.0:32770->443/tcp elegant_chebyshev
执行结果
打开浏览器,输入地址:http://localhost:32771/

原文地址https://www.cnblogs.com/lixiaobin/p/dockerdescription.html

相关文章
|
5天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
5天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
1天前
|
测试技术 Linux Docker
【好玩的经典游戏】Docker部署FC-web游戏模拟器
【好玩的经典游戏】Docker部署FC-web游戏模拟器
8 1
|
2天前
|
Ubuntu Linux 测试技术
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试(下)
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试
29 1
|
2天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。
|
5天前
|
存储 测试技术 文件存储
【Docker项目实战】使用Docker部署Sun-Panel导航面板
【4月更文挑战第19天】使用Docker部署Sun-Panel导航面板
54 7
|
7天前
|
机器学习/深度学习 运维 Prometheus
探索微服务架构下的系统监控策略
【4月更文挑战第18天】在当今快速迭代和持续部署盛行的软件工程实践中,微服务架构因其灵活性和可扩展性受到企业青睐。然而,随着服务的细粒度拆分和网络通信的增加,传统的监控手段已不再适用。本文将探讨在微服务环境中实施有效系统监控的策略,包括日志聚合、性能指标收集、分布式追踪以及异常检测等关键技术实践,旨在为读者提供构建稳定、可靠且易于维护的微服务系统的参考指南。
12 0
|
7天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业提升系统灵活性、加速产品迭代的关键。此文深入探讨了构建高效微服务架构的实践方法,包括服务划分原则、容器化部署、持续集成/持续部署(CI/CD)流程以及监控与日志管理等关键技术点。通过分析具体案例,揭示了微服务在提高开发效率、降低维护成本及促进团队协作方面的显著优势。
|
8天前
|
测试技术 Linux 网络安全
【好玩的开源项目】使用Docker部署SyncTV视频同步和共享平台
【4月更文挑战第16天】使用Docker部署SyncTV视频同步和共享平台
49 1
|
8天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。