这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记
项目中团队用到了Docker,所以去复习了Docker的相关概念及使用方法
镜像和容器
- 镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
- 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。
Docker和DockerHub
DockerHub:DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。
国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务、阿里云镜像库等。
Docker是一个CS架构的程序,由两部分组成:
- 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
- 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
在Linux中通过命令启动docker:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
镜像相关命令
- 镜像名称一般分两部分组成:[repository]:[tag],如mysql:5.7
- 在没有指定tag时,默认是latest,代表最新版本的镜像
容器
docker run重要操作的常见参数
- --name:指定容器名称
- -p:指定端口映射
- -d:让容器后台运行
查看容器日志的命令:
docker logs添加 -f 参数可以持续查看日志
查看容器状态:docker ps添加-a参数查看所有状态的容器
删除容器:docker rm不能删除运行中的容器,除非添加 -f 参数
进入容器:
命令是docker exec -it [容器名] [要执行的命令]exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的
数据卷
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
数据卷操作的基本语法:
docker volume[COMMAND]
根据command确定下一步操作:
create 创建一个volume
inspect 显示一个或多个volume信息
ls 列出所有volume
prune 删除未使用的volume
rm 删除一个或多个指定的volume
挂载数据卷
可以通过-v参数来挂载一个数据卷到某个容器目录,如果容器运行时volume不存在,会自动被创建出来
docker run \ 创建并运行容器
--name mn \ 给容器起名字叫mn
-v html:/root/html \ 把html数据卷挂载到容器内的/root/html这个目录中
-p 8080:80 把宿主机的8080端口映射到容器内的80端口
nginx \ 镜像名称
Dockerfile自定义镜像
镜像是分层结构,每一层称为一个Layer
- BaseImage层:包含基本的系统函数库、环境变量、文件系统
- Entrypoint:入口,是镜像中应用启动的命令
- 其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
详细语法说明,请参考官网文档: docs.docker.com/engine/refe…
一些提示
- Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
- Dockerfile的第一行必须是FROM,从一个基础镜像来构建
- 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像
DockerCompose
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
一个例子:
详细语法参考官网:docs.docker.com/compose/com…