当前位置:   article > 正文

了解docker_doctor容器

doctor容器

docker的出现,让应用环境的配置和发布测试变得非常轻松

它是用来解决什么样的问题

比如写了一个web应用并且本地调试没有任何问题,想要部署到远程的云服务器上,那么首先需要配置相同的软件, 比如数据库、web服务器、必要的插件库等等

而且还不能保证软件一定能够正常运行起来,因为不同的操作系统会有微小的区别,导致运行困难。

为了模拟完全相同的本地开发环境,想到使用虚拟机,但是虚拟机需要模拟硬件,运行整个操作系统不但体积臃肿、内存占用高、程序的性能也会受到影响

container/容器

doctor在概念上与虚拟机非常类似,但却轻量很多,他不会去模拟底层的硬件,会为每一个应用提供完全隔离的运行环境。可以在环境中配置不同的工具软件并且不同环境之间相互不影响,这个环境在docker中也被称作container容器

讲到这里

我们就不得不提到docker中的三个重要概念doctorfile、和

image/镜像

里面包含了你要部署的应用程序,以及他所关联的所有库软件。通过镜像

我们可以创建许多不同的container容器

这里的容器,就像是一台台运行起来的虚拟机,里面运行了你的应用程序。每个容器是独立运行的他们相互之间不影响

doctor file

就像是一个自动化脚本它主要被用来创建镜像。

我们就尝试用doctor来部署一个应用

首先我们在应用的根目录创建一个doctorfile文件

  1. FROM python:3.8-slim-buster
  2. WORKDIR /app
  3. COPY . .
  4. RUN pip3 install -r requirements.txt
  5. CMD ["python3", "app.py"]

第一行:FROM命令指定一个基础镜像,冒号后面这一串是版本号,同时也是一个标签。

第二行:WORKDIR指定了之后所有docker命令的工作路径,是这个命令之后的所有docker命令如果这个路径不存在docker会帮你自动创建

第三行:COPY <本地路径> <目标路径>;第一个参数代表本地文件,'.' 代表程序跟目录下的所有文件第二个参数代表doctor镜像中的路径,‘.’ 点代表当前的工作路径,也就是之前指定的app目录

第四行:RUN,允许我们在创建镜像时,运行任意的需要命令(创建镜像的时候使用)

第五行:CMD来指定当doctor容器运行起来以后要执行的命令(运行容器的时候使用的)

接下来我们可以使用doctor build

docker build -t my-finance .

这里的-t指定了我们镜像的名字,最后面的据点告诉docker应该在当前目录下寻找这个doctor file不能省略。

第一次调用doctor build会比较慢,因为doctor会下载必要的镜像文件然后一行行运行我们的指令,不过再次调用就会快很多。因为doctor会缓存之前的每一个操作,这个在doctor中也被称作分层。

有了镜像以后我们可以通过doctor run来启动一个容器

docker run -p 80:5000 -d my-finance
  1. 列举所有的容器:docker ps
  2. 停止容器:docker stop <容器id>
  3. 重启容器:docker restart <容器id>
  4. 删除容器:docker rm <容器id>
  5. 启动一个远程Shell:docker exec -it <容器id> /bin/bash

volumes/数据卷

它当做是一个在本地主机和不同容器中共享的文件夹

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

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

docker volume create my-finance-data

随后在启动容器的时候,我们可以通过-v参数指定将这个数据卷挂在到容器的哪一个路径上

docker run -dp 80:5000 -v my-finance-data:/etc/finance my-finance

我们这里将my finance data挂在到了etc/finance这个路径下

向这个路径写入的任何数据都会被永久的保存在这个数据卷中

dcoker compose

用一个容器来运行web应用,另一个容器来运行数据库系统。这样可以做到数据和应用逻辑的有效分离

比如当web程序宕机了,数据库依然在有效运转。这个时候我们只需要修复web容器即可

而dcoker compose刚好可以帮我们做到这一点

我们可以创建一个docker-componse.yml文件

  1. version: "3"
  2. services:
  3.     web:
  4.         build: .
  5.         ports:
  6.             - "80:5000"
  7.     db:
  8.         image: "mysql"
  9.         environment:
  10.             MYSQL_DATABASE: finance-db
  11.             MYSQL_ROOT_PASSWORD: secret
  12.     volumes:
  13.         my-finance-data:

我们通过services来定义多个container

比如这里我们定义一个web容器,它里面运行了我们的web应用

然后再定一个DB容器,里面运行了my sql数据库系统

指定数据库的名字和连接密码

同时在DB容器中.通过volumes指定一个数据卷用来永久存放数据

使用darker compose up来运行所有的容器

  1. docker componse up -d
  2. docker componse down 删除所有容器

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/215066
推荐阅读
相关标签
  

闽ICP备14008679号