从 0 开始了解 Docker

admin1年前笔记117

Docker 自开源以来受到了各大公司的广泛关注,或许现在互联网公司的运维体系不承载在 Docker(或 Pouch 等)之上都不好意思说自己的互联网公司。

本文会简单介绍下 Docker 的基础概念,入门级使用方式和一些使用 Docker 能大大提升效率的场景。

原理

对 Docker 最简单并且带有一定错误的认知就是 “Docker 是一种性能非常好的虚拟机”。

正如上面所说,这是有一定错误的说法。Docker 相比于传统虚拟机的技术来说先进了不少,具体表现在 Docker 不是在宿主机上虚拟出一套硬件后再虚拟出一个操作系统,而是让 Docker 容器里面的进程直接运行在宿主机上(Docker 会做文件、网络等的隔离),这样一来 Docker 会 “体积更轻、跑的更快、同宿主机下可创建的个数更多”。

Docker 中有三个核心概念:Image、Container、Repository。

  • Image: 有领“好人卡”倾向的广大程序猿一定对 镜像 的概念不会陌生。但和 windows 的那种 iso 镜像相比,Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个 git 仓库的区别)。

  • Container: 容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,Container 就是一个与宿机隔离 “容器”。容器可宿主机之间可以进行 port、volumes、network 等的通信。

  • Repository: Docker 的仓库和 git 的仓库比较相似,拥有仓库名、tag。在本地构建完镜像之后,即可通过仓库进行镜像的分发。常用的 Docker hub 有 https://hub.docker.com/ 、 https://cr.console.aliyun.com/ 等。

相关命令

1. 安装

Docker 的安装是非常便捷的,在 macOS、ubuntu 等下面都有一键式安装工具或者脚本。更多可以参考 Docker 官方教程

安装后 Terminal 中敲下 docker,有使用说明出来的话大多情况下说明已经安装成功了。

2. 寻找基础镜像

DockerHub 等网站都提供了众多镜像,一般情况下我们都会从它那找个镜像作为基础镜像,然后再进行我们的后续操作。

这里我们以 ubuntu 基础镜像为例,配置一个 node 环境。

因为 “链路太长” 的原因,国内访问 Docker Hub 可能会比较慢,可以使用国内众多厂商提供的镜像加速器 image.png

3. 拉取基础镜像

利用 docker pull 命令即可从相关 hub 网站上拉取镜像到本地。同时在拉的过程中就能看到是按照多个 “层” 去拉镜像的。

image.png

执行 docker images 即可看到本地所有的镜像

image.png

4. 创建一个 Docker 容器

docker create 命令通过镜像去创建一个容器,同时吐出容器 id。

image.png

docker start 即可运行改容器。

image.png

docker ps 即可查看运行中的 container

image.png

docker exec 即可进入该 container。

image.png

docker run 可以一步到位创建并运行一个容器,然后进入该容器。

image.png

5. 在容器里安装 Node 环境

进入容器之后一切操作和普通环境一致,我们安装个简单的 node 环境

image.png

6. commit 容器,创建新镜像

和 Ghost 装 windows 一样,很多时候,我们期望能定制自己的镜像,在里面安装一些基础环境(比如上文中的 node),然后制作出自己要的基础镜像。这个时候 docker commit 就派上用场了。

image.png

接着,试一下我们新创建的镜像?

image.png

看起来没问题。

7. push 镜像到 docker hub

镜像制作好了,怎么共享出去让别人使用呢?这里以 push 到 docker hub 为例。

第一步是先去 docker hub 注册一个账号,然后在终端上登录账号,进行 push。

image.png

8. 是时候使用 Dockerfile 了

用 Docker 进行持续集成?相比在了解 Docker 之前肯定听过这个事情,那就意外着需要从某个地方拷贝代码,然后执行(对,听上去有点 travis-ci 的那种感觉)。

是时候该 Dockerfile 出场了!

Dockerfile 是一个由一堆命令+参数构成的脚本,使用 docker build 即可执行脚本构建镜像,自动的去做一些事(同类似于travis-ci 中的 .travis.yml)。

Dockerfile 的格式统统为:

image.png

必须以 FROM BASE_IMAGE 开头指定基础镜像。

更详细的规范与说明请参考 Dockerfile reference。这里我们以基于上面的 rccoder/myworkspace:v1 作为基础镜像,然后在根目录创建 a 目录为例

Dockerfile 如下:

image.png


然后执行:

image.png

借助 Dockerfile 的能力,Docker 留下了无限的可能。



相关文章

介绍Linux下的系统调用过程

介绍Linux下的系统调用过程

先来看一张图,有个大概的理解。首先,应用程序能直接调用的是系统提供的API,这个在用户态(Ring3)下就可做到。然后相应的API就会将相应的系统调用号保存到eax寄存器中(这一步通过内联汇编实现),...

Android root 原理

Android root 原理

0x00 关于rootlinux和类Unix系统的最初设计都是针对多用户的操作系统,对于用户权限的管理很非常严格的,而root用户(超级用户)就是整个系统的唯一管理员,拥有等同于操作系统的所有权限。所...

详解:Nginx 反向代理、后端检测模块

详解:Nginx 反向代理、后端检测模块

Nginxshell > yum -y install gcc gcc-c++ make wget zl...

apt的update和upgrade区别

apt的update和upgrade区别

一些以前的教程也会提到 sudo apt-get update 和 sudo apt-get upgrade。apt 和 apt-get 命令运行起来几乎一样,除了一些细微的差别,后面我会讨...

为啥一震就坏?机械硬盘的构造原理是什么

为啥一震就坏?机械硬盘的构造原理是什么

最近本人的一块2TB机械硬盘挂掉了,里面有工作五六年的重要数据,以及一些生活当中比较重要的照片被销存了。其实这块硬盘之前没有任何的异样,用鲁大师查询硬盘的时候,也没有出现任何警告等消息,仔细回想,有可...

V2Ray 是什么?

V2Ray 是什么?

V2Ray 是一个网络代理工具,通过使用特定的中转服务器完成数据传输,支持 HTTP(只支持传入)、Socks、Shadowsocks、Trojan、VMess、VLESS等内容传输协议,每个内容传输...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。