推荐一个国内的软件下载平台(使用百度云网盘下载):https://oomake.com/download/docker-windows
docker安装需要window server 2016以上。
window 2005更新http://blog.sina.com.cn/s/blog_a0c06a350102z0z7.html
直接windows update
docker安装:首先开启windows的hyper-v,然后直接点击下载的应用程序,启动时它会先检查你的windows系统是否满足条件,如果不满足,他会退出安装。如果满足,他会开始安装。【安装时请退出360等软件】,安装过程中会多次重启计算机。
安装完成后可用git bsah执行:$ docker run hello-world
结果如下:
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111122647402-1133605587.png)
写在前面的话:
实际上docker只能在linux系统下运行,Windows下运行必要要支持Hyper-v( 注:windows专业版本才有这个功能)。安装docker的时候会自动创建一个虚拟的linux系统,后续的其他操作实际上是间接使用这个虚拟系统进行的。
docker是什么?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
docker的应用场景:
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
docker架构:
- docker是典型的c/s架构【类似于网易云】,使用远程API来管理和创建Docker容器。
- Docker容器通过Docker镜像来创建
- 容器与镜像的关系类似于面向对象中的对象与类。
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111122919232-518392489.png)
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111122947550-1483607218.png)
daemon:守护进程
registries:注册处
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123017294-1016826482.png)
细细体味镜像于容器之间的关系。
对docker有个了解之后,开始实践了,实践出真知:
对于最早在git bash里运行的$ docker run hello-world是什么意思?
-docker允许你在容器里运行应用程序,使用docker run命令来在容器内运行一个应用程序。
也就是说这个命令是运行一个应用程序,这个应用程序名叫hello-world。我们详细看一个例子
例子:对下面这个命令进行解析:
docker run ubuntu:15.10 /bin/echo "Hello world" 【windos不可行】
各个参数解析:
- docker: Docker 的二进制执行文件。
- run:与前面的 docker 组合来运行一个容器。
- ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
类比于hello-world,在git bash中输出也可以看到,docker首先从本地主机上查找hello-world镜像是否存在,显然是不存在的,docker从镜像仓库里下载了公共的hello-world镜像,然后运行了这个镜像,最后输出结果为:Hello from Docker!
下面我们来学习一些命令:
- 查看本地有哪些镜像:
docker images
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123131361-88729022.png)
可以看到我们最开始下载的hello-world
- 查看当前正在运行的容器
docker ps
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123211184-721227844.png)
由于hello-world已经运行结束,所以当前没有可运行的容器了。docker ps -a查看所有运行的容器包括已经停止的。
- 查看某应用程序日志
我刚刚下载了最新的windows镜像,并执行了PowerShell
即:PS C:> docker run -it microsoft/windowsservercore powershell
docker帮我下载了最新的windows镜像,下载完后执行了powershell命令帮我启动了powershell命令行工具。我在它启动的命令行工具里输入:systeminfo 查看当前下载的windows镜像的系统信息。输出如下:
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123237547-1788300218.png)
好了,现在我们来查看一下该应用程序(windows)输出的日志信息:
首先我们看一下当前那些镜像在运行:docker ps -a 查看所有容器
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123311808-1549869916.png)
你可以看到之前的hello-world不过它的状态是exited,还有一个就是刚才我下载的window镜像。
- 查看某容器内部标准输出:
docker logs [ID或名字] || docker logs -f [ID或名字]
-f表示 像使用 tail -f 一样来输出容器内部的标准输出。
docker logs -f ce005d531a93
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123352371-1689981433.png)
可以看到日志里输出了容器内执行的情况,而且还有我输入的systeminfo命令
- 查看某容器内的进程
docker top [ID或名称]
如查看刚才windows容器里所有进程:docker top ce005d531a93
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123428177-163821742.png)
- 检查某应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
dockers inspect ce005d531a93
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123457254-1620427592.png)
- 停止、重启容器
-停止:docker stop [ID/NAME]
-重启:docker start [ID/NAME]
- 移除容器 docker rm [ID/NAME]
删除容器时,容器必须是停止状态,否则会报如下错误:
runoob@runoob:~$ docker rm wizardly_chandrasekhar Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove
比如我们移除hello-world容器
docker rm 377e748bef63 将返回移除容器的id
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123526707-77370395.png)
- 下载最新的镜像 docker pull [ID/NAME]
在执行该命令前,你首先要确保已经登陆你的docker hub账号和密码,你可以使用docker login命令在控制台进行登陆
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。类不类似于git命令 git clone,又像maven把仓库里的东西pull到本地。
- 查找镜像 docker search httpd
![](https://img2018.cnblogs.com/blog/1172834/201811/1172834-20181111123550513-1918643753.png)
-NAME:镜像仓库源的名称
-DESCRIPTION:镜像的描述
-OFFICIAL:是否docker官方发布
- 更新镜像
更新镜像之前,我们需要使用旧的镜像来创建一个容器。
$ docker run -t -i ubuntu:15.10 /bin/bash 返回容器ID:e218edb10161
在运行的容器内使用 apt-get update 命令进行更新。相当于$ docker run -t -i ubuntu:15.10 /bin/bash apt-get update
在完成操作之后,输入 exit命令来退出这个容器。
此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。
$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 f返回新镜像的ID:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
各个参数说明:
- -m:提交的描述信息
- -a:指定镜像作者
- e218edb10161:容器ID
- runoob/ubuntu:v2:指定要创建的目标镜像名
我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
- 构建镜像
比如说你新建了一个web工程,想以后不管在哪台机器上,只要这台机器运行了docker,就可以在这台机器上部署你的web工程,那么你首先要把你的web工程发布成镜像然后push到你自己的远程的镜像仓库,以后在其他地方用直接pull下来就可以用了。怎么构建镜像?
更多 正在学习中....
http://prostatecancer.ai/studylist
推荐学习网站:
![](https://img2020.cnblogs.com/blog/1172834/202009/1172834-20200924135543461-445977497.gif)