Docker基础使用
什么是Docker?
- Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 
Docker的应用场景
- Web 应用的自动化打包和发布。 
- 自动化测试和持续集成、发布。 
- 在服务型环境中部署和调整数据库或其他的后台应用。 
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。 
Docker的优点
- 简化程序: - Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。 
- 避免选择恐惧症: - 如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。 
- 节省开支: - 一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。 
Docker使用
安装Docker
本文以
CentOS为例。
- Docker 要求 CentOS 系统的内核版本高于 3.10 ,验证你的CentOS 版本是否支持 Docker - 1 
 2- 通过 uname -r 命令查看你当前的内核版本 
 uname -r
- 使用 root 权限登录 Centos。确保 yum 包更新到最新 - 1 - sudo yum update 
- 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 - 1 - sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
- 设置yum源 - 1 
 2
 3
 4- 添加软件源信息 
 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 更新 yum 缓存
 sudo yum makecache fast
- 安装 Docker - 1 - sudo yum -y install docker-ce 
- 启动 Docker 后台服务 - 1 - sudo systemctl start docker 
- 开机启动 - 1 - sudo systemctl enable docker.service 
- 验证安装是否成功 - 1 - docker version 
- 测试运行 hello-world - 1 - docker run hello-world 
Docker基础命令
运行一个容器
前面我们运行的容器并没有一些什么特别的用处。
接下来让我们尝试使用 docker 构建一个 web 应用程序。
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
| 1 | 下载镜像 | 
参数说明:
- -d:让容器在后台运行。
- -P:将容器内部使用的网络端口映射到我们使用的主机上。
查看运行的容器
使用 docker ps 来查看我们正在运行的容器:
| 1 | docker ps | 
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
这时我们可以通过浏览器访问WEB应用
我们也可以通过 -p 参数来设置不一样的端口:
| 1 | docker run -d -p 5000:5000 training/webapp python app.py | 
查看容器日志
docker logs [ID或者名字] 可以查看容器内部的标准输出
| 1 | docker logs -f 3958aa4237b9 | 
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
查看容器中运行的进程
我们还可以使用 docker top [ID] 来查看容器内部运行的进程
| 1 | docker top 3958aa4237b9 | 
查看容器信息
使用 docker inspect [ID] 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
| 1 | docker inspect 3958aa4237b9 | 
停止容器
我们还可以使用 docker stop [ID] 来停止服务
| 1 | docker stop 3958aa4237b9 | 
重启容器
已经停止的容器,我们可以使用命令 docker start [ID] 来启动。
| 1 | docker start 3958aa4237b9 | 
docker ps -l 查询最后一次创建的容器:
正在运行的容器,我们可以使用 docker restart [ID] 命令来重启
移除容器
我们可以使用 docker rm [ID] 命令来删除不需要的容器
删除容器时,容器必须是停止状态,否则会报错
监控容器资源
在宿主机查看docker使用cpu、内存、网络、io情况
| 1 | docker stats | 
挂载本地目录
Docker可以支持把一个宿主机上的目录挂载到镜像里
| 1 | docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash | 
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
默认挂载的路径权限为读写。如果指定为只读可以用:ro
| 1 | docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu64 /bin/bash | 
常见问题
Docker容器时间与主机时间不一致的问题?
可以通过共享主机的localtime解决。
| 1 | docker run --name <name> -v /etc/localtime:/etc/localtime:ro .... | 


