Docker的基本概念及使用 | 青训营笔记

145 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第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,代表最新版本的镜像

镜像.png

容器

容器命令.png 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。

dockerfile.png

详细语法说明,请参考官网文档: docs.docker.com/engine/refe…

一些提示

  • Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
  • Dockerfile的第一行必须是FROM,从一个基础镜像来构建
  • 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像

DockerCompose

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

一个例子:

1653143544(1).png

详细语法参考官网:docs.docker.com/compose/com…