技术总结 | 前端萌新现在上车Docker,还来得及么?
序言
作为一名爱学习的前端攻城狮,在当下疯狂内卷的大环境🐱, 不卷一卷Docker
是不是有点说不过去,再加上现在我司前端部署项目大部分都是Docker
,所以现在赶紧上车, 跟着Up主来look look
,欢迎有big old指正
- Q:你能说一下你怎么看待
Docker
,Docker
能干什么么 - A:
Docker
是一个便携的应用容器, 用来自动化测试和持续集成、发布
大家在面试的时候是不是这么回答的😂,恭喜你答对了,但是不够完整,现在来结合文档和Demo
具体看看,Docker
到底能干啥
概念
什么是Docker
Docker
就好比是一个集装箱,里面装着各式各类的货物。在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。
有人觉得Docker
是一台虚拟机,但是这种想法是错误的,直接上图
上图差异,左图虚拟机的
Guest OS
层和Hypervisor
层在Docker
中被Docker Engine
层所替代。虚拟机的Guest OS
即为虚拟机安装的操作系统,它是一个完整操作系统内核;虚拟机的Hypervisor
层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。
三大核心概念
镜像(image)
镜像是创建docker容器的基础,docker镜像类似于虚拟机镜像,可以将它理解为一个面向docker引擎的只读模块,包含文件系统
创建镜像的方式
- 使用
Dockerfile Build
镜像 - 拉取
Docker
官方镜像
容器(container)
容器是从镜像创建的应用运行实例,容器之间是相互隔离、互不可见的。可以把容器看做一个简易版的linux系统环境(包括roo
t权限、进程空间、用户空间和网络空间等),以及运行在这个环境上的应用打包而成的应用盒子。
可以利用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
镜像:
基础操作
安装Docker
linux
安装Docker
windows
安装docker
推荐安装Docker
Desktop
飞机票
拉取镜像
# 拉取镜像
>>> 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;
}
}
打镜像
查看本地镜像
>>> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-vite latest cc015756264b About a minute ago 133MB
启动容器
现在可以访问地址来验证是否成功
查看本地正在运行的容器
文末
是不是很Easy
呢?我们从上面可以看出,Docker
的功能是十分强大的,除此之外,我们还可以拉取一些 Ubuntu
,Apache
等镜像, 也可以自己定制一下镜像,发布到Docker Hub
.
当然!本文介绍的只是Docker
的基础功能,小编能力到此,还需继续学习~