后端开发人员Docker快速入门
文章目录
Docker快速入门
一般在运行某个程序时,需要安装很多依赖,Docker就是来解决这个问题的
Docker可以将很多依赖都打包在一起,形成一个镜像,可以把这个镜像看成在windows下绿色免安装版本的软件,直接可以运行,也可以多开,但是它远比绿色免安装软件强大。
安装Docker(以CentOS7为例)
1. 卸载旧版本
2. 配置Docker的yum库
3. 安装Docker
4. 启动和校验
5. 配置镜像加速
镜像和容器
当我们利用Docker安装应用时,Docker会自动搜索并下载应用。 镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器。
镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub。

常用命令

- 命令说明文档地址:docs.docker.com
docker pull拉取镜像docker push推送镜像到DockerRegistrydocker images查看本地镜像docker rmi删除本地镜像docker run创建并运行容器(不能重复创建)docker stop停止指定容器docker start启动指定容器docker restart重新启动容器docker rm删除指定容器docker ps查看容器docker logs查看容器运行日志docker exec进入容器docker save保存镜像到本地压缩文件docker load加载本地压缩文件到镜像docker inspect查看容器详细信息
案例演示
数据卷
容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦,由此引出数据卷。数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。

- 我们创建了两个数据卷:
- Nginx容器内部的
/etc/nginx/conf.d目录和/usr/share/nginx/[html](https://www.explinks.com/wiki/what-is-html/)目录分别与两个数据卷关联。 - 而数据卷
conf和html分别指向了宿主机的/etc/nginx目录和/usr/share/nginx/html目录
这样以来,容器内的/etc/nginx/conf.d和/usr/share/nginx/html目录就与宿主机的/etc/nginx和/usr/share/nginx/html目录关联起来,我们称为挂载。此时,我们操作宿主机的/usr/share/nginx/html就是在操作容器内的/usr/share/nginx/html目录。只要我们将静态资源放入宿主机对应目录,就可以被Nginx代理了。
- 这个目录就是默认的存放所有容器数据卷的目录,其下再根据数据卷名称创建新目录,格式为
/var/lib/docker/volumes/<volume_name>/_data。
数据卷常用命令
- 命令说明文档地址:docs.docker.com
docker volume create创建数据卷docker volume ls查看所有数据卷docker volume rm删除指定数据卷docker volume inspect查看某个数据卷的详情docker volume prune清除数据卷
注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建。案例演示
直接挂在本地文件或目录
可以发现,数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们会直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似:
注意:本地目录或文件必须以/或.开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。
镜像后端程序员往往要构建自己的镜像,必须先了解镜像的结构
之前说过,镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖。因此自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运行配置等文件,并且打包而成。所以镜像就是一堆文件的集合。但需要注意的是,镜像文件不是随意堆放的,而是按照操作的步骤分层叠加而成,每一层形成的文件都会单独打包并标记一个唯一id,称为Layer(层)。这样,如果我们构建时用到的某些层其他人已经制作过,就可以直接拷贝使用这些层,而不用重复制作。例如,第一步中需要的Linux运行环境,通用性就很强,所以Docker官方就制作了这样的只包含Linux运行环境的镜像。我们在制作镜像时,就无需重复制作,直接使用Docker官方提供的CentOS或Ubuntu镜像作为基础镜像。然后再搭建其它层即可,这样逐层搭建,最终整个项目的镜像结构如图所示:

Dockerfile
由于制作镜像的过程中,需要逐层处理和打包,比较复杂,所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可。参考语法常用的语法如下:
- 指令说明示例
FROM指定基础镜像ENV设置环境变量,可在后面指令使用COPY拷贝本地文件到镜像的指定目录RUN执行Linux的shell命令,一般是安装过程的命令EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar
网络
一般一个项目往往要访问很多中间件,如mysql,redis,如何让容器之间能够相互访问?默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上,但是,容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能容器的IP会发生变化,连接会失败。所以,我们必须借助于docker的网络功能来解决这个问题

- 命令说明文档地址:docs.docker.com
docker network create创建一个网络docker network ls查看所有网络docker network rm删除指定网络docker network prune清除未使用的网络docker network connect使指定容器连接加入某网络docker network disconnect使指定容器连接离开某网络docker network inspect查看网络详细信息
• 在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身 • 在同一个自定义网络中的容器,可以通过别名互相访问
DockerCompose
一般一个项目需要包含多个容器,手动每个部署非常麻烦,而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。帮助我们实现多个相互关联的Docker容器的快速部署。

- image-20250103162108274
- docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与
docker run参数非常相似。简单对比如下:

- image-20250103162303838
- docker run 参数
-
docker compose 指令
--namecontainer_name容器名称-pports端口映射-eenvironment环境变量-vvolumes数据卷配置--networknetworks网络
案例参考:
- 基础命令
- 类型参数或指令说明
-f指定compose文件的路径和名称-p指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念- Commands
up创建并启动所有service容器down停止并移除所有容器、网络ps列出所有启动的容器logs查看指定容器的日志stop停止容器start启动容器restart重启容器top查看运行的进程exec在指定的运行中容器中执行命令
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 交叉熵的Numpy实现:从理论到实践
- Google DeepMind发布 Genie 3与Shopify:2小时上线电商3D样板间实战
- Gemini Deep Research 技术实战:利用 Gemini Advanced API 构建自动化的深度研究 Agent
- FLUX.1 Kontext API 使用完全指南:解锁文本驱动的智能图像编辑
- 如何防范User-Agent信息伪装引发的API访问风险
- 苹果支付流程:从零开始的接入指南
- 全面掌握 OpenAPI 规范:定义、生成与集成指南
- 深入解析granularity是什么?颗粒度中文详解
- 开发者如何利用缓存技术提升API性能
- Orbitz API 全攻略:旅行社高效整合酒店、航班与租车服务的必读指南
- REST API命名规范的终极指南:清晰度和一致性的最佳实践
- Go:基于 MongoDB 构建 REST API — Fiber 版