docker是什么?(简易理解版)

172 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

docker的出现用来解决什么问题

  • web应用部署,配置相同的软件,数据库,web服务器,必要的插件、库等等
  • 为了模拟本地相同的开发环境,可以使用虚拟机需要模拟硬件,运行整个操作系统,体积臃肿,内存占用高!
  • docker派上用场,docker在概念上和虚拟机非常类似,但是却轻量很多,它不会去模拟底层的硬件,只为每一个应用提供完全隔离的运行环境,你可以在环境中配置不同的工具软件,并且不同环境之间相互不影响,这个环境在docker也被称为container/容器!

docker的三个重要概念

  • image:相当于虚拟机的快照,包含了你要部署的应用程序和它关联的相关库

  • container:相当于一台台运行起来的虚拟机,一个应用软件,多个container可以集成在一个image中

  • docker file:像一个脚本,用于创建之前讲到的镜像,安装操作系统和软件,

1.jpg

2.jpg

3.jpg

docker file 文件的参数

FROM python:3.8-xxx 可以从很多维度上来展开活动,可以选择操作系统来运行,从上面的包管理工具来完成,比如ubuntu上的apt。也可以从语言上入手,例如这里的python等等,这时就会使用最常见的模式来运行,免去了安装步骤。
使用 名称:tag 就可以
​
WORKDIR 创建你想要的工作路径
​
COPY 将你的程序拷贝到docker镜像中 (本地路径) (目标路径路径)
. . 代表所有文件复制到你当前的工作路径
​
RUN 允许在创建镜像时运行任意shell命令
   (比如安装相关依赖等等)
   
CMD 可以指定容器运行起来之后的命令
​

创建并运行 docker 镜像

docker build -t 你的镜像名 .(dockerfile路径,这里表示当前路径)
完成后使用
docker run -p 80:5000 (当前主机端口:docker端口) -d 镜像名 (后台运行,输出不显示在终端上)

docker volume

docker删除时保留数据,volume当作是一个在本地主机和不同容器中共享的文件夹

docker volume create来进行创建

启动时添加参数 docker run -v volume_name:挂载路径

挂载完成后,后面只要向这里里面写东西,都会被volume记录,可以跨容器

4.jpg

docker compose

需要写一个docker-compose.yml文件

用键值对来写这个文件

version:"3"services:
​
 web:
​
  build:.
​
  ports:"8302":"80"
​
 
 db:
​
  image:"mysql"
​
  environment:
​
   MYSQL_DATABASE:123
​
   MYSQL_ROOT_PASSWORD:secret

使用

docker compose up -d

来启动

docker compose可以用来帮助我们完成一个容器挂掉了修复这个容器的情况

5.jpg

docker和kubernetes的关系

kubernetes 可以为一个集群的电脑来提供服务,并做到故障转移、负载均衡等等。

kubernetes就是将各个容器分发到各个集群上运行,并进行全自动化的管理,包括应用的部署和升级。

6.jpg