使用Docker搭建应用运行环境

什么是docker?

Docker 使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroupnamespace ,以及 OverlayFS类的 Union FS等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术 。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

为什么要使用docker?

  1. 开发的程序最终的运行环境为Linux,开发环境不方便调试,并且避免了“代码在我电脑上没问题”的情况;
  2. MacOS上并没有好用的SSH管理工具,Windows上则有很多方便快捷的工具,直接使用ssh命令会出现掉线,文件传输不方便等情况,Docker则可以直接将主机目录挂载到;
  3. Docker是轻量级的容器,相比虚拟机而言,对电脑资源的要求更低,启动速度更快。

安装Docker

MacOS 通过brew安装

$ brew cask install docker

注意:docker有桌面版,如不加cask则下载的不是桌面版。但仍然可以通过命令行来使用,下载桌面版能可视化容器更方便。

获取一个镜像

Docker 官方维护了一个公共仓库 Docker Hub,我们可以直接从 Docker Hub 中获取我们想要的镜像。我们通过以下命令获取redis的最小镜像。

$ docker pull redis

运行一个容器

运行交互式容器,这样进入了一个交互式容器,里面可以对redis进行查询等操作,而这个容器只可以操作redis,完全与其他服务隔离开来,非常安全,即使服务宕机也丝毫不会影响其他服务,而且后期维护也非常简单。

$ docker run -itd --name redis -p 6379:6379 -v 本地目的:容器目录 redis

-i:以交互模式运行容器,通常与-t同时使用

-d:后台运行容器,并返回容器ID,也即启动守护式容器

-t:为容器重新分配一个伪输入终端,通常与-i同时使用

写在一起就是组合命令,-id -it -itd

–name:用来指定容器名称,如省略则会 Docker 会自动分配一个名称

-v:代表挂载目录,本地目的和容器目录使用:分隔,均是绝对路径,当容器目录不存在时会自动创建,如需挂载多个目录,可以使用多个-v来挂载多个目录

-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。

使用$ docker ps可以查看容器中所有的容器

进入环境

使用docker命令登录到redis容器中

docker exec -it redis bash

启动redis客户端

redis-cli

然后就可以在docker中运行redis,就和在docker外运行是一样的,且已经将本地目录挂载到容器内目录,即使以后该容器损坏或删除,数据一直是存在本地的,并无损失。

以上就是我第一次用Docker的一些心得~

参考:

菜鸟教程

Docker — 从入门到实践