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为例。

  1. Docker 要求 CentOS 系统的内核版本高于 3.10 ,验证你的CentOS 版本是否支持 Docker

    1
    2
    #通过 uname -r 命令查看你当前的内核版本
    uname -r
  2. 使用 root 权限登录 Centos。确保 yum 包更新到最新

    1
    sudo yum update
  3. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

    1
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  4. 设置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
  5. 安装 Docker

    1
    sudo yum -y install docker-ce
  6. 启动 Docker 后台服务

    1
    sudo systemctl start docker
  7. 开机启动

    1
    sudo systemctl enable docker.service
  8. 验证安装是否成功

    1
    docker version
  9. 测试运行 hello-world

    1
    docker run hello-world

Docker基础命令

运行一个容器

前面我们运行的容器并没有一些什么特别的用处。
接下来让我们尝试使用 docker 构建一个 web 应用程序。
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

1
2
3
4
5
# 下载镜像
docker pull training/webapp

#运行镜像
docker run -d -P training/webapp python app.py

参数说明:

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