Docker介绍、基本使用
in LinuxDocker with 0 comment
Docker介绍、基本使用
in LinuxDocker with 0 comment

开场白

大家好,我是不爱折腾, 这期视频可以让大家学习到以下知识点。

  1. 什么是 docker?虚拟机他不香么?
  2. Docker 怎么安装?
  3. Docker 怎么使用?
  4. 怎么用Docker创建镜像?
    请大家带着这四个疑问,听我给你一一解答。
    首先是第一个问题

    什么是Docker,虚拟机他不香么?

    要回答这个问题,咱们要先了解一个系统是由什么构造的

  5. 内核,是操作系统中最基本、最核心的部分,它负责管理计算机硬件资源,并为上层应用软件提供运行所需的基本服务和接口。内核的主要功能包括,进程管理内存管理设备管理文件系统网络通信
  6. 系统库是由一系列预先编译好的代码组成的软件库,这些软件库提供程序运行时所需的各种功能和服务。开发者在编写应用程序时,可以调用这些库中的函数,而无需从头编写所有的代码。
  7. 系统工具、任务管理器、磁盘工具、top、ls
  8. 用户程序 curl 、vim

虚拟机创建的时候会把内核、系统库、系统工具全部重新创建,而docker使用系统的内核,只需添加当前程序需要的系统库、即可运行,这样还带来了一个好处,忽略系统依赖不同带来的问题。就比如说你用windows在安装一些程序时,有些系统没有默认安装.NET库,你需要自己安装才可以使用该软件,如果此时可以用Docker的话,开发者就可以把相关依赖打包到Docker镜像里。

Docker由什么组成的?

  1. (Docker Engine) Docker 核心、命令行工具、REST API
  2. 镜像(Images)
  3. 容器(Containers)
  4. 仓库(Registry)

核心就是提供命令行、RESTAPI 来管理镜像、容器、运行的工具。镜像你可以理解为一个设计师设计的图纸,你可以根据这个来建造你自己的房子。容器就是你的房子,一个图纸可以建造多个房子,而仓库就是一个设计网站,设计师们把他们的作品上传到这个网站,你去这个网站下载图纸,然后建造自己的房子。

相信大家根据我讲的已经理解了Docker的构造以及基本的运行逻辑,如果理解请评论1、没理解请评论0。让我知道大家的学习情况。

安装Docker

下面呢先带搭建安装一个docker,不过安装之前咱们要先创建一个虚拟机,来运行docker。

  1. 下载ubuntu镜像: https://mirrors.ustc.edu.cn/
  2. 创建虚拟机
  3. 安装docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo DOWNLOAD_URL=https://mirrors.ustc.edu.cn/docker-ce sh get-docker.sh

不需要 sudo 使用 docker

sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo systemctl restart docker
sudo chmod a+rw /var/run/docker.sock

Docker 命令

安装好 docker 之后咱们来看一下 docker 的命令。命令会有这么几个部分。

镜像管理

容器管理

容器日志与监控

网络管理

数据卷管理

创建镜像

然后是创建镜像,创建会用到一个文件,叫做Dockerfile 这是他的文档: https://docs.docker.com/reference/dockerfile/
常用到的会有这么几个

npm init -y && npm install express
//index.js
const express = require('express');

const app = express();

app.get('/', (req, res) => {
    res.send('Hello World');
});

app.listen(80, () => {
    console.log('Server is running on port 80');
});

然后创建一个文件

nano Dockerfile
FROM node:16
# 添加作者信息
LABEL maintainer="buzheteng.org"

WORKDIR /usr/src/app

#将当前目录内容复制到容器的 /usr/src/app
COPY . .

RUN npm install

EXPOSE 80

ENV NODE_ENV production

CMD ["node", "index.js"]

首先是基础镜像,一般程序都会依赖一些系统库,这时候就可以考虑基于带系统库的镜像来创建一个新的镜像,常用的有ubuntu、debian、alpine,然后就是维护者信息,这个顾名思义,一般是制作者的邮箱、网站。

然后是RUN,用于在容器创建完之后执行初始化命令,可以使用系统库的所有命令,比如mkdir、touch、curl,可以运行多次。WORKDIR是设置运行文件夹,比如你设置的/root,输入RUN pwd当前文件夹就是/root,设置/buzheteng,RUN pwd就是/buzheteng。

下面是COPY,用于将本地的文件、文件夹复制到容器内。

EXPOSE 用于告诉 Docker 容器服务监听的端口,但不直接映射这些端口到主机上。在运行容器时,你仍需要使用 -p-P 参数来实际映射端口。
一次性也可以映射多个,比如

EXPOSE 80 443

CMD 指令用于指定容器启动时要运行的默认命令。每个 Dockerfile 只能有一个 CMD 指令,如果指定了多个,则只有最后一个生效。
CMD 有三种主要的使用方法:

  1. exec格式(推荐

    CMD ["curl", "https://baidu.com"]
  2. shell

    CMD curl https://baidu.com
  3. ENTRYPOINT格式,

    ENTRYPOINT curl
    CMD https://baidu.com

    有了这些知识,咱们就可以创建自己的镜像了,也就是前面说的图纸。在文件夹下运行下面的命令即可。

    docker build -t buzheteng/test:v1 ./ 
Responses