docker

Docker

Why docker ?

  • 虚拟机的发展,减轻了企业对硬件资源的依赖,它将一台物理设备虚拟为多个逻辑设备,每个逻辑设备可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高设备的工作效率。然而,传统VM需要安装操作系统才能执行应用程序,占用系统资源过多。多数情况下,用户只需要运行简单的应用程序,采用VM技术操作繁琐且造成资源浪费。倘若需要迁移应用服务程序,则需迁移整个VM,因此企业迫切需要轻量级的虚拟化技术。

  • 容器,就是一种轻量级的虚拟化技术,目的和虚拟机一样,都是为了创造“隔离环境”。但是它不像VM采用操作系统级的资源隔离,容器采用的是进程级的系统隔离。Docker作为创建容器的主流工具,近年来迅速发展,它的优势在于可以让开发者将企业需要的各种应用及应用依赖文件封装在Docker镜像文件中,然后在任何物理设备(Linux设备或Window设备等)上安装运行实现虚拟化,让应用程序彻底脱离底层设备,可以在物理机之间灵活迁移部署,使运维工程师摆脱了繁琐的环境部署,极大的提高了工作效率,同时减少了部署过程中的潜在风险。

Docker容器具有以下三大特点:

  • 轻量化:一台主机上运行的多个Docker容器可以共享主机操作系统内核;启动迅速,只需占用很少的计算和内存资源。
  • 标准开放:Docker容器基于开放式标准,能够在所有主流Linux版本、Microsoft Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。
  • 安全可靠:Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台主机。

Docker V.S. VM

  • 启动更快:传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 资源利用更高效:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
  • 可迁移性:由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

Memo:常用指令

Service-about

  • 查看状态
1
$ systemctl status docker 
  • 启动/关闭守护Damon进程
1
$ systemctl start/stop docker 
  • //(SysV Linux)
1
$ service docker status/start/stop/restart

Image-about

1
$ docker pull image-name
  • 查看所有镜像
1
$ docker images
  • 删除镜像
1
$ docker rmi image-name
  • 搜索相关镜像
1
$ docker search image-name
  • // 利用Dockerfile建立镜像档(responsitory:tag为tiangolo/nginx_flask)
1
$ docker build -t "tiangolo/nginx_flask" .

Container-about

  • 由镜像生产容器
1
$ docker run image-name
  • 生成mysql容器
    • -d后台运行 ;--name指定容器名 ;-p指定宿主机和容器的端口映射(容器不能直接访问);-e设置环境变量
1
$ docker run -d --name=mysql-2 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 mysql
  • 容器的数据挂载(两种方式:数据卷volume 和 文件目录)

// todo

  • 查看容器
1
$ docker ps -a
  • 查看容器详情信息
1
$ docker inspect container-id
  • 启动/停止/输出已经存在的容器
1
$ docker start/stop/rm container-id
  • 查看日志
1
$ docker logs container-id
  • 进入某个容器后,执行bash
    • -i: 这个选项表示要保持标准输入 (stdin) 打开,即允许你输入命令。
    • -t: 这个选项表示分配一个伪终端 (pseudo-TTY),使得你可以与 Bash Shell 进行交互。
1
$ docker exec -i -t [Container-id] bash

镜像的构建

  • Images的分层打包(分层的好处)

  • Dockerfile的构建

项目的部署

  • Docker Compose 的使用

小记