docker基础知识总结

本文深入探讨Docker容器化技术及其与Kubernetes的关系,解析DockerFile与docker-compose.yml的功能区别,阐述Docker在简化应用程序部署、兼容多类型应用及成本效益上的优势。
摘要由CSDN通过智能技术生成

什么是docker?

docker是容器化技术。

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

docker可以简单的理解为更加轻量级的虚拟机。

docker本质是对开发环境的一种模拟

docker和kubernetes的关系是什么?

关于docker和kubernets的关系可以参考这篇博客:https://blog.csdn.net/andyguan01_2/article/details/96993360 。

虚拟机繁重,想用Docker更轻量级,那好,你用吧,怎么用呢?手动一个一个创建?当然不,故kubernetes技术便出现了,以kubernetes为代表的容器集群管理系统,这时候就该上场表演了。

说白了,我们用kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件。另外,kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

 

DockerFile与docker-compose.yml的区别是什么

我们在使用docker的时候常常会用到两种file,一种是dockerfile,另一种是docker-compose.yml,他们的关系是什么呢?事实上他们没有直接的关系.

Dockerfile描述了如何为容器组装私有文件系统,并且还可以包含一些元数据来描述如何基于该映像运行容器。docker file的每一行在执行的生成镜像的时候都是一个对应的步骤

DockerFile是用于构造自己的镜像时使用的文件,根据它可以生成images镜像文件。

典型命令:docker build -f DockerFile -t myImage  . 

下面是一个dockerfile的例子:

# 构建images(镜像)使用
FROM node:current-slim

WORKDIR /usr/src/app
COPY package.json .
RUN npm install

EXPOSE 8080
CMD [ "npm", "start" ]

COPY . .

使用docker build命令可以执行该dockerfile,其作用是将对应的project生成并打包为一个镜像文件。

该dockerfile的执行结果如下所示:

 

docker-compose.yml是用于编排配置服务(或者说是容器)的文件(不用这个文件也能配置启动容器),这个文件的作用是准备一套镜像,以此构建出一个环境出来。典型命令:docker-compose up -d

docker-compose文件实例:

复制代码
# 编排服务(容器),每个服务启动一个镜像

version: '3'

services:
  mysql:  ##(服务1)
    restart: always
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "12345678"
    volumes:  #数据持久化,落到本地盘上  本地:docker容器
      - mysqldb:/var/lib/mysql   # 卷标:docker容器  这种方式是不知道存储在本地的绝对路径,需要使用docker volume ls 和docker volume inspect 容器卷标 查看。 docker volume rm 容器卷标  删除卷
      - ./docker/mysql/my.cnf:/etc/my.cnf  #卷标:容器  这种方式是使用本地绝对路径的方式,可以查看到数据存放到本地的具体路径  
      - ./docker/mysql/init:/docker-entrypoint-initdb.d/

  go-web:  ##(服务2)
    restart: always
    image: beego-web
    ports:
      - "8080:8080"

而这当中的镜像文件,就是用dockerfile创建的,当然也可以有一些别的来源,例如标准镜像文件等等。

 

docker的优势是什呢:

1.简单易操作,简化了以往复杂的应用程序安装步骤,使用docker会变得非常简便。

2.可兼容多种应用,Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成镜像部署。

3.省钱 docker结合云可以做到高性能低价格

最大优势是方便搭建需要的环境

docker如何container类型

对着docker的图标点击右键,可以切换docker的container类型,如下所示

我们可以根据自己的需要切换对用的container操作系统。

dockerfile 例子

下面是一个典型的dockerfile例子及其说明

# Use the official image as a parent image.
FROM node:current-slim

# Set the working directory.
WORKDIR /usr/src/app

# Copy the file from your host to your current location.
COPY package.json .

# Run the command inside your image filesystem.
RUN npm install

# Add metadata to the image to describe which port the container is listening on at runtime.
EXPOSE 8080

# Run the specified command within the container.
CMD [ "npm", "start" ]

# Copy the rest of your app's source code from your host to your image filesystem.
COPY . .

该dockerfile定义了下面的steps

  • FROM定义了一个已经提前存在的image。这是一个docker官方的image。由node.js供应商构建并经Docker验证为包含Node.js长期支持(LTS)解释器和基本依赖项的高质量image。
  • WORKDIR 指明了应从image文件系统中的目录/ usr / src / app(而不是主机的文件系统)中执行所有后续操作。
  • COPY操作拷贝package.json文件,从host系统到当前image的location(.),也就是到  /usr/src/app/package.json这个路径下
  • RUN 在image的filesystem内执行命令npm install,该命令会读取package.json文件的依赖并install
  • COPY从host system拷贝剩下所有的app的源代码到image的文件系统当中
  • EXPOSE 8080告诉docker该contain在运行的时候会监听8080端口
  • CMD CMD指令是在映像中指定一些元数据的第一个示例,该元数据描述了如何基于该映像运行容器。 在这种情况下,这就是说该图像要支持的容器化过程是npm start。

上面看到的是组织一个简单的Dockerfile的好方法。 始终以FROM命令开头,然后按照步骤构建私有文件系统,并以任何元数据规范作为结束。 Dockerfile指令比上面看到的要多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值