1.docker是什么
Docker 是一个开源的容器化平台,用于构建、打包和运行应用程序的工具。它通过使用容器技术,将应用程序及其依赖的软件、库和配置打包到一个独立的容器中,从而实现了应用程序的隔离和可移植性。
2.docker解决了什么问题
在不同的开发环境、测试环境和生产环境中,应用程序所依赖的软件和配置可能存在差异,导致应用在不同环境中运行时出现问题。Docker 提供了容器化的解决方案,将应用程序及其依赖的软件、库和配置打包到一个独立的容器中,确保在不同环境中运行时环境的一致性,避免了由环境差异引起的问题。
3.docker的用途
Docker 的主要用途,目前有三大类。
- 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
- 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
- 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
4.docker安装
终端安装:
brew install --cask --appdir=/Applications docker
手动安装:
进入官网:docs.docker.com/desktop/mac…
下载完毕之后就会有这个图标:
验证docker是否正常:
docker version
5.docker的基本概念
5.1 镜像
Docker 镜像是一个只读的模板,包含了运行应用程序所需的所有内容,如操作系统、软件、库和配置文件等。镜像可以作为容器的基础,用于创建和运行容器实例。同一个 image 文件,可以生成多个同时运行的容器实例。
docker images //列出所有本地镜像。
docker pull <image> //从Docker仓库下载一个镜像。
5.2 容器
**image 文件生成的容器实例,本身也是一个文件,称为容器文件。**也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。
docker ps //列出本机正在运行的容器。
docker run <image> //创建并启动一个容器。
5.3 Dockerfile文件
如何可以生成 image 文件?这就需要用到 Dockerfile 文件。它是一个文本文件,用来配置 image。Docker 根据 该文件生成二进制的 image 文件。
6.自定义docker容器
6.1 项目准备
使用koa创建一个简单的服务
// index.js
const Koa = require('koa');
const app = new Koa();
// 添加一个中间件函数
app.use(async (ctx, next) => {
// 设置响应内容和状态码
ctx.body = 'Hello, Koa!';
ctx.status = 200;
// 调用下一个中间件函数
await next();
});
// 启动服务器并监听端口
app.listen(3000, () => {
console.log('Koa server is listening on port 3000');
});
6.2 编写Dockerfile 文件
在项目的根目录下,新建一个文本文件.dockerignore
,.git和node_modules文件将不会被打包进image中
.git
node_modules
在根目录中新增Dockerfile文件(使用时记得删除备注!)
FROM node:8.4 // 使用node 8.4镜像
WORKDIR /koa-demo // 设置容器内的工作目录,可以随意起名字
COPY . /koa-demo // 将本地所有文件拷贝到容器中的koa-demo文件里
RUN npm install --registry=https://registry.npm.taobao.org // 下载依赖
EXPOSE 3000 // 将容器的3000端口暴露出来
CMD node index.js // 指定容器启动时要执行的命命令
6.3 构建镜像
在终端中执行下面命令,来生成一个镜像
docker build -t koa-demo .
-t参数:指定构建的镜像的名称和标签
. 参数:表示 Dockerfile 所在的当前目录。
等待执行完毕后使用docker images
来查看新生成的镜像
6.4 启动容器
在终端中执行下面命令,来启动容器
docker run -d -p 3000:3000 koa-demo
-d参数:-d 参数告诉 Docker 在后台运行容器,并返回容器的 ID。这意味着容器将在后台以守护进程的形式运行,不会阻塞终端或命令行。
-p参数:将本机的3000端口映射到容器的3000端口
koa-demo:代表要启动的镜像名称
当访问http://localhost:3000/
正常显示Hello,Koa!
时代表容器启动成功了
7.其他常用的docker命令
镜像相关命令:
docker image ls:列出所有本地镜像。
docker pull <image>:从Docker仓库下载一个镜像。
docker build -t <tag> <path>:根据Dockerfile在指定路径下构建一个镜像。
docker push <image>:将本地镜像推送到Docker仓库。
docker rmi <image>:删除一个本地镜像。
容器相关命令:
docker run <image>:创建并启动一个容器。
docker start <container>:启动已经创建的容器。
docker stop <container>:停止一个运行中的容器。
docker restart <container>:重启一个容器。
docker rm <container>:删除一个容器。
docker ps:列出所有正在运行的容器。
docker ps -a:列出所有容器(包括已停止的)。
docker logs <container>:查看容器的日志输出。
docker exec -it <container> <command>:在运行中的容器中执行命令。