Docker 是一种开源项目,用于将应用程序自动部署为可在云或本地运行的便携式独立容器。 Docker 也是一家公司,它与云、Linux 和 Windows 供应商(包括 Microsoft)协作,致力于推广和发展这项技术。 图 2-2。 Docker 在混合云的所有层部署容器 Docker 映像容器可以在 Linux 和 Windows 上本机运行。 但是,Windows 映像仅能在 Windows 主机上运行,Linux 映像可以在 Linux 主机和 Windows 主机上运行(到目前为止,使用 Hyper-V Linux VM),其中主机是指服务器或 VM。 开发人员可以在 Windows、Linux 或 macOS 上使用开发环境。 在开发计算机上,开发人员运行部署了 Docker 映像(包括应用及其依赖项)的 Docker 主机。 在 Linux 或 Mac 上进行开发的开发人员使用基于 Linux 的 Docker 主机,并且他们可以仅为 Linux 容器创建映像。 (在 Mac 上进行开发的开发人员可以从 macOS 中编辑代码或运行 Docker CLI,但截至撰写本文时,容器不在 macOS 上直接运行。)在 Windows 上进行开发的开发人员可以为 Linux 或 Windows 容器创建映像。 为了在开发环境中承载容器,并提供其他开发人员工具,Docker 为 Windows 或 macOS 提供了 Docker 社区版 (CE)。 这些产品安装了承载容器所需的 VM(Docker 主机)。 Docker 还提供 Docker 企业版 (EE),该版本专为企业开发而设计,供生成、交付和在生产中运行大型业务关键型应用程序的 IT 团队使用。 若要运行 Windows 容器,有两种类型的运行时可供使用: Windows Server 容器通过进程和命名空间隔离技术提供应用程序隔离。 Windows Server 容器与容器主机和主机上运行的所有容器共享内核。 Hyper-V 容器通过在高度优化的虚拟机中运行各容器来扩展 Windows Server 容器提供的隔离。 在此配置中,容器主机的内核不与 Hyper-V […]
View Details容器化是软件开发的一种方法,通过该方法可将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像。 容器化应用程序可以作为一个单元进行测试,并可以作为容器映像实例部署到主机操作系统 (OS)。 就像船只、火车或卡车运输集装箱而不论其内部的货物一样,软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。 按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境。 容器还会在共享 OS 上将应用程序彼此隔离开。 容器化应用程序在容器主机上运行,而容器主机在 OS(Linux 或 Windows)上运行。因此,容器的占用比虚拟机 (VM) 映像小得多。 每个容器可以运行整个 Web 应用或服务,如图 2-1 所示。 在此示例中,Docker 主机是容器主机,而 App1、App2、Svc 1 和 Svc 2 是容器化应用程序或服务。 图 2-1. 在一个容器主机上运行多个容器 容器化的另一个优势在于可伸缩性。 通过为短期任务创建新容器,可以快速扩大。 从应用程序的角度来看,实例化映像(创建容器)类似于实例化 服务或 Web 应用等进程。 但出于可靠性考虑,在多个主机服务器上运行同一映像的多个实例时,通常要使每个容器(映像实例)在不同容错域中的不同主机服务器或 VM 中运行。 总而言之,容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控性。 最重要的优点是可在开发和运营之间提供隔离。 from:https://docs.microsoft.com/zh-cn/dotnet/standard/microservices-architecture/container-docker-introduction/index
View Details昨天,帅彬同学出现了一个疑难杂症,具体的可以大致描述成:Docker中的settings里的Shared Drives 选择对应盘符后,点击Apply后无法生效,没办法选择对应盘符进行分享。 解决办法:win+R ,键入gpedit.msc,出现如下界面,找到高亮处的网络访问:本地账户的共享和安全模型,选择如图中的 经典 选项。即可。 原因分析: 由上图可以看出,大致是用户的权限问题导致。 from:https://blog.csdn.net/u012680857/article/details/77970351
View Detailsdocker inspect ––format {{.NetworkSettings.IPAddress}} stupefied_turing
View Details除了云主机,不少应用也部署在容器里面。容器云服务也是现在云服务商的主要业务,阿里云、腾讯云等都会提供相应的容器服务。那么,我们为什么需要容器呢? 我们经常会遇到这样的问题: 1 程序在我这儿跑得好好的,怎么到你那里就不行了? 2 系统好卡,是哪个进程把CPU给吃光了? 3 这套系统我已经搭建好了,要不你再重新搭建一遍? 相信这些问题,大家平常都会遇到。容器技术是帮助我们解决这些问题的好办法。那么容器究竟是什么呢? 容器技术是这些问题的最佳解决方案 容器也是一种虚拟化技术,与虚拟机不同之处在于,虚拟机是硬件虚拟化(Hypervisor的作用),容器是对操作系统虚拟化。 虚拟机本身是不带有操作系统的,在虚拟机上部署应用时,还需要安装操作系统(一般是通过虚拟机镜像)以及其他需要的执行环境,如Tomcat等。 容器把应用以及应用的执行环境打包在一起。部署应用的时候,直接整个容器进行部署。因为容器自带应用执行环境,所以就不存在部署过程中由于环境变化,导致应用出现部署异常,可以说是“一次构建,到处执行”。 虚拟机 VS 容器 从头在虚拟机或物理机上搭建一遍环境,包括安装程序以及配置脚本,往往是非常麻烦的事情。相比于虚拟机(云主机),利用(云)容器来部署应用要更方便。 总结起来,容器有三大特点: 容器内部的东西是不可变的 相比虚拟机更轻量级,可以实现秒级启动,容器可以运行在物理机上,也可以在虚拟机上。 创建速度快,不需要复杂的环境配置 目前最常用的容器就是就是Docker,以至于大家一谈到容器,一般默认就认为是Docker。那么Docker技术与容器有什么关系呢? Docker究竟是什么? 容器技术其实已经出现十多年了,Linux2.6版本就已经支持LXC。而Docker技术的最早0.1版本直到2013年才出现,现在已经成为云计算领域一个非常常用的技术了。 Docker是以容器技术为核心的一套应用构建、部署和执行的技术体系。其中包括了Docker Daemon守护进程、Docker Container容器、Docker Client客户端以及Docker Image镜像等。 Docker守护进程本身就是一个普通的应用进程,不过是用来操作Docker镜像文件的。Docker守护进程与镜像文件一起就组成了Docker容器。 Docker容器、守护进程与镜像的关系 那这个Docker镜像文件(Docker File)里面有什么呢?Docker镜像和虚拟机快照(镜像文件)类似,分不同的层级,比如有基础镜像,仅仅包含操作系统,比如CentOS镜像;有中间件镜像,比如redis数据库镜像;还有应用镜像,就是指含有具体的应用服务的镜像了。 Docker如何部署应用 当我们需要部署应用的时候,可以从镜像中创建容器,这如同从快照中创建虚拟机,不过更轻量,启动更快,秒启。 应用是在容器中运行的。比如我们要通过容器部署一个应用: 首先下载了一个Ubuntu的镜像; 然后又安装mysql和Django应用及其依赖,来完成对它Ubutun镜像的修改; 最后通过这个镜像生成一个容器; 容器启动之后就会运行Django服务了。 容器不是完全封闭的,也需要对外提供服务,所以Docker允许公开容器的特定端口。 在启动Docker的时候,我们就可以将容器的特定端口映射到宿主机上面的任意一个端口。如果一个宿主机(虚拟机或物理机)上面要部署多个Docker容器,而且几个服务都需要80端口,那么容器的对外端口都是80,但是映射到宿主机上面就可以是任意端口,不会产生冲突。 基于Docker仓库的工作流程 Docker仓库(Registry)是用来存放Docker镜像的地方。仓库存在公有和私有之分,公有仓库docker hub提供了非常多的镜像文件,这些镜像直接拉取下来就可以运行了。 我们也可以上传自己的镜像到docker hub上,同时也可以自己搭建私有仓库用于团队项目管理。 基于Docker仓库的开发运维工作流程 基于Docker仓库,整个开发团队的DevOp工作流程大致是这样的: 开发人员构建镜像并将镜像提交到Docker仓库; 测试人员从Docker仓库拷贝镜像到测试环境进行测试; 运维人员从Docker仓库拷贝镜像部署到生产环境,通过镜像开启容器并对外提供服务 from:http://baijiahao.baidu.com/s?id=1588183340989045106&wfr=spider&for=pc
View Details在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法。 进入Docker容器比较常见的几种做法如下: 使用docker attach 使用SSH 使用nsenter 使用exec 一、使用docker attach进入Docker容器 Docker提供了attach命令来进入Docker容器。 接下来我们创建一个守护态的Docker容器,然后使用docker attach命令进入该容器。 $ sudo docker run -itd ubuntu:14.04 /bin/bash 然后我们使用docker ps查看到该容器信息,接下来就使用docker attach进入该容器 $ sudo docker attach 44fc0f0582d9 可以看到我们已经进入到该容器中了。 但在,使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。 因为这个原因,所以docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。 二、使用SSH进入Docker容器 在生产环境中排除了使用docker attach命令进入容器之后,相信大家第一个想到的就是ssh。在镜像(或容器)中安装SSH Server,这样就能保证多人进入 容器且相互之间不受干扰了,相信大家在当前的生产环境中(没有使用Docker的情况)也是这样做的。但是使用了Docker容器之后不建议使用ssh进入到Docker容 器内。关于为什么不建议使用,请参考如下文章: 为什么不需要在 Docker 容器中运行 sshd 三、使用nsenter进入Docker容器 在上面两种方式都不适合的情况下,还有一种比较方便的方法,即使用nsenter进入Docker容器。关于什么是nsenter请参考如下文章: https://github.com/jpetazzo/nsenter 在了解了什么是nsenter之后,系统默认将我们需要的nsenter安装到主机中 如果没有安装的话,按下面步骤安装即可(注意是主机而非容器或镜像) 具体的安装命令如下: $ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz $ tar -xzvf util-linux-2.24.tar.gz $ cd util-linux-2.24/ $ ./configure --without-ncurses $ make nsenter $ sudo cp nsenter /usr/local/bin 安装好nsenter之后可以查看一下该命令的使用。 nsenter可以访问另一个进程的名称空间。所以为了连接到某个容器我们还需要获取该容器的第一个进程的PID。可以使用docker inspect命令来拿到该PID。 docker inspect命令使用如下: $ sudo docker inspect --help inspect命令可以分层级显示一个镜像或容器的信息。比如我们当前有一个正在运行的容器 可以使用docker inspect来查看该容器的详细信息。 $ sudo docker inspect 44fc0f0582d9 由其该信息非常多,此处只截取了其中一部分进行展示。如果要显示该容器第一个进行的PID可以使用如下方式 $ sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9 在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了。 $ sudo nsenter --target 3326 --mount --uts --ipc --net --pid $ sudo nsenter --target 3326 --mount --uts --ipc --net --pid 其中的3326即刚才拿到的进程的PID 当然,如果你认为每次都输入那么多参数太麻烦的话,网上也有许多做好的脚本供大家使用。 地址如下: http://yeasy.gitbooks.io/docker_practice/content/container/enter.html http://www.tuicool.com/articles/eYnUBrR 四、使用docker exec进入Docker容器 除了上面几种做法之外,docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用: $ sudo docker exec --help 接下来我们使用该命令进入一个已经在运行的容器 $ sudo docker ps $ sudo docker exec -it 775c7c9ee1e1 /bin/bash from:https://www.cnblogs.com/xhyan/p/6593075.html
View Details在 Windows 容器中运行现有的 .NET Framework 应用程序不需要对应用程序进行任何更改。 若要在 Windows 容器中运行应用程序,请创建包含应用程序的 Docker 映像,然后启动容器。 本主题介绍了如何获取现有的 ASP.NET MVC 应用程序,并在 Windows 容器中进行部署。 从现有的 ASP.NET MVC 应用程序入手,然后使用 Visual Studio 生成已发布的资产。 使用 Docker 创建包含并运行应用程序的映像。 转到在 Windows 容器中运行的网站,验证应用程序是否正常运行。 本文可确保基本了解 Docker。 若要了解 Docker,请参阅 Docker 概述。 在容器中运行的应用程序是一个随机回答问题的简单网站。 此应用程序是一款不具备身份验证或数据库存储的基本 MVC 应用程序,让你可以专心处理将 Web 层移到容器中。 后续主题将演示如何在容器化应用程序中移动和管理永久性存储。 移动应用程序涉及以下步骤: 创建发布任务以生成映像资产。 生成将运行应用程序的 Docker 映像。 启动用于运行映像的 Docker 容器。 使用浏览器验证应用程序。 完成的应用程序位于 GitHub 上。 系统必备 开发计算机必须运行 Windows 10 周年更新(或更高版本)或 Windows Server 2016(或更高版本)。 用于 Windows 的 Docker – 稳定版 1.13.0 或 1.12 beta 版本 26(或更高版本) Visual Studio 2017。 重要 如果使用的是 Windows Server 2016,请按容器主机部署 – Windows Server 中的说明操作。 安装并启动 Docker 后,右键单击托盘图标,然后选择“切换到 Windows 容器”。 必须先这样做,才能在 Windows 上运行 Docker 映像。 此命令需要几秒钟执行: 发布脚本 将需要加载到 Docker 映像中的所有资产都汇集到一处。 可以使用 […]
View DetailsCentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下 1、直接关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2、设置 iptables service yum -y install iptables-services 如果要修改防火墙配置,如增加防火墙端口3306 vi /etc/sysconfig/iptables 增加规则 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 保存退出后 systemctl restart iptables.service #重启防火墙使配置生效 systemctl enable iptables.service #设置防火墙开机启动 最后重启系统使设置生效即可。 from:http://www.cnblogs.com/silent2012/archive/2015/07/28/4682770.html
View Details1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: docker rm $(docker ps -a -q) 2.查看当前有些什么images docker images 3.删除images,通过image的id来指定删除谁 docker rmi <image id> 想要删除untagged images,也就是那些id为<None>的image的话可以用 docker rmi $(docker images | grep "^<none>" | awk "{print $3}") 要删除全部image的话 docker rmi $(docker images -q) from:http://www.cnblogs.com/q4486233/p/6482711.html
View Detailsdotnet的镜像:https://hub.docker.com/r/microsoft/dotnet/,如下图: 下面就演示一下怎么跑一下示例程序,用意是抛砖引玉。 1.首先拉一下镜像:docker pull microsoft/dotnet;命令在仓库首页的右上角。下载慢的同学可以使用阿里的加速器。 2.用官方的例子创建镜像:
1 2 3 4 5 6 7 |
docker run -p 8000:80 -e "ASPNETCORE_URLS=http://+:80" -it --rm microsoft/dotnet [now in the container] mkdir app cd app dotnet new mvc dotnet restore dotnet run |
退出容器用exit命令。以上命令创建的是一个临时镜像,当然你想创建持久化的镜像可以把“--rm”删除。 3.运行过以上命令,这时访问宿主的8000端口就可以访问Asp.Net Core的示例网站了;结果如图:
View Details