Docker 入门笔记整理
一. 什么是 Docker
能在通硬件与 OS 的机器上运行不同 OS 层面要求的应用程序。程序之间相互隔离,与虚拟机相比,有更轻便的体积,以及更高效的系统资源利用;
二. 优势
- 一致的运行环境,安全的应用隔离;
- 更便捷的维护和扩展;
- 方便持续的部署和交付;
- 更快速的启动;
- 更高效的资源利用;
三. 基本概念
- 镜像 Image
- 容器 Container
- 仓库 Repository
-
镜像:静态的 首先镜像是一个文件对象(文件系统)--及一种特殊的文件对象;
- 包含了 OS 文件系统:提供容器运行时所需要的库、资源、配置等;
- 包含了应用的文件对象;
镜像的架构设计(分层架构)--- 分层存储,及由多层文件联合组成; 镜像的构建是一层层的构建,已经构建的层没有变化,后一层的构建也不会影响前一层;
-
容器:动态的 容器是镜像的运行环境;
-
理解:
从编程角度:镜像可以比作类(Class),容器就是镜像的实例;容器可以被创建,启动,停止,暂停,删除等 -
容器的结构: 以镜像为基础层,在其外层创建一或多层文件,及当前容器的存储层
-
容器存储层的生命周期: 存储层的生命周期跟随容器创建和消亡; 所以不应该在同期存储层写入数据,应该使用数据卷或绑定宿主目录; (我们在 docker 部署前端静态资源时,关于 nginx 的 conf 配置如上说设置)
-
-
仓库: 及镜像的远程存储服务器,集中存储,分发镜像,同比 github; 形式如<仓库名>:<标签>--->node:alpine
四. 一些具体操作指令
-
镜像---指令:
- 查找镜像:
docker search node/<name>
输出结构: NAME: 名称 DESCRIPTION: 描述 OFFICIAL: 是否官方 AUTOMATED: 自动构建 ...
- 获取镜像
docker pull <repository>:<tag>补充:从镜像的拉取 log 我们也可以看出,镜像时一层层文件单独的下载,已经被其他镜像下载过的某层文件,不会重复下载
-
列出本地已下载镜像:
docker image ls | docker image ls node -
删除镜像:
docker image rm [选项] <镜像1> <镜像2> ... // 或 docker rmi [image] <image1> // <镜像1>可以是镜像短ID,镜像名,镜像摘要等-
构建镜像(本地镜像构建)
- 第一步:编写 Dockerfile 脚本文件,利用本地的 Dockerfile 文件构建。这里要了解怎么编写 Dockerfile 脚本文件;
- 第二部:执行 docker 构建命令
docker build [选项] <上下文路径> // 如 docker build -t image-name . // 注意这里有个.这个是表明是在当前命令的上下文目录下,查找 Dockerfile 文件,创建一个名文 image-name 的镜像;
-
补充 Dockerfile 文件编写的常用指令
- FROM node:alpine as builder ---指定一个基本镜像
- ENV NODE_ENV production ---设置环境变量
- WORKDIR /code ---创建工作目录
- ADD yarn.lock package.json /code ---往工作目录中添加文件
- RUN yarn build ---运行指令,可以多次执行
- EXPORT 8000 ---设置端口
- CMD yarn start ---执行命令,只能使用一次
- COPY --from=builder /code/build /usr/share/nginx/html ---复制上一阶段构建打包好的静态包(dist)到 nginx 服务的静态文件存放目录下
- 查找镜像:
-
容器指令操作:
// docker run [选项] 镜像名称 [命令] [参数] docker run -it -P 8000:8000 -name containerName image-name /bin/bash以上是新建并启动一个容器
-
常用选项:-d, -i,-t,-V[绑定卷],-P
-
终止|启动|重启 容器 docker stop [容器 id]
docker start
docker restart -
查找容器 docker ps /docker container ps [-a]
-
进入容器 docker exec [-t] [容器 id]
-
查看容器日志 docker logs [容器 id]
-
分析容器 docker inspect [选项] [容器 id,...]
-
----todo--- 后续学习更新
《深入浅出 Docker》