Docker笔记-基本使用
Docker火了不知道多少年了吧,一直没去看看是个什么技术。前几天想搭建一个ceph学习环境,需要好几个机器,掏出了以前写的关于Vagrant的文章,看看怎么搞出几个虚拟机来。虽然已经比自己安装虚拟机然方便了,但是还是好麻烦,虚拟机都比较大,尤其是还需要翻墙。网上看到文章对比Vagrant和Docker,才让我意识到,原来Docker是一种更轻量的虚拟化技术,基于进程隔离,配置和使用都比虚拟机来得方便,启动快很多,而且Docker镜像比较小,便于安装。遂试试。
VAGRANT 和 Docker的使用场景和区别?
单纯的开发环境来说 Docker 和 Vagrant 该如何选择?
概念
什么是Docker?
Docker是一个可以让开发或运维在容器中开发,发布,运行应用的平台。Docker基于Linux containers技术。
容器和虚拟机的区别?
容器和虚拟机都是虚拟化技术,不过两者的虚拟层面是不一样的,可以看这张图:
容器直接运行在宿主操作系统上,各个容器共享操作系统中的资源。
虚拟机则是在操作系统上虚拟了一个模拟真实物理机的Hypervisor层,然后在上面运行GuestOS。这种虚拟得更加彻底,但是资源消耗和性能损耗较多。
安装Docker
在windows和mac上安转docker比较简单,安装包安装即可。
在Windows中安转Docker
之前Docker是不支持Windows的,所以之前的解决方案是在Windows上安装VirtualBox然后安转Docker。后来微软与Docker合作,让Docker支持了Windows,使用的技术是微软的Hyper-V。
首先要检测一下Windows版本,Docker支持的版本为64位的Windows 10 Pro,Enterprise和Education版本(1607 Anniversary Update, Build 14393 or later)。
启动过程中会体现你电脑还没开启Hyper-V是否开启。点击OK重启电脑开启。开启Hyper-V后,VirtualBox就无法运行了。
如果手上的Windows不满足的话,而已使用VirtualBox方案:Docker Toolbox
在Mac中安装Docker
Mac上是傻瓜化安装:Install Docker for Mac,下载后拖动安装即可。
然后点击Docker图标启动。
启动完成后在命令行中运行docker info
检测是否安装成功。
简单上手
1 | d:\>docker run hello-world |
整个过程就几秒钟时间。
下载ubuntu进行,启动并运行bash命令:
1 | d:\> docker run -it ubuntu bash |
从下载ubuntu镜像,到启动容器运行bash,整个过程就几分钟时间。
-it
是-i -t
的缩写。
-i
参数表示开启容器的STDIN
,否则我们无法向容器输入命令-t
参数表示为容器分配一个伪tty终端
要创建一个命令行下能交互的容器,-it
是最基本的参数了。
运行ps命令可以看docker中运行的程序:
1 | > docker ps |
执行exit可以退出bash,同时这个容器也退出了。
用docker运行nginx web server的例子:
1 | > docker run -d -p 80:80 --name webserver nginx |
-d
参数指定运行守护式容器。容器没有交互式回话,但是会在后台保持运行。非常适合运行后台程序和服务。
通过ps命令可以看到这个容器的端口映射:
1 | > docker ps |
停止服务:
1 | docker container stop webserver |
启动服务:
1 | docker start webserver |
Docker镜像
镜像保存在仓库中,仓库位于Registry中。默认的Registry是Docker官方维护的Docker Hub。
每个镜像仓库可以存放很多镜像。比如Ubuntu仓库保存了Ubuntu12.04等多个版本的镜像。使用TAG来区分仓库中的多个镜像:ubuntu:12.04
Docker Hub中有两种类型的仓库:用户仓库和顶级仓库。顶级仓库是Docker官方推出的,比如ubuntu,nginx等。用户仓库是用户自己上传的,名称由两个部分组成,用户名/仓库名。
使用docker pull {image name}
可以拉取镜像到本地。之前使用docker run
命令建立容器,它在发现本地没有这个镜像文件时,会自动到远程拉取。
docker命令可以直接搜索镜像:
1 | > docker search ubuntu |
这两个地方都可以找到Docker镜像。区别的话,按官方的说法,Docker Hub是社区维护的,任何人都可以发布镜像。Docker Store上的镜像是官方维护的,镜像需要审查后才能进入,所以会更加安全。
常用命令
容器命令
- 创建容器:
docker run {image name} {command}
- 设置容器的名称:
--name {container name}
- 设置容器的名称:
- 启动容器:
docker start {container name/id}
- 重启容器:
docker restart {container name/id}
- 停止容器:
docker stop {container name/id}
- 删除容器:
docker rm {container name/id}
- 附着到容器上:
docker attach {container name/id}
- 查看容器内进程:
docker top {container name/id}
- 在容器内运行进程:
docker exec {container name/id} {command}
- 查看容器输出:
docker logs {container name/id}
-f
监控日志,否则输出日志后直接退出-t
为每条日志加上时间戳
- 获取容器详细信息:
docker inspect {container name/id}
自动重启容器:
docker run --restart=always --name xxx -d ubuntu /bin/bash -c "command"
任何退出都自动重启docker run --restart=on-failure:5 --name xxx -d ubuntu /bin/bash -c "command"
错误退出时(退出码非零)自动重启
镜像命令
- 列出所有本地镜像:
docker image ls
- 删除镜像:
docker image rm {image name/id}
参考资料
- 《第一本Docker书》
- 《Docker进阶与实战》
- Get Started, Part 1: Orientation and setup | Docker Documentation
- 什么是 Docker ? - 云+社区 - 腾讯云