zoukankan      html  css  js  c++  java
  • Docker使用笔记

    本篇将记录使用docker的过程以及感想。

    docker这个工具是属于运维布署的范畴,与程序开发,其实并没有多大的关系。在此,不妨讨论一下,程序开发与运维。如果一个程序员他所负责的工作只是软件开发,其实并不需要太过于关注运维。如果有面试官问你,你写了这么多年的代码,难道不知道什么叫做负载均衡吗?其实这可能是一句试探性的问题:看你能不能界清程序开发与运维的关系。大部分的应用程序开发人员,可能真的从没有写过这类的代码,也不用在写代码的过程考虑所开发的这个APP能否支持负载均衡,但却需要考虑是否支持高并发量等性能问题。说到这里,读者自辨,是否有继续阅读下去的必要。然而开发人员是不得不接触到一些运维的基本知识的,简单有如IIS,即便VS自带有IIS Express,大部分的.net开发人员还是有过使用Windows IIS 的经验,使用 Ctrl+Alt+P 附加进程 进行调试,因为这相对来说更能贴进生产环境。

    下面,我们先举一个最简单的.net core web布署的例子,后面我们要做的事情如下:

    1  安装.netcore sdk, nginx, supervisor, 或者 Jexus 这些基本的东西,安装完要改配置,配置完要重启检查是否生效。

    2. 上传web应用文件

    3. 修改nginx, 重启nginx

    4. 修改supervisor, 重启supervisor

    也许有人说这看起来好像是很简单的几步,但如果遇到下面的情况,运维人员可能会开始变得浮躁:

    1. 要在多台服务器上一起布署这个应用;

    2. 要布署一套开发环境,一套测试环境,一套售前沙箱环境,一套预生产环境;

    如果都按上面几个步骤一个个去做,估计在做第三第四个的时候,就开始在怀疑的人生的意义何在了。

    有需求就有供应,docker应运而生,尽管docker的强大之处不仅仅在于解决以上问题,但它确实解决以上问题的好工具。

    docker是如何解决以上问题的,在贴命令之前,我还是先讲讲吧(命令、代码,链接谁都会贴,但不是谁都愿意讲个所以然)

    1. 我们在一台机器上将web应用程序组装成一个组件,这个组件包含了一个应用程序运行环境的所有必要条件,以及这个应用程序本身的目录文件,就像一个房车,开到荒山野岭也能过夜。

    2. 当我们要运行这个应用程序,我们要在服务器上开辟一个空间,以运行这个组件,那么接下来,是不是要把组件拷贝到这个空间里面,然后运行它。这个问题是docker一个关键点所在。当然不需要。

    Docker将这个组件制作成一个镜像。当我们需要运行一个应用程序时,通过这个镜像去创造一个容器。这就有如面向对象开发语言中的类和实例,这个类的定义非常的丰富,里面包含了一个应用程序运行时的所有必要条件的定义。

    我们知道实例化一个类的时候,是可以通过构造函数传参的,我们可以通过不同传参,去创建不同的运行容器,比如上述的开发环境,测试环境。

    3. 当我们需要将这个web应用程序安装到另一台服务器的时候,又该如何?是不是上述12再搞一次,当然不行。我们需要将第一台机器的镜像共享出去,以让第二台机器可以通过第一台机器的镜像,去创建新的容器。

    如何做:在第一台机器或者新开一台机器,用于创建镜像仓储,故名思义,这个仓储是用于存放镜像的仓库。将镜像上传至仓储之后,其实机器可以到这里来下载镜像,然后实例化运行容器。

    以上便是用docker进行分布式发布应用的基本过程,可以快速地发布多环境,多站点。

    接下来,我开始复制粘帖命令,贴链接,我用是的ubuntu 16.04

    一、在第一台机器 192.168.40.128,用于制作一个镜像:

    1. 安装docker,详见https://docs.docker.com/install/linux/docker-ce/ubuntu/

    配置docker加速器 

      # vim /etc/docker/daemon.json

    {

    "registry-mirrors": ["https://d8b3zdiw.mirror.aliyuncs.com"]

    }  

      然后重启docker服务

      # systemctl daemon-reload

      # systemctl restart docker

    2. 上传应用程序文件到服务器上

      

    3. 拉取dotnet/aspnetcore的最新镜像,这里以aspnetcore 2.0为例

    # docker pull microsoft/aspnetcore:2.0

     4. 在这个目录创建一个文件 Dockerfile

    里面内容:

    
    

    # 父镜像
    FROM microsoft/aspnetcore:2.0

    
    

    # 设置工作目录
    WORKDIR /app

    
    

    # 复制发布文件到/app下
    COPY . /app

    
    #设置Docker容器对外暴露的端口
    EXPOSE 80

    #容器中使用 ["dotnet","系统启动的dll"] 来运行应用程序
    #使用ENTRYPOINT [
    "dotnet","系统启动的dll"]
    #或使用 CMD [
    "dotnet","系统启动的dll"]
    ENTRYPOINT [
    "dotnet", "DockerTest.dll"]

     5. 打包镜像

    # docker build -t dnappbox:1.0 .

    6. 打包完看一下

    # docker images

    7. 运行

    #docker run -d -p 8081:80 --name dnapp1 dnappbox:1.0

    8. 停止运行容器  --要先查看容器ID(#docker ps -a)

    #docker stop {containerId}

    9. 删除容器

    #docker rm {containerId}

    10. 删除镜像

    #docker rmi {imageId}  --要先查到镜像ID;

    11.删除镜像时,如果镜像被多个Repository所引用:

    #docker rmi {repository}:{tag}

    二、在第一台机器 192.168.40.128,创建一个镜像仓储

    1. 下载Registry镜像并启动

    #docker pull registry

    2. 运行一个Registry镜像仓库的容器实例

    #docker run -d -v /edc/images/registry:/var/lib/registry -p 5000:5000 --restart=always --name xdp-registry registry

    3. 最后,在客户端查看镜像仓库中的所有镜像

    curl http://192.168.40.128:5000/v2/_catalog

    报错:error: Get https://192.168.40.128:5000/v2/_ping: http: server gave HTTP response to HTTPS client.

    解决:# vim /etc/docker/daemon.json

      加上下面这一句:

    { 
        "insecure-registries" : [ "192.168.40.128:5000" ] 
    }

    重新启动docker服务:# systemctl restart docker

    4. 上传镜像到仓储

    a.为要上传的镜像打Tag  

    #docker tag dnappbox:1.0 192.168.40.128:5000/dnappbox:1.0

    b.上传镜像

    #docker push 192.168.40.128::5000/dnappbox:1.0

    5. 查看镜像

    # docker images

    三、 在第二台机器 192.168.40.129上传下载镜像,并运行之

    1. 前提是这台机子也要安装docker服务

    2. 下载镜像

    docker pull 192.168.40.128:5000/dnappbox:1.0

    3. 查看镜像

    # docker images

    4. 运行下载下来的镜像

    #docker run -d -p 8011:80 --name dnappbox2 192.168.40.128:5000/dnappbox:1.0

    5. 查看下本机所以镜像,以及镜像的容器的总体情况

    #docker ps -a

    以上记录了从一台机器生成镜像,上传至仓储,并在另一台机器下载镜像,然后运行一系列的具体步骤。

  • 相关阅读:
    hdu 1151
    DAG的最小路径覆盖和二分图的最大匹配
    二部图 最小点覆盖集与最大匹配的关系
    sdut 2151
    sdut Emergency
    作业
    Node.prototype.contains
    微博登录
    markdown
    Object.observe
  • 原文地址:https://www.cnblogs.com/wikiz/p/11685884.html
Copyright © 2011-2022 走看看