docker中含有三个重要概念:

Dockerfile,Image镜像和Container容器

先尝试在vscode安装docker扩展

首先打开你的项目,在你的应用根目录下创建一个Dockerfile文件。

workdir指定了之后所有docker命令的工作路径(注意,是这个命令之后的所有Docker命令

之后使用copy命令将所有的程序拷贝到Docker镜像中

第一个参数代表本地路径,“.”代表程序根目录下的所有文件

第二个参数代表Docker镜像中的路径,按照教程这里“.”代表之前指定的app目录

RUN允许我们在创建镜像时运行任意的shell命令。因为我们docker用的是linux镜像

通过以上的所有命令,我们就可以完成一个Docker镜像的创建

在最后,我们会用到CMD来指定当Docker容器运行起来后要执行的命令

这里注意一件事,那就是区分RUN与CMD

RUN是创建镜像时使用的

而CMD时运行容器时候使用的

到这里,我们的自动化脚本Dockerfile就完成了。

接下来,使用docker build来创建一个镜像

-t 后面时我们创建镜像的名字

后面的“.”是告诉docker应该在当前目录下找这个Dockerfile文件

创建镜像成功后,我们可以通过docker run来启动一个容器

-p (--port)它会将容器上的某一个端口映射到你的本地主机上,这样才可以从主机上访问容器中的Web应用

前面的80是我们本地主机上的端口,5000是容器的端口

-d (--deteched)让容器在后台运行

最后,不出意外的话,在浏览器搜索localhost就可以访问了

另外,我们可以通过图形界面

可以看到你的容器

可以通过shell远程调试这个容器

这个是所对应的命令行指令

需要注意的是,如果删除容器。则之前所做的修改,新添加的数据会全部丢失。这就好比删除一个虚拟机,里面的数据会一同销毁一样。

如果我们希望保留容器中的数据,可以使用docker提供的volume数据卷。可以把它当作是一个在本地主机和不同容器中共享的文件夹。

比如你在某个容器中修改了某一个volume的数据,它会同时放映在其他容器

我们可以通过docker volume create来创建一个数据卷

随后在启动容器的时候,可以通过-v参数指定,将这个数据卷挂载(mount)到容器中的哪一个路径上。从这里可以看到我们将my-finance-data挂载到了/etc/finance这个路径下。向这个路径写入的任何数据都会被永久保存在这个数据卷中

在实际应用中,我们的应用程序可能会用到多个容器共同协作

例如,我们可以使用一个容器来运行web应用,另一个容器来运行数据库系统。这样可以做到数据和应用逻辑的有效分离。比如,当web程序宕机了,数据库依然在有效运转,这个时候我们只需要修复web容器即可,而docker compose刚好可以帮我们做到这一点。

我们可以创建一个docker—compose.yml文件

在这个文件下,我们通过services来定义多个container。比如这里定义一个web容器,它里面运行我们的web应用,然后再定义一个db容器,里面运行了mysql数据库系统

我们话可以通过volumes指定一个数据卷用来永久存放数据。

最后,我们使用docker compose up来运行所有的容器

这里的 -d (detach)同样代表在后台运行所有的容器

我们可以使用docker compose down来停止并删除!!!!!所有的容器

不过新创建的数据卷需要我们手动删除,除非使用docker compose --volumes

另外刚刚讲的所有操作也都可以在图形界面中完成

此外,再提别的事,就是Kubernetes中的容器引擎(container engines)在处理一些高并发,是比docker的容器有优势的。

在上述的示例中,我们的应用、数据库容器都运行在同一个计算机中。随着应用规模的增大。一台计算机没有办法满足我们的需求 。

当我们想要使用一个集群的电脑来提供服务,并做到负载均衡、故障转移。此时Kubernetes的优势则起来了

一句话讲,Kubernetes所做的就是将你的各个容器分发到一个集群(cluster)上运行,并进行全自动化管理,包括应用的部署和升级

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