docker是什么,前端为什么要学习docker,如何创建一个最简单的docker容器?

docker是什么,前端为什么要学习docker,如何创建一个最简单的docker容器?_第1张图片

前言:写这篇文章的目的是最近搞了下前端自动化部署,准备写篇博客记录下来。其中用到了docker容器技术,因此在写自动化部署的博客前先记录一下docker的下载安装以及镜像和容器的创建。

什么是docker,以及为什么前端要学习docker

假设现在你开发完了一个项目,这个时候你要把这个项目交给测试去测试。测试在拿到你的代码后,运行项目,发现项目跑不起来。然后就对你说项目有问题,跑不起来,让你解决。可是在你自己的电脑上明明是可以的啊,于是你就装作一副震惊的样子,委屈巴巴的说,在自己的电脑上没问题。然后测试费劲吧啦的重新装环境,搞了大半天,甚至还为此加了个班,终于才把项目跑起来了。
测完后把项目交给运维去上线,上线后又遇到了同样的问题,然后你又发挥演员的自我修养说在你的电脑上是正常的…

代码你写了,还要你当演员,其实有时候还真的挺累的hhhh

因此,保持开发时和上线时环境的一致性,其实是相当有必要的,能够杜绝相当一部分问题的发生。
那么这个和docker有什么关系呢?

我们先来看一下百度上对docker的定义,docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

光从定义上来看,仿佛是有点抽象的。其实简单来说,docker就是一个容器,开发者可以将自己的项目代码,以及项目的环境打包发布成为一个镜像,这个镜像是可以移植的,也就是说,我将本地的项目,运行环境打包成一个镜像发布后。在另外一台电脑或者是操作系统上是可以拉取这个镜像,拉取到镜像后用这个镜像创建运行容器就好了,这个运行起来的容器可以看做是一个微型的服务器。而沙箱机制又可以为docker容器提供完全独立的运行环境,相互之间不会互相影响,那么我就可以创建多个容器,每个容器都可以部署一个自己的项目。

那么将docker应用到开发中的场景是怎样的呢?我可以在测试要测试的时候,将项目与本地的开发环境打成一个docker镜像,测试将我的镜像拉到自己的电脑,创建一个docker容器运行。那么运行的环境将和开发的环境一致,避免上述的问题的产生。上线的话也是同理。

当然有的同学看了后可能会说,我们不是有虚拟机吗,VMware不是直接芜湖起飞吗。我们先搭建好一套虚拟机环境,然后给测试和运维克隆一份不就好了吗?

of course这当然是可以滴!在没有容器技术之前,利用虚拟机当然不失为一个好的办法。但是和我们的项目相比,操作系统是一个相当笨重的东西,操作系统要运行起来的话需要占用很多的资源,我们知道刚装好的系统什么都没有,磁盘的空间都会被占去很大一部分。而容器技术出来后就完美的解决了问题。当然这只是其一,还有一方面的原因是操作系统启动需要耗费的时间很长,毕竟要加载诸多的东西,动辄就会耗费数分钟的时间。而容器的话启动起来就相应的快很多了。

因此综上所述,这也是我为什么说前端需要学习docker技术的原因。

如何创建镜像和容器

那么说了这么多,究竟如何能创建一个docker容器呢。接下来就给大家简单讲一下如何创建一个最简单的docker容器。

要创建docker容器,首先需要在自己的电脑上安装docker。打开终端,在终端输入以下命令(mac):

brew install --cask --appdir=/Applications docker

安装可能需要一点时间,当安装好后就会出现以下的界面:
docker是什么,前端为什么要学习docker,如何创建一个最简单的docker容器?_第2张图片

然后在应用里面就可以看到docker啦:
docker是什么,前端为什么要学习docker,如何创建一个最简单的docker容器?_第3张图片

点击应用:
docker是什么,前端为什么要学习docker,如何创建一个最简单的docker容器?_第4张图片

点击ok 输入电脑密码就好了

到此为止docker就安装好了。接下来就是创建容器了,在创建容器前我们首先需要了解docker最基本的三个概念。

镜像(images)
容器(container)
仓库(repository)

如果说容器就是一个服务器的话,那么镜像(images)就是创建服务器的模板,一个镜像可以创建多个容器,而仓库就是用来储存镜像的地方,类似于存储代码的仓库github。

因此要创建容器,首先我们需要获得镜像,镜像是怎么创建的呢,镜像的获取有两种方式,一种是用Dockerfile文件生成,而另一种就是从镜像仓库(repository)中去拉取。

这里我们主要是讲用Dockerfile创建镜像。Dockerfile是一个配置文件,定义了怎样去创建一个镜像。接下来我们就尝试用Dockerfile创建一个镜像。

首先创建一个文件夹,创建index.html文件,以及Dockerfile文件,此时你的文件目录应该是这样的:

my-docker
  |____index.html
  |____Dockerfile

在index.html中输入

<h1>Hello docker</h1>

在Dockerfile中输入

# Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80

配置解析

FROM nginx:拉取官方 nginx 镜像

COPY index.html /usr/share/nginx/html/index.html:将当前目录下的 index.html 替换容器中 /usr/share/nginx/html/index.html 文件, /usr/share/nginx/html 是容器中 nginx 默认存放网页文件的目录

EXPOSE 80:容器暴露出80端口,这个地方只是起到一个声明的作用,真实发布的端口应当以运行容器时定义的端口决定

创建镜像

docker build . -t mydocker:latest

命令解析
build:创建 docker 镜像
.:使用当前目录下的 dockerfile 文件
-t:使用 tag 标记版本
mydocker:创建名为 mydocker 的镜像
:latest:标记为最新版本

docker是什么,前端为什么要学习docker,如何创建一个最简单的docker容器?_第5张图片

查看本地存在的镜像

docker images

docker是什么,前端为什么要学习docker,如何创建一个最简单的docker容器?_第6张图片

利用镜像创建容器

docker run -d -p 80:80 --name mydocker-container mydocker:latest

命令解析
run:创建并运行容器
-d:在后台运行容器
-p:发布端口
80:80:将主机的80端口映射到容器的80端口(容器的80端口是默认暴露的)
–name:给创建的容器取名为mydocker-container
mydocker:latest:用最新的mydocker镜像来创建这个容器

访问本机的80端口
docker是什么,前端为什么要学习docker,如何创建一个最简单的docker容器?_第7张图片

到此为止,一个最简单的docker容器就创建好了,当我们访问本机的80端口时由于做了端口映射,他将去访问容器的80端口,我们的页面就展示出来了。

如何将本地node环境打包到镜像会在后面的前端自动化部署一文里结合实际项目进行讲解。

你可能感兴趣的:(开发记录,docker,前端,学习)