学习docker on windows (1): 为什么要使用docker
为什么要用Docker?
如果我们想使用某种pc软件, 那么在互联网上查找并安装软件的流程大致如下图:

那么这就有几个问题要弄清楚:
- 从哪里获得软件
- App Store
- Linux的包管理
- 从某些网站直接下载
- 例如流行度, 下载次数, 存在的bug, 上次的更新时间等等.
- 信任问题
- 下载软件的网站是否为官方网站
- http 还是 https
- 代码
- 是否还可以下载
- 是否收费
软件是否提供了相关信息和数据
第一个令人困扰的问题: 安装软件
- 软件是否支持我的操作系统/版本
- 是否支持我的设备的CPU架构
- 软件的格式
- 有些是从源码进行安装
- 有些是单独的exe文件
- 有的是exe+dlls
- 有时候是exe+dlls+依赖某些运行时
- 软件的安装方式
- 有自带的安装器
- 使用包管理工具安装
- 手动安装
- 软件的更新和卸载
- 自动更新?
- 软件的配置(对于新手来说可能这就是个噩梦)
从上面这些问题可以看出, 现在这个年代, 安装个软件真是个挺麻烦的事, 尤其是用于开发相关的软件, 有时候让人头疼.
第二个问题: 软件的运行
这方面可能会存在以下问题:
- 是否有详细的帮助文档
- 软件在哪运行
- 是否需要手动修改系统某些设置
- 是否需要设置环境变量PATH
- 如何开始, 如何结束
- 是否需要注册服务
- 如何注册服务
- 是否需要手动编写服务配置
- 是否需要许可
- 如何安装和运行软件的依赖项
- 如果没找到依赖项会怎么处理
- 循环的依赖项
- 安全性, 沙箱运行?
- 破坏性更新
- 系统更新是否对软件有破坏性影响
- 共享的库有更新
什么是容器
Docker不是虚拟机的替代者, docker不是虚拟化技术, 它更多是关于软件的运行.
什么是容器,它和虚拟机有什么区别?
首先介绍一下虚拟机:

虚拟机管理其把服务器的硬件资源(CPU,内存,硬盘,网络等)切割成多个虚拟的版本, 然后基于这些虚拟的硬件建立操作系统.
虚拟机建立的系统就像是正常的系统服务一样.
与虚拟机管理器不同, Docker或者其他的容器引擎切割的是操作系统的资源, 例如进程的命名空间, 网络栈, 存储栈等等:

每个容器都有PID为1的进程, 每个容器也都有自己的根文件系统(windows的C盘, linux的/).
所以docker可以称作是对针对操作系统的虚拟化操作, 它非常的轻量级.
可以举一些例子, 安装 sql server, mysql, mongodb, postgresql 等, 下载, 安装, 配置. 有的还是挺麻烦的.
下面看看使用docker会怎么样, 首先需要安装docker.
安装Docker
Docker for windows 下载地址: https://store.docker.com/editions/community/docker-ce-desktop-windows
安装好docker后, 系统右下角托盘处会有docker的图标, 等到图标不再闪烁了, 说明docker已经启动成功了.
右键点击图标有Settings.
可以通过命令行看一下docker的状态:
docker version

可以看到client是windows, server是linux(系统需要启用Hyper-V)虚拟机.
从Hyper-V管理器可以看到这个linux虚拟机:

使用Docker的例子: Postgresql
首先去 https://hub.docker.com/ 这里查找需要使用的软件, 例如postgresql : https://hub.docker.com/_/postgres/

