zoukankan      html  css  js  c++  java
  • 架构师修炼之微服务部署

    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 开始,则进一步演进为使用runCcontainerd

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

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

    内部架构

    dockerfarmework

    组成部分:

    • 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命令来创建项目。

      1. 安装Asp.netCore开发环境

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

      2. 确认是否安装成功

        1. 启动cmd命令窗口
        2. 输入以下命令
          dotnet --version
          
        3. 如果输出为 3.1 打头,代表安装成功
      3. 启动cmd窗口,cd到作业目录。输入以下命令创建项目。

        dotnet new webapp -o aspnetcoreapp
        
      4. 进入项目目录,运行项目。

        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:dockeraspnetcoreapp
        
        
      5. 进入浏览器,输入地址: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"]
      
    • 创建镜像

      1. 安装Docker Desktop for windows.
        https://www.docker.com/products/docker-desktop
      2. 进入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
        
      3. CMD窗口进入工作目录,通过DockerFile创建镜像

        备注:因为我有缓存Aspnet3.1和sdk3.1,所以没有出现下载信息。
        D:docker>dir
        驱动器 D 中的卷是 Soft
        卷的序列号是 CC3B-E6AD
        
        D:docker 的目录
        
        2020/04/22  15:46    <DIR>          .
        2020/04/22  15:46    <DIR>          ..
        2020/04/22  13:08    <DIR>          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
        
        
    • 创建容器

      1. 先确认容器列表,然后使用镜像名称创建容器。

        -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
        
      2. 执行结果

        打开浏览器,输入地址:http://localhost:32771/

  • 相关阅读:
    边工作边刷题:70天一遍leetcode: day 85-2
    边工作边刷题:70天一遍leetcode: day 85-1
    边工作边刷题:70天一遍leetcode: day 85
    边工作边刷题:70天一遍leetcode: day 86-2
    边工作边刷题:70天一遍leetcode: day 86-1
    边工作边刷题:70天一遍leetcode: day 86
    边工作边刷题:70天一遍leetcode: day 87
    边工作边刷题:70天一遍leetcode: day 88
    边工作边刷题:70天一遍leetcode: day 101
    边工作边刷题:70天一遍leetcode: day 89-1
  • 原文地址:https://www.cnblogs.com/lixiaobin/p/dockerdescription.html
Copyright © 2011-2022 走看看