环境准备
系统版本
64位Windows 10 Pro,专业版、企业版和教育版(1607纪念更新,版本14393或更高版本)上
如果版本不满足请安装Docker Toolbox,自行网上百度http://blog.youkuaiyun.com/tina_ttl/article/details/51372604
开启虚拟化(VT)
进入任务管理器(ctrl+alt+delete),点击性能->cpu ,查看虚拟化是否已启用,如果虚拟化是已禁用,那么你需要重启电脑进入bios开启虚拟化(自行百度自己电脑开启虚拟化方法)
启用Hyper-V功能
进入电脑的控制面板->程序->启用或关闭Windows功能->把Hyper-v勾上,启用后电脑会重启,后面就可以下载并安装Docker for Windows
下载 Docker-for-windows
推荐下稳定版
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
下载完成后,直接点击安装就可以,安装成功后右下角任务栏会有一个小鲸鱼的图标
检查是否成功
- 检查Docker,Compose的版本
- 检查版本信息,并确保docker命令正常工作
docker ps
docker version
docker info
配置Docker
切换国内镜像
右键点击鲸鱼图标,选择Setting菜单,打开docker配置页面,选择Docker Engine,将内容替换成下面的:
{ "registry-mirrors": [ "https://dockerhub.azk8s.cn", "https://reg-mirror.qiniu.com", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ], "insecure-registries": [], "debug": true, "experimental": false }
点击右下角“Apply& Restart” 按钮应用并重启
国内镜像替换完成了
存储位置
修改默认Docker镜像和虚拟机位置,C盘空间大的可以忽略此步骤
在C盘下找到如下目录
C:\用户\计算机名\AppData\Local
会找到一个Docker文件夹
打开任务管理器,结束所有跟docker有关的进程
结束进程后,将Docker文件夹剪切到其他目录中
打开CMD,目录切换到“C:\用户\计算机名\AppData\Local”
然后使用软链的方式将文件夹连接到“C:\用户\计算机名\AppData\Local”下
mklink /j Docker F:\DEV_FILE\docker\Docker
成功后可以看到,文件夹下多了快捷方式的小箭头
Docker基础命令
容器(container)相关基础命令
docker run ubuntu:18.04 /bin/bash #使用对应image创建container,同时进入对应bash(加上-i指定伪终端 -t允许交互)
docker exec [:containerId] /bin/bash #进入对应容器的bash
docker pull training/webapp #载入image
docker run -d -P training/webapp python app.py #运行指定container
docker run -d -p [:主机端口(默认32768)]:[:指定映射(flask默认 5000)] training/webapp python app.py #外部主机指定
docker ps #查看已运行的container
docker ps -a #查看所有container
docker ps -l #查看最后一次运行的container
docker port [:id/:name] #查看对应id/name container的端口映射
docker logs -f [:id/name] #查看container内部标准输出
docker top [:id/:name] #查看container内部运行进程
docker inspect [:id/:name] #返回container内部状态
docker stop [:id/:name] #停止container运行
docker stop $(docker ps -a -q) #停止所有container运行
docker ps -q #列出所有container的id
docker start [:id/:name] #重启container,注意和run的区别。
docker rm [:id/:name] #删除container。删除container时,container必须是停止状态,否则会报错
docker rm $(docker ps -a -q) #删除所有container
镜像(image)相关基础命令
docker images #列出所有images
docker pull [:镜像名:版本号] #拉取镜像
docker search [:镜像名] #搜取镜像,例如httpd
docker run [:镜像名] #直接使用镜像
docker run -i -t ubuntu:18.04 /bin/bash #进入一个bash Docker参数 -i -t 的作用
docker commit -m="[:message]" -a="[:author]" [:dockerId] [package/dockerName:version] #提交容器副本
docker rmi [:imageId] #删除镜像
docker rmi $(docker images -q) #删除所有镜像
docker inspect [:containerId/:containerName] #查看dockerName对应信息
docker inspect -f '{{.Id}}' [:containerId/:containerName] #从信息JSON中取出Id
docker inspect $(docker inspect -f '{{.Id}}' containerName) #发现了docker可以像这样组合查询。
docker pull registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop # 一个可用的hadoop容器镜
例如: docker run -i -t --name Master -h Master -p 50070:50070 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
docker常用功能插件
- Docker Dockerfile (通过脚本文件快速构建镜像)
- Docker Compose (定义和运行多容器 Docker 应用程序的工具)
建议自行百度学习
使用示例
docker 部署nginx
1.拉取镜像
在拉取镜像之前我可以搜索一下镜像是否存在
$ docker search nginx
这里我们拉取官方的最新版本的镜像:
$ docker pull nginx:latest
查看本地镜像
$ docker images
在上图中可以看到我们已经安装了最新版本(latest)的 nginx 镜像。
2.运行容器
$ docker run --name nginx-test -p 8081:80 -d nginx
参数说明:
- --name nginx-test:容器名称。
- -p 8081:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
- -d: 设置容器在在后台运行。
- nginx: 使用nginx镜像
3.访问测试
最后我们可以通过浏览器可以直接访问 8080 端口的 nginx 服务:
其他配置,例如进入容器中调整nginx配置文件或者使用本地配置文件映射容器中文件,提高docker使用的便捷性,可自行百度
使用docker Compose部署jar启动项目
windows版docker自带docker compose 所以不用单独安装
编写docker-compose.yml文件
启动运行
$ docker-compose up -d
运行情况
以下使用docker for desktop查看,命令查看运行的方式,自行百度
右键小鲸鱼图标,选择Dashboard菜单
这时可以看到我们之前运行过的容器状态
通过右侧按钮我们可以进行操作
按钮依次是“在浏览器打开”、“进入容器控制台”、“停止容器运行”、“重启容器”、“删除容器”
点击容器,可以打开查看容器日志、运行参数、运行状态
docker run命令运行以及参数详解
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d, --detach=false 指定容器运行于前台还是后台,默认为false
-i, --interactive=false 打开STDIN,用于控制台交互
-t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
-u, --user="" 指定容器的用户
-a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="" 指定容器的工作目录
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] 指定环境变量,容器中可以使用该环境变量
-m, --memory="" 指定容器的内存上限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主机名
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[] 添加主机设备给容器,相当于设备直通
--dns=[] 指定容器的dns服务器
--dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="" 覆盖image的入口点
--env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
--expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
--link=[] 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge" 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no" 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
--rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理