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 .... |