docker简介

Docker

怎么理解容器

容器就像一个📦包裹,可以打包上所有需要的东西:例如依赖/配置。这样打包好可以把真个包裹直接共享在小组里面,大家都可以直接用,开发和部署更高效。

portable:小而轻,好携带,好搬运

容器放在哪

容器仓库。有的公司用私有仓库,公共仓库dockerhub

对于开发

没有容器:一个组里面有的用Mac有的用Linux,不同os安装的步骤不同,遇到错误发生在哪个步骤不可控。

有容器:不用在操作系统安装,容器本身是一个隔离的环境,放了安装好依赖和代码的包裹,可以直接下载到本地使用。不论是什么os,docker command都是一样的,大家配置本地环境的步骤都是一样的。

对于部署

没有容器:开发的人发出来代码和数据库及分别的安装配置说明文件,部署操作的人需要下载所有的外部依赖,版本可能有冲突,对于说明文件也可能有误解

有容器:安装好了docker runtime之后,不用环境配置,只用从仓库里拉取包裹运行

同时运行多个版本的组合

移除添加互不影响。

容器是什么

  • 多层的镜像

    镜像分了好几层下载,好处是如果有新版本需要下载,之后下载有变化的部分层,提高下载效率。

  • 基础镜像一般是Linux,因为小,alpine
  • 顶层镜像:应用镜像

虚拟机 vs 容器

虚拟机:一台机器的抽象概念(物理硬件)

通过hypervisor实现

Hypervisor:用来创建管理虚拟机,例如VirtualBox,VMware,Hyper-v(windows only)

缺点:

  • 每个虚拟机都需要全套的操作系统
  • 启动慢
  • 资源有限:局限于实际的CPU,内存,硬盘等资源

每个机器上能跑的虚拟机是有限的

容器:一个运行应用的隔离的环境

  • 可以隔离地运行多个应用
  • 更轻量,不需要整套操作系统
  • 共享主机的操作系统
  • 启动快
  • 需要的硬件资源更少

docker的架构

用户-服务器架构:服务器也就是docker engine是后台负责构建/运行容器的。用户-服务器之间通过REST API交流,
docker architecture

安装docker

参考这一篇《docker在mac上的使用及常见问题》

开发工作流

应用程序加上一个Dockerfile,包括一些将应用程序所需的文件打包成一个镜像的指令

from app to image

镜像

  • 简易操作系统
  • runtime环境(eg Node)
  • 应用文件
  • 第三方库
  • 环境变量

image loaded in a container

有了镜像之后,可以在容器process里面运行应用了

docker workflow

开发环境,把应用打包成一个镜像,传到registry,在测试或者生产环境上拉取镜像可以运行应用

操作练习

  1. 创建一个app.js
    1
    2
    mkdir hello-docker
    cd hello-docker
    in vscode

app.js

1
console.log("Hello Docker!");

此时如果要在另一台设备运行这个app,需要安装node以及复制app.js文件,然后在terminalnode app.js

  1. 在同路径下创建一个Dockerfile

    1
    2
    3
    4
    FROM node:alpine
    COPY . /app
    WORKDIR /app
    CMD node app.js

    from后面是一个基础镜像,node是在Linux基础上的镜像,alpine是一个轻量级版本,可以在dockerhub搜索找到这些公开的镜像。把文件从根路径下复制到/app工作路径下面,设置好工作路径,再执行命令

  2. 构建镜像

1
2
docker build -t hello-docker .
docker image ls

docker build用来构建镜像,加上一个tag便于区分,并且Dockerfile是在根路径下面,所以加上一个.

  1. 通过docker runtime运行
    现在可以通过docker run hello-docker运行了

  2. 拉取镜像并运行

可以在https://labs.play-with-docker.com 这里注册/用docker账号登录,进去是一个只有轻量级Linux和docker的虚拟机,在这里拉取一个公共的镜像并运行

添加新的实例

1
2
3
docker pull hello-world
docker image ls
docker run hello-world

在play with docker练习

参考链接

  1. 课程视频

https://www.youtube.com/watch?v=3c-iBn73dDE&t=952s

https://www.youtube.com/watch?v=pTFZFxd4hOI&t=3s


docker简介
https://hexwhat.top/2024/03/30/docker-intro/
作者
Leah
发布于
2024年3月30日
更新于
2024年5月1日
许可协议