zoukankan      html  css  js  c++  java
  • Docker基础

    Docker基础入门及示例

     

      Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环境部署当中。这篇文章我将针对以下几个方面简单介绍:

    1. docker的基础介绍

    2. docker在windows下的安装配置

    3. 基础命令介绍

    4. 使用vs2017在docker下调试

    5. 打包一个.net core站点镜像

    一. docker基础介绍

      可能很多朋友对docker还停留在听说过,并没有认真关注了解过,这里简单介绍下其基础部分知识。如有不足,欢迎指正!

      1. docker介绍

      很多同学有一个先入为主的概念,docker是一个轻量级容器。所以这里先普及一下,docker本身并不是一个容器,而是一个管理容器的引擎工具。它包含一个服务端和客户端,服务端是一个管理着所有容器和文件系统的服务进程,客户端则是一个服务端的控制器,用来控制docker的服务端进程。至于容器,主要指的是包含了一些特定应用的运行实例,既保证了当前应用的运行环境独立,又能保证容器相互之间的独立。

      一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发者,我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。

      Docker提供了一套虚拟化和文件系统的支持,可以让专业人员自由组装需要的运行环境到容器中,并提供容器运行时的隔离。就像一个大型油轮,承载着一个个集装箱,每个集装箱我们可以理解为我们的容器,这个容器中的内容完全由组装人员自定义。

      2. docker基础概念

      docker本身是一个容器运行载体,一个容器的运行,需要正确的理解仓储,镜像,和容器这几个概念。 如上介绍,容器一个运行实例,那么当前实例是如何部署的,就明白的镜像的意义了。镜像就是一个已经打包好的可交付的运行环境,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。

      3. docker基础使用

      以web应为为例,我们开发完成之后,将应用打包成镜像,发布到自己的仓储服务器或者直接上传到服务器中,服务器拉取或者加载镜像,设置对应的端口映射并启动容器。如果我们存在多个web容器,也可以通过negix在前方负载代理。在后边我会通过一个.net core站点做一个简单的示例。当然也有很多持续集成方案,比如代码提交之后自动生成镜像,部署,这里就先不做介绍了。

    二. docker在windows下的安装和配置

      这里我介绍下在windows中安装Docker以及相关的配置信息。当前Docker for Windows会默认包含两个引擎containers(linux和windows)

      1. 下载Docker for Windows,https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows

      2.  查看下是否开启了Hyper-V功能,如果没有可以在“启用或关闭windows功能” 中添加Hyper-V 功能,当然你也可以不用关心,docker安装过程中也会检查,如果没有则默认添加启动,不过可以趁着等待下载docker的时间直接把这步做了,安装Hyper-V之后可能需要重启系统。

      3.  安装完成之后,你可以查看Hyper-V管理器,如果安装正常,会如下默认创建一个linux虚拟机:

    我们也可以通过PowerShell查看Docker版本:

      安装成功之后我们就可以对其进行相应的设置

      1. 右击小鲸鱼图标(这里我直接找的网上的图),点击Settings

     

      2. 设置界面如下,其中Shared Drives 可以设置我们的对应映射驱动盘,保证C盘选中,再选中你应用所在盘符。Advanced选项中你可以设置docker对应的CPU,内存占用资源。Netword主要是当前的Docker IP信息。Proxies可以设置对应的代理信息。Daemon 主要是设置对应的仓储和对应的仓储镜像站点(和docker镜像区分开,这个是仓储对应的镜像,因为访问国外站点过慢,可以设置国内的镜像代理站点)。

     这里特别强调一下,因为访问Docker官网仓储站点拉取镜像过慢,请自行购买VPN服务,或者查找仓储代理站点,国内的网易,DaoCloud都有对应的免费加速器,这里是我的设置:

      

      3. 上边说了,Docker for Windows 提供了两个引擎,我们可以通过右键菜单中的 Switch to Windows Containers 功能进行切换。

      4.  同时Docker for Windows 提供了容器的界面管理工具,可以通过右键菜单中的 Kitematic 功能进入,第一次可能提示你需要下载安装,其界面如下:

    三. Docker的基础命令

      安装设置完成之后我们可以通过以下命令来进行操作docker了,我这里主要是在PowerShell中进行,也可以通过命令行cmd进行

      1. docker pull: 从仓库中拖镜像

      2. docker run:运行容器,如果当前要运行的容器对应镜像不存在,会自动拉取。例如:docker run hello-world

      3.docker stop:停止容器运行
      4.docker start:开始容器运行
      5.docker commit:提交容器到镜像
      6.docker images: 查看当前有的镜像

      7.docker ps:查看当前启动的容器

      8. docker build : 创建镜像

      9. docker load : 加载镜像

    上边这几个是docker的主要命令,先行解释一下,后边我们会用到。

    四.使用vs2017在docker下调试

    这里我以一个.net core 站点示例,启用2017中的docker调试功能,如果是已经存在的项目,右键=》添加=》增加Docker支持即可

    1.  新建websample站点

    2. dockerfile 文件介绍

      当项目创建完成,在项目文件中你可以看到一个dockerfile文件,内容如下:

    这个文件就是docker打包时需要的一个docker命令文件,vs中内部整合docker-compose和docker命令,完成了镜像生成和容器的创建

    你会发现调试模块已经是docker了,如果想回到正常以前的项目,删除解决方案下自动生成的 docker-compose 项目即可。

    我们启动调试,这个时候如果我们打开 Kitematic 会发现我们的websample容器已经创建了,并且自动添加了dev的标签,如下图:

    五. 打包一个.net core站点镜像

      这里我使用刚才创建的.net core站点,演示一下我们完成站点开发之后,不使用vs的情况,如何通过命令完成一个镜像的打包。

      1. 发布刚才的站点到指定文件夹下

      2. 进入发布后的文件夹,修改docker文件

      查看docker文件是否存在,如果不存在直接把项目中的复制过来,并修改内容如下

    FROM microsoft/aspnetcore:1.0

    WORKDIR /app
    COPY . /app 
    EXPOSE 80

    ENTRYPOINT ["dotnet", "websample.dll"]

          a.  使用microsoft/aspnetcore 作为基础镜像

      b. 制定容器的工作目录

      c. 复制当前项目文件到容器的app目录下

      d. 设置容器对外暴露80端口

      e. 启动命令,执行websample.dll 

      3. 构建镜像 

        进入文件目录,执行命令 docker build -t websample:latest .   (后边的点是需要的

       4. 运行当前镜像

      镜像创建完成之后,我们就可以通过镜像创建对应的运行容器了, 执行如下命令: docker run -it -p 8000:80 websample:latest

     

    可以看到我们的容器已经运行起来了,我们访问 127.0.0.1:8000

     

    至此,我们已经尝试了docker的基础功能,希望本文能够对你有所帮助。

    同时,我最近正在开发OSS系列开源项目,现在已有OSS.Common,OSS.HttpOSS.Social 和 OSS.PayCenter 几个项目

  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/6557813.html
Copyright © 2011-2022 走看看