阅读 1961

技术总结 | 前端萌新现在上车Docker,还来得及么?

序言

作为一名爱学习的前端攻城狮,在当下疯狂内卷的大环境🐱, 不卷一卷Docker是不是有点说不过去,再加上现在我司前端部署项目大部分都是Docker,所以现在赶紧上车, 跟着Up主来look look,欢迎有big old指正

  • Q:你能说一下你怎么看待DockerDocker能干什么么
  • A:Docker是一个便携的应用容器, 用来自动化测试和持续集成、发布

大家在面试的时候是不是这么回答的😂,恭喜你答对了,但是不够完整,现在来结合文档和Demo具体看看,Docker到底能干啥

概念

什么是Docker

Docker就好比是一个集装箱,里面装着各式各类的货物。在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。

有人觉得Docker是一台虚拟机,但是这种想法是错误的,直接上图

8931c4f83956f72f924f9c30aee3c40.png

上图差异,左图虚拟机的Guest OS层和Hypervisor层在Docker中被Docker Engine层所替代。虚拟机的Guest OS即为虚拟机安装的操作系统,它是一个完整操作系统内核;虚拟机的Hypervisor层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。

三大核心概念

镜像(image)

镜像是创建docker容器的基础,docker镜像类似于虚拟机镜像,可以将它理解为一个面向docker引擎的只读模块,包含文件系统

创建镜像的方式

  1. 使用Dockerfile Build镜像
  2. 拉取Docker官方镜像

容器(container)

容器是从镜像创建的应用运行实例,容器之间是相互隔离、互不可见的。可以把容器看做一个简易版的linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在这个环境上的应用打包而成的应用盒子。

可以利用docker create命令创建一个容器,创建后的的容器处于停止状态,可以使用docker start命令来启动它。也可以运行docker run命令来直接从镜像启动运行一个容器。docker run = docker creat + docker start

当利用docker run创建并启动一个容器时,docker在后台的标准操作包括:

(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载。

(2)利用镜像创建并启动一个容器。

(3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。

(4)从宿主机配置的网桥接口中桥接一个虚拟的接口到容器中。

(5)从地址池中配置一个IP地址给容器。

(6)执行用户指定的应用程序。

(7)执行完毕后容器终止。
复制代码

仓库(Repository)

安装Docker后,可用通过官方提供的registry镜像来搭建一套本地私有仓库环境。

下载registry镜像:

6246e8b8ff24b58a0bdf74ab6de1e30.png

基础操作

安装Docker

linux安装Docker

8d75417f1599a5e7716278780346a8e.png

windows安装docker

推荐安装Docker Desktop 飞机票

image.png

拉取镜像

# 拉取镜像
>>> docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
f3ef4ff62e0d: Pull complete
Digest: sha256:a0d9e826ab87bd665cfc640598a871b748b4b70a01a4f3d174d4fb02adad07a9
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

# 查看本地所有镜像
>>> docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
ubuntu                   latest    597ce1600cf4   13 days ago    72.8MB
hello                    latest    8b9d88b05a48   2 weeks ago    231MB
centos                   latest    5d0da3dc9764   4 weeks ago    231MB
docker/getting-started   latest    083d7564d904   4 months ago   28MB

# 删除镜像
>>> docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:a0d9e826ab87bd665cfc640598a871b748b4b70a01a4f3d174d4fb02adad07a9
Deleted: sha256:597ce1600cf4ac5f449b66e75e840657bb53864434d6bd82f00b172544c32ee2
Deleted: sha256:da55b45d310bb8096103c29ff01038a6d6af74e14e3b67d1cd488c3ab03f5f0d

复制代码

创建容器

#创建容器
>>> docker create --name my-ubuntu ubuntu
2da5d12e9cbaed77d90d23f5f5436215ec511e20607833a5a674109c13b58f48

#启动容器
>>>  docker start 2da5d

#查看所有容器
>>> docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED              STATUS                      PORTS     NAMES
2da5d12e9cba   ubuntu    "bash"    About a minute ago   Exited (0) 31 seconds ago             my-ubuntu

#删除容器
>>> docker rm 2da5d

#创建并进入容器
>>> docker run --name my-ubuntu2 -it ubuntu
root@552c7c73dcf6:/#
#进入容器后就可以在容器内部执行脚本了

# 进入正在运行的容器
>>> docker exec -it 2703b1 sh
/ #

复制代码

编排Dockerfile

Dockerfile是一个创建镜像所有命令的文本文件, 包含了一条条指令和说明, 每条指令构建一层, 通过docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内容, 就是描述该层如何构建.有了Dockefile, 就可以制定自己的docker镜像规则,只需要在Dockerfile上添加或者修改指令, 就可生成docker镜像.

FROM ubuntu          #构造的新镜像是基于哪个镜像
MAINTAINER Up_zhu    #维护者信息
RUN yum install nodejs          #构建镜像时运行的shell命令
WORKDIR  /app/my-app            #设置工作路径
EXPOSE 8080                     #指定于外界交互的端口,即容器在运行时监听的端口
ENV MYSQL_ROOT_PASSWORD 123456  #设置容器内环境变量
ADD ./config /app/config        #拷贝文件或者目录到镜像,如果是URL或者压缩包会自动下载或者自动解压
COPY ./dist /app/my-app
VOLUME /etc/mysql               #定义匿名卷
复制代码

实战

基于vite项目打镜像,发布

新建Dockerfile

FROM nginx
COPY ./dist/ /usr/share/nginx/html/
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
复制代码

新建nginx配置文件

# nginx/default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
} 

复制代码

打镜像

image.png

查看本地镜像

>>> docker images
REPOSITORY               TAG       IMAGE ID       CREATED              SIZE
my-vite                  latest    cc015756264b   About a minute ago   133MB
复制代码

启动容器

image.png

现在可以访问地址来验证是否成功

image.png

查看本地正在运行的容器

image.png

文末

是不是很Easy呢?我们从上面可以看出,Docker 的功能是十分强大的,除此之外,我们还可以拉取一些 UbuntuApache 等镜像, 也可以自己定制一下镜像,发布到Docker Hub.

image.png

当然!本文介绍的只是Docker的基础功能,小编能力到此,还需继续学习~

参考链接

Docker官方文档

Docker Hub

Docker中文社区

DockerInfo中文文档

文章分类
前端
文章标签