从页面可以看到 postgres是docker官方认可的库. 页面的下方有使用说明等.
首先别忘了运行docker.
然后从docker hub下载postgres这个软件(应该叫image), 命令行执行:
docker pull postgres
下载的过程有时候比较慢, 尤其是在国内 (如果速度实在太慢, 那么可以使用阿里云的容器镜像: https://dev.aliyun.com/search.html?spm=5176.1972343.0.1.340c5aaafU9rRJ):

等了一段时间之后, 下载完毕:

现在image已经下载了, 那么接下来就是需要通过某种方式运行这个image, 这就涉及到了container容器.
容器就像是一个已经安装好的软件, 它负责把这个image配置并安装好, 然后就可以运行这个安装好的postgresql了.
普通的软件安装好之后运行的是exe, 而这个运行的是容器, 容器里面是postgresql.
整个针对普通的软件安装的流程如下:

docker run 命令
docker run 这个命令会一次性执行上面整个流程.
注: 所有的docker命令都是以docker开头, 也就是调用docker程序. docker run xxx表示让docker运行某个image. 然后客户端就会通过API调用告诉服务端(Daemon守护进程, 它实现了Docker Remote Api或者叫Docker Engine Api). Daemon首先看看本地有没有这个image, 然后没找到这个image, 然后daemon就会从docker hub 拉取下来这个image到本地, 然后使用这个image来创建新的container.
下面执行docker run postgres:


可以看到postgresql已经运行起来了. 其内容和单独安装的postgresql运行起来是一样的.
使用 docker ps 命令查看正在运行的容器:

然后按照官方文档的命令使用psql去连接postgresql:

可以看到, 进入到psql环境了. 这个postgres和传统方式安装的postgresql功能是一样的.
写个postgresql命令试试:

docker exec 运行容器内的命令:
我电脑现在运行的是docker的linux容器, 所以可以使用这个命令运行一下linux的bash:

首先使用docker ps命令查看正在运行的容器, 然后使用docker exec -it 08 bash执行ID为08开头的容器内的bash命令. -it表示交互模式.
然后使用ps -e查看该容器内的linux的进程, 里面有bash, 刚才启动运行的psql, ps.
退出
在交互模式下使用exit命令进行退出:

停止运行容器则需要使用docker stop 容器ID这个命令:

以上这些就是使用docker的原因.......
学习docker on windows (1): 为什么要使用docker的更多相关文章
- Docker学习笔记之在 Windows 和 Mac 中使用 Docker
0x00 概述 对于开发来说,Windows 和 macOS 是更为常见和常用的系统,所以也很有必要了解在 Windows 和 macOS 中使用 Docker 的方法.很幸运的是,Docker 的官 ...
- Windows 10 安装 Docker for Windows
Docker for Windows是Docker社区版(CE)应用程序. Docker for Windows安装包包括在Windows系统上运行Docker所需的一切. 本主题介绍了预安装注意事项 ...
- Docker for windows on VMware
工作环境 操作系统:Windows 10 Pro x64 Hyper-V:已卸载. VMware:已安装. Virtual Box:无安装. 前言 鉴于Hyper-V在Windows桌面系统下的&qu ...
- .net core 2.x - docker(for windows)-linux配置及项目+SqlServer发布
将.net core2.x+sqlserver项目发布到docker.呵呵,操作很自如,如下. 1.罗嗦几句 在跑起来之前浪费了不少时间和精力,起初是将docker for windows的环境转换成 ...
- Docker for Windows 中文文档(3)——Docker Settings
Docker设置 Docker运行时,显示Docker鲸鱼. 默认情况下,Docker鲸鱼图标被放置在“通知”区域中. 如果隐藏,单击任务栏上的向上箭头显示. 提示:您可以将鲸鱼固定在通知框外面,使其 ...
- 使用Docker for Windows初体验
https://www.baidu.com/link?url=61Kwadwh6h__2Vmjf7lAKVo1RjhsULAqERcMXYnYzkLKrRVpygwBJVnjultH8zbq& ...
- Kitematic - VirtualBox is not installed. Docker for windows 10
Kitematic - VirtualBox is not installed. Docker for windows 10 https://github.com/docker/kitematic/i ...
- 容器与Docker简介(二)什么是DOCKER——微软微服务电子书翻译系列
Docker是一个开源项目,用于将应用程序部署自动化,作为可在云端或本地运行的可移植,自包含的容器. Docker同时也是一家促进和发展这项技术的公司,与云,Linux以及Windows的供应商(包括 ...
- docker学习笔记:简单构建Dockerfile【Docker for Windows】
参考与入门推荐:https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html#autoid-0-0-9 最近学习docker,写一个简单构建Doc ...
随机推荐
- [国嵌攻略][103][Linux内核模块基础]
什么是内核模块 Linux内核的整体结构非常庞大,其中包含的组件也非常多,如何使用这些组件.一种方式是把所有的组件都编译进内核文件,即zImage或bzImage,但这样会导致一个问题,占用内存过多. ...
- 浅谈event.client、event.screen与event.offset
每每看到event.client.event.screen与event.offset这几个,头都大了,今天又碰到了,特来总结下. 1.event.screenX与event.screenY. 首先,e ...
- 算法-java代码实现插入排序
插入排序
- ADO.NET复习总结(4)--访问SqlServer的类
1.连接SqlConnection 2. 3.执行命令SqlCommand 4.数据读取SqlDataReader 注意: ExecuteNonQuery() :执行非查询(增删改) Execute ...
- 理解rem实现响应式布局原理及js动态计算rem
前言 移动端布局中,童鞋们会使用到rem作为css单位进行不同手机屏幕大小上的适配.那么来讲讲rem在其中起的作用和如何动态设置rem的值. 1.什么是rem rem是相对于根元素(html标签)的字 ...
- winform程序压缩文件上传,服务器端asp.net mvc进行接收解压
期间编程没什么难度,唯一可能忽略导致结果失败是asp.net mvc配置 对于压缩文件大的话,需要配置mvc的最大接收量: <system.web> <httpRuntime ma ...
- 在单体应用的一些DDD实践经验
阅读此文需要一定的DDD基础,如果你是第一次接触DDD读者,建议先去阅读一些DDD相关的书籍或者文章之后再来阅读本文. 背景 自从我在团队中推行DDD以来,我们团队经历了一系列的磨难--先是把核心项目 ...
- idea 远程调试 tomcat web应用
最近在做的一个东西,测试环境和本地环境差距太大,本地能运行的代码,放到测试环境上到处报错,哪里哪里都连不上,所以决定把代码部署到远程服务器上调试,节省时间. 网上看了很多教程,大部分都是互相抄来抄去, ...
- linux_ssh
什么是ssh? 配置文件位置:/etc/ssh/sshd_config 远程登录和为其他网络提供安全的加密数据传输协议,默认端口22,默认协议是SSH2 # 远程终端通过ssh连接服务器管理服务器 # ...
- VMware10不能安装64位(linux)系统,提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
今天下载VM10准备安装Ubuntu14.04,一如既往的进行安装,突然发现出现了问题:此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态,具体如图: 如图中提示可重启电脑进入B ...