Docker学习笔记
Docker
是容器化平台,可以构建、打包、部署和运行应用程序。
Docker可以将应用程序及依赖打包成一个轻量级的便于移植的容器,然后部署到支持Docker的平台。
安装
基本概念
镜像(Image)
Docker镜像是一个只读的模板,包含了创建Docker容器的指令。
还可以基于一个镜像来创建另一个镜像并在此基础上添加一些自定义配置。
容器(Container)
Docker容器是一个独立的环境,它基于Docker镜像创建而来,Docker容器是镜像的实例,容器包含了应用程序及其运行时。
容器之间是相互隔离的,每个容器都有自己的文件系统。可以将容器看作是轻量的、便于移植的虚拟机。
Dockerfile
Dockerfile是一个文本文件,包含了一系列指令,他告诉Docker如何构建镜像。
Docker Volume
Docker Volume是Docker提供的持久化存储机制。
Docker Hub
Docker Hub是一个存储Docker镜像的公共仓库,可以上传或者下载镜像。
命令
1 | # 查看docker版本 |
创建镜像
在项目目录下创建一个Dockerfile来创建镜像。
Dockerfile:
1 | # 使用官方的Node.js镜像作为基础镜像 |
带有TypeScript编译阶段的Dockerfile:
1 | # 构建阶段 |
那么,上面的RUN
和CMD
有什么区别?
RUN是在image文件的构建阶段执行的,CMD是在容器启动后执行的。
一个Dockerfile可以包含多个RUN,但是只能包含一个CMD。
构建镜像
1 | # .代表Dockerfile所在目录 |
运行容器
1 | # 将本地的3000端口映射到容器的3000端口 |
持久化
比如对于数据库容器,每次部署数据库容器都会删除原来的容器,故而容器内的数据也会被删除。
可以将数据库的数据目录挂载到主机的一个目录(或者说映射),这样就不会在部署新容器后丢失数据。
使用Docker Volume
- 创建Docker Volume
1 | docker volume create mysql_data |
- 启动MySQL并挂载Volume到容器内目录
1 | # 将mysql_data这个卷挂载到容器内的/var/lib/mysql,这个目录是MySQL数据库默认的存储位置 |
使用主机目录挂载
还可以直接将主机上的一个目录挂载到容器的MySQL数据存储目录。
- 创建主机目录
1 | mkdir -p /my/mysql_data |
- 启动MySQL容器并挂载目录
1 | docker run -d \ |
Docker Compose
Docker Compose是一个用于定义和管理多容器Docker应用的工具。也可以使用k8s管理Docker容器。
可以使用docker-compose.yml
文件来定义应用的服务、网络和卷等。
1 | version: '3' |
构建并启动docker-compose.yml
中的所有服务:
1 | # 启动应用 |