zoukankan      html  css  js  c++  java
  • Docker:四、Docker进阶 Windows Docker IIS 部署

    前面的三篇docker 文档大家看的肯定不过瘾,自己可能也已经上手一试了。。。不知道有没有发现问题。。。

    哈哈。。。

    我来说说我遇到的问题哦

    一、windows docker 镜像越来越大

    默认的docker 镜像全部下载到了C盘 C:ProgramDataDocker 中 ...  ,导致越来越大,最后c盘就爆了,我们需要切换下镜像保存位置

    docker desktop 的setting中设置data-root

    一旦切换了目录,原来存在镜像以及容器就不被检查出来了,都需要重新创建,所以在切换之前最好先删除原来下载好的镜像&容器;

    二、镜像下载速度问题

    前面文章提到过,通过使用网易等镜像服务地址可以加载下载速度;这里推荐另外一种更好的一种方式,使用 阿里云的镜像服务,从而使用自己的镜像加速地址

    1.访问地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    2.如果没有阿里云账号,自己注册登录即可

    3.然后开启镜像服务即可,就可以得到镜像加速地址

     4.docker desktop 中设置镜像地址

     然后你会发现下载,推送速度会变快,使用也会更加愉快哦。。。

    三、容器站点权限

      这个问题只是一个点,需要引入的是一个镜像中配置IIS的概念;我们系统的站点文件,在配置站点时会出现如下错误:

     有了这个错误,其实我们在windows中IIS可以通过如下方式设置,还是比较方便的

     

      docker中我们改如何配置呢?

      那就需要引入powershell命令,来操作IIS配置了,来看具体的命令;

    #引入IIS配置模块
    RUN Import-Module IISAdministration;      
    Import-Module WebAdministration;      
    #设置允许加载用户配置为true Set
    -ItemProperty -Path IIS:AppPoolsDefaultAppPool -Name "processModel.loadUserProfile" -Value true;

     将上诉命令直接放入dockerfile即可解决上诉问题。来完整看看dockerfile文件内容

    #引入运行环境
    FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
    SHELL ["powershell", "-command"]
    
    #引入IIS配置模块
    RUN Import-Module IISAdministration;      
    Import-Module WebAdministration;      
    Set-ItemProperty -Path IIS:AppPoolsDefaultAppPool -Name "processModel.loadUserProfile" -Value true;
    
    #复制站点文件
    WORKDIR /inetpub/wwwroot
    COPY Publish/. ./

     解读下上面的dockerfile,上诉的dockerfile还是比较简单的,后续系列会慢慢完善和补充这些内容;

     1.引入镜像文件,aspnet:4.8

     2.SHELL ["powershell", "-command"]

        SHELL用于设置执行命令(shell式)所使用的的默认 shell 类型:

        SHELL在Windows环境下,Windows 下通常会有 cmd 和 powershell 两种 shell,可能还会有 sh。这时就可以通过 SHELL 来指定所使用的 shell 类型:

     3.引入IIS配置模块,设置允许加载用户配置

     4.复制站点文件到容器内

     补充说明下,dockerfile就在Publish的同级目录下

     四、dockerfile常见指令

    1.FROM:指定base镜像,如果本地不存在会从远程仓库下载
    2.MAINTAINER:设置镜像的作者,比如用户邮箱等
    3.COPY:把文件从build context复制到镜像,支持两种形式:COPY src dest 和 COPY [“src”, “dest”],src必须指定build context中的文件或目录
    4.ADD:用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,也可以自动下载URL并拷贝到镜像:ADD html.tar /var/www ADD http://ip/html.tar /var/www
    5.ENV:设置环境变量,变量可以被后续的指令使用:ENV HOSTNAME sevrer1.example.com
    6.EXPOSE:如果容器中运行应用服务,可以把服务端口暴露出去:,EXPOSE 80
    7.VOLUME:申明数据卷,通常指定的是应用的数据挂在点:VOLUME ["/var/www/html"]
    8.WORKDIR:为RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当前工作目录,如果目录不存在会自动创建。
    9.RUN:在容器中运行命令并创建新的镜像层,常用于安装软件包:RUN yum install -y vim
    10.CMD 与 ENTRYPOINT:这两个指令都是用于设置容器启动后执行的命令,但CMD会被docker run后面的命令行覆盖,而ENTRYPOINT不会被忽略,一定会被执行。docker run后面的参数可以传递给ENTRYPOINT指令当作参数。Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效

    五、windows对docker支持

     众所周知,docker基于linux内核,其实时不支持windows系统,两者内核差距太大,那windows又是如何支持docker的呢?虚拟机技术来实现,将docker运行于linux虚拟机中

     在linux下面安装docker和在windows下面安装docker概念有所不同。通常来讲,linux下面安装docker,你的机器既是localhost,同时也是docker主机。
    Docker的客户端,docker守候进程和容器都是直接运行在你的localhost机器上面的。因为是在一台机器上,所以你可以使用localhost为你的docker容器做端口映射,比如:localhost:8000或者0.0.0.0:8000 在window下面安装docker,docker的守候进程和容器是运行在linux虚拟机里面,docker命令则是运行在windows系统里面。
    Docker主机的地址是linux虚拟机的地址,它被启动的时候,会分到一个ip地址。当你启动一个容器的时候,容器的端口号会映射到虚拟机的一个端口号

            那虚拟机的技术就很多了,可以自己选择来使用了;

    1. Docker desktop for windows

    2. Microsoft store app来安装linux子系统

    3. Hyper-V创建虚拟机来安装docker

        这段内容也是网上学习到的,只是符合我的理解想法,希望大家来交流;

        后续:

         后面本系列的内容会围绕windows docker进阶来展开,一些深入的应用方式;另外一个方向就是.net core部署到docker上,也是后续的重点,让.net跨平台容器部署;

  • 相关阅读:
    Help-IntelliJIDEA-2019.3.4-基础设置:6. 开启自动编译
    Help-IntelliJIDEA-2019.3.4-基础设置:5.Tomcat Server
    Help-IntelliJIDEA-2019.3.4-基础设置:4.自动导包和智能移除 (默认配置)
    Help-IntelliJIDEA-2019.3.4-基础设置:3. 版本控制Git
    Help-IntelliJIDEA-2019.3.4-基础设置:2. 全局Maven(默认配置)
    Help-IntelliJIDEA-2019.3.4-基础设置:1. 全局JDK(默认配置)
    Help-IntelliJIDEA-2019.3.4:IntelliJ IDEA 使用教程
    汉语-词语:笃行
    去除某个元素的属性
    select选中
  • 原文地址:https://www.cnblogs.com/tiaoshuidenong/p/13713662.html
Copyright © 2011-2022 走看看