使用docker编排容器
文章目录使用Dockerfile构建一个自定义的nginxDockerfile的常用指令(实践)使用Dockerfile构建注册中心eureka镜像将自己的项目打成jar包编辑一个Dockerfile构建镜像启动并查看是否可以运行使用Docker Compose构建容器Docker Compose是什么它解决什么问题安装Docker Composedocker-compose.yml文件指令介绍(实践)使用Docker Compose构建微服务编写一个Dockerfile编写一个docker-compose.yml使用docker-compose up 启动测试关于Docker Compose更多命令查看帮助。验证docker-compose.yml文件。执行docker-compose指定文件名字拉取服务依赖的镜像启动容器查看日志列出运行进程在容器上执行一条命令进入容器暂停服务容器恢复服务容器重启服务容器启动服务容器停止服务容器通过发送SIGKILL信号停止指定服务的容器。删除服务停止状态容器。停止并删除所有服务的容器、网络、镜像、数据卷。打印服务容器所对应的镜像打印指定服务容器的某个端口所映射的宿主机端口显示正在运行的进程参考文献使用Dockerfile构建一个自定义的nginx首先用docker拉一个nginx镜像dockerpull nginx拉取完成后编辑一个Dockerfile文件vimDockerfile命令如下所示,FROM后面跟的你的基础镜像而run则是表示你构建镜像时需要执行的指令下面的指令意思就构建一个自定义的nginx镜像最后知名nginx启动后的欢迎界面路径为当前系统的绝对路径FROM nginx RUNechoh1 this is my Spring Cloud and Docker study Demo/h1 /usr/share/nginx/html/index.html在Dockerfile的目录下运行如下命令可以看到命令最后面有个点.这个点就是用于参数传递表示当前路径Dockerfiledockerbuild-tnginx:my.键入如下命令即可看到我们的自定义的镜像构建完成了dockerimages完成后我们尝试创建一个容器运行一下如下所示笔者使用bridge映射91端口启动一个nginxdockerrun-d-p91:80 nginx:my可以看到笔者通过91端口访问到了自己创建的容器Dockerfile的常用指令ADD:该命令会将本地文件复制到docker容器中格式:ADD src(源文件或者目录)desc(容器目标文件或者目标目录)ARG: 设置的docker构建参数信息ARGusername用户名CMD:用于执行容器提供的默认值在Dockerfile文件中无论你配置多少条cmd只会以最后一条为准即只会执行最后一条指令支持的格式有CMD[executable,param1,param2]CMD[param1,param2]CMDcommandparam1 param2(在shell中执行)示例cmdechothis is a testCOPY: 和ADD命令类似使用也类似ENTRYPOINT:和cmd一样都是指定Docker容器启动时需要执行的指令可以多次设置但还是以最后一条为准使用格式也和cmd差不多示例如下所示ENTRYPOINT[java,-Djava.security.egdfile:/dev/./urandom,-jar,/app.jar]ENV:设置环境变量示例ENV JAVA_HOME /path/to/javaEXPOSE:说明运行容器提供的端口但并不会因为该声明而打开相应端口该指令主要作用是帮助理解该镜像服务的守护端口当然在容器未指明端口随机运行时会自动映射EXPOSE的端口EXPOSE8761FROM:指定基础镜像优点类似java的extends关键字需要注意的时FROM指令必须用在所有指令之前MAINTAINER:指明维护者信息用于作为Dockerfile的署名示例MAINTAINER 名字123qq.comUSER:用户设置启动镜像时所用的用户id或者uid写在RUN和CMD以及ENTRYPOINT后的内容都将用该用户执行示例USERzhangVOLUME:该指令使容器的一个容器具有持久化存储的功能该目录可被容器本身使用也可以共享给其他容器当容器中有数据需要持久化时就可以在Dockerfile中添加该指令格式如下,意为将数据持久化到/data目录中VOLUME /data(实践)使用Dockerfile构建注册中心eureka镜像源码地址如下读者可以自行获取https://github.com/itmuch/spring-cloud-docker-microservice-book-code-docker/tree/master/docker-1-simple/microservice-discovery-eureka注意将spring boot版本改为!-- 引入spring boot的依赖 -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.2.2.RELEASE/version /parentspring cloud版本改为!-- 引入spring cloud的依赖 -- dependencyManagement dependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId versionHoxton.SR3/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement将自己的项目打成jar包编辑一个Dockerfile在上文扔到服务器中的jar包位置编写一个DockerfilevimDockerfile编辑的内容如下# 拉取并使用java8作为基础镜像FROM openjdk:8# 将本地文件挂到tmp中VOLUME /tmp# 复制文件到容器ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar# 声明需要暴露的端口EXPOSE8761# 配置容器启动后的命令ENTRYPOINT[java,-Djava.security.egdfile:/dev/./urandom,-jar,/app.jar]构建镜像如下命令即可创建一个标签为zsy/microservice-eureka的镜像:dockerbuild-tzsy/microservice-eureka .启动并查看是否可以运行dockerrun-d-p8761:8761 zsy/microservice-eureka使用服务器ip地址:8761确认是否可以访问使用Docker Compose构建容器Docker Compose是什么它解决什么问题我们的使用docker部署微服务时如果每个微服务都要手动启停效率是非常低的所以我们需要一个工具来一键管理这庞大的微服务Docker Compose就是最好的帮手。安装Docker Compose如下命令所示这条命令会自动安装适应系统版本的composecurl-Lhttps://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname-s)-$(uname-m)-o/usr/local/bin/docker-compose为命令添加可执行权限chmodx /usr/local/bin/docker-compose查看是否安装成功docker-compose--version如下图所示显示版本号即说明安装成功了安装命令补全工具curl-Lhttps://raw.githubusercontent.com/docker/compose/$(docker-composeversion--short)/contrib/completion/bash/docker-compose-o/etc/bash_completion.d/docker-composedocker-compose.yml文件指令介绍image:指定镜像名称或者镜像id如果该镜像在本地不存在Compose会尝试pull下来。示例image:javabuild:指定Dockerfile的路径如下所示这就说明Dockerfile文件在当前目录的dir目录下build: ./dircommand:覆盖之前的容器启动后默认执行的指令示例command: bundleexecthin-p3000# 也可以是一个list类似于Dockerfile总的CMD指令格式如下command:[bundle, exec, thin, -p,3000]links:链接到其他服务中的容器。可以指定服务名称然后给他起一个别名来使用如下所示连接到db我们给他起了个别名database后续需要使用这个链接的时候一律使用databaseweb: links: - db - db:database - redisexternal_links:表示链接到docker-compose.yml外部的容器甚至并非Compose管理的容器特别是对于那些提供共享容器或共同服务。格式跟links类似示例external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresqlports:暴露端口信息。使用宿主端口:容器端口的格式或者仅仅指定容器的端口此时宿主机将会随机指定端口类似于docker run -p示例ports: -3000-3000-3005-8000:8000-9090-9091:8080-8081-49100:22-127.0.0.1:8001:8001-127.0.0.1:5000-5010:5000-5010expose:暴露端口只将端口暴露给连接的服务而不暴露给宿主机示例expose: -3000-8000volumes:卷挂载路径设置。可以设置宿主机路径HOST:CONTAINER或加上访问模式HOST:CONTAINER:ro。示例volumes:# Just specify a path and let the Engine create a volume- /var/lib/mysql# Specify an absolute path mapping- /opt/data:/var/lib/mysql# Path on the host, relative to the Compose file- ./cache:/tmp/cache# User-relative path- ~/configs:/etc/configs/:ro# Named volume- datavolume:/var/lib/mysqlvolumes_from:从另一个服务或者容器挂载卷。可以指定只读或者可读写如果访问模式没有指定则默认是可读写。示例volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rwenvironment:设置环境变量。可以使用数组或者字典两种方式。只有一个key的环境变量可以在运行Compose的机器上找到对应的值这有助于加密的或者特殊主机的值。示例environment: RACK_ENV: development SHOW:trueSESSION_SECRET: environment: -RACK_ENVdevelopment -SHOWtrue - SESSION_SECRETenv_file:从文件中获取环境变量可以为单独的文件路径或列表。如果通过docker-compose -f FILE指定了模板文件则env_file中路径会基于模板文件路径。如果有变量名称与environment 指令冲突则以envirment为准。示例env_file: .env env_file: - ./common.env - ./apps/web.env - /opt/secrets.envextends:继承另一个服务基于已有的服务进行扩展。net:设置网络模式。示例net:bridgenet:hostnet:nonenet:container:[service name or container name/id]dns:配置dns服务器。可以是一个值也可以是一个列表。示例dns:8.8.8.8 dns: -8.8.8.8 -9.9.9.9dns_search:配置DNS的搜索域可以是一个值也可以是一个列表示例dns_search: example.com dns_search: - dc1.example.com - dc2.example.com(实践)使用Docker Compose构建微服务我们继续使用上文的jar包编写一个DockerfileFROM java:8 VOLUME /tmp ADD microservice-discovery-eureka-0.0.1.jar app.jar EXPOSE8761ENTRYPOINT[java,-Djava.security.egdfile:/dev/./urandom,-jar,/app.jar]编写一个docker-compose.ymlversion:2services: eureka:# 指定服务名称build:.# 使用当前路径的Dockerfileports: -8761:8761# 类似与docker run -p 的端口映射使用docker-compose up 启动如下命令所示该命令为前台启动我们建议后台启动docker-composeup后台启动命令,注意这条命令不仅仅会帮我启动还会重新构建生成容器docker-compose up -d测试如下图所示使用ip:8761即可进入eureka界面说明配置完成了关于Docker Compose更多命令查看帮助。docker-compose -help验证docker-compose.yml文件。# 当配置正确时不输出任何内容当配置错误时输出错误信息。 docker-compose config -q执行docker-compose指定文件名字# -f, --file FILE 指定使用的 Compose 模板文件默认为 docker-compose.yml可以多次指定 docker-compose -f aa.yml up -d拉取服务依赖的镜像# 拉取工程中所有服务依赖的镜像 docker-compose pull # 拉取工程中 nginx 服务依赖的镜像 docker-compose pull nginx # 拉取镜像过程中不打印拉取进度信息 docker-compose pull -q启动容器docker-compose up创建并启动所有服务的容器。指定多个yml加-f选项。以守护进程模式运行加-d选项。# 前台启动 docker-compose up # 后台启动 docker-compose up -d # -f 指定使用的 Compose 模板文件默认为 docker-compose.yml可以多次指定指定多个 yml docker-compose -f docker-compose.yml up -d查看日志docker-compose logs查看服务容器的输出日志。默认情况下docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过--no-color来关闭颜色。# 输出日志不同的服务输出使用不同的颜色来区分 docker-compose logs # 跟踪日志输出 docker-compose logs -f # 关闭颜色 docker-compose logs --no-color列出运行进程docker-compose ps列出工程中所有服务的容器。# 列出工程中所有服务的容器 docker-compose ps # 列出工程中指定服务的容器 docker-compose ps nginx在容器上执行一条命令docker-compose run在指定服务容器上执行一个命令。# 在工程中指定服务的容器上执行 echo helloworld docker-compose run nginx echo helloworld进入容器docker-compose exec 容器名称 bash进入服务容器。# 进入工程中指定服务的容器 docker-compose exec nginx bash # 当一个服务拥有多个容器时可通过 --index 参数进入到该服务下的任何容器 docker-compose exec --index1 nginx bash暂停服务容器# 暂停工程中所有服务的容器 docker-compose pause # 暂停工程中指定服务的容器 docker-compose pause nginx恢复服务容器# 恢复工程中所有服务的容器 docker-compose unpause # 恢复工程中指定服务的容器 docker-compose unpause nginx重启服务容器# 重启工程中所有服务的容器 docker-compose restart # 重启工程中指定服务的容器 docker-compose restart nginx启动服务容器# 启动工程中所有服务的容器 docker-compose start # 启动工程中指定服务的容器 docker-compose start nginx停止服务容器# 停止工程中所有服务的容器 docker-compose stop # 停止工程中指定服务的容器 docker-compose stop nginx通过发送SIGKILL信号停止指定服务的容器。# 通过发送 SIGKILL 信号停止工程中指定服务的容器 docker-compose kill nginx删除服务停止状态容器。# 删除所有停止状态服务的容器 docker-compose rm # 先停止所有服务的容器再删除所有服务的容器 docker-compose rm -s # 不询问是否删除直接删除 docker-compose rm -f # 删除服务容器挂载的数据卷 docker-compose rm -v # 删除工程中指定服务的容器 docker-compose rm -sv nginx停止并删除所有服务的容器、网络、镜像、数据卷。# 停止并删除工程中所有服务的容器、网络 docker-compose stop # 停止并删除工程中所有服务的容器、网络、镜像 docker-compose down --rmi all # 停止并删除工程中所有服务的容器、网络、数据卷 docker-compose down -v打印服务容器所对应的镜像# 打印所有服务的容器所对应的镜像 docker-compose images # 打印指定服务的容器所对应的镜像 docker-compose images nginx打印指定服务容器的某个端口所映射的宿主机端口docker-compose port nginx 80显示正在运行的进程# 显示工程中所有服务的容器正在运行的进程 docker-compose top # 显示工程中指定服务的容器正在运行的进程 docker-compose top nginx参考文献《Spring Cloud与Docker微服务架构实战》大目 / spring-cloud-bookdocker 构建eureka server 高可用Docker-compose 常用命令docker-compose安装部署sentinel-dashboard

相关新闻

unity Des和AES 加密解密

unity Des和AES 加密解密

DesTool.cs Des工具类脚本using System.IO; using System.Text; using System.Security.Cryptography; using System;public class DesTool {#region 密钥//private static string key "abcd1234"; //密钥(长度必须8位以上) #e…

2026/9/1 12:02:23 阅读更多 →
git操作命令大全

git操作命令大全

常用操作指令命令作用git add [file] 或 .将file或所有文件的改动从工作区添加到暂存区git commit -m ‘提交说明’将改动从暂存区提交到本地仓库git pull拉去远程仓库的改动至工作区先 git fetch, 然后 git merge先拉去远程仓库改动,然后合并到工作区&a…

2026/9/2 14:02:58 阅读更多 →
JAVA各种加密与解密方式

JAVA各种加密与解密方式

一、凯撒加密 在密码学中,凯撒加密是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。这个加密方法是以罗马共和时期恺撒的名字命…

2026/9/1 12:01:22 阅读更多 →

最新新闻

WIFI大师小程序源码深度解析:从部署到安全合规与二次开发

WIFI大师小程序源码深度解析:从部署到安全合规与二次开发

简介:WIFI大师小程序4.1.9独立版源码是一套面向创业者、本地生活服务商及中小型技术团队的共享WiFi平台解决方案,旨在帮助用户快速搭建并运营自有品牌WiFi共享网络,解决本地化流量入口构建、多角色分佣体系落地及轻量级物联网服务集成等实际问…

2026/9/2 14:02:18 阅读更多 →
STM32雷达扫描项目实战:舵机、超声波与TFT屏的嵌入式融合

STM32雷达扫描项目实战:舵机、超声波与TFT屏的嵌入式融合

简介:这是一套基于STM32F103C8T6的嵌入式雷达系统实战项目资源,面向嵌入式初学者与课程设计学生,解决超声波测距、舵机协同控制及TFT-LCD图形化显示等典型综合开发问题。资源包共1024个文件,涵盖563个C源码(含驱动与算…

2026/9/2 14:02:18 阅读更多 →
基于Python与深度学习的恶意代码检测系统:从静态分析到多模态融合

基于Python与深度学习的恶意代码检测系统:从静态分析到多模态融合

简介:本资源是一套基于Python实现的深度学习恶意代码检测系统,面向网络安全方向的学习者、高校人工智能课程实践者及初级安全研发人员,聚焦解决二进制程序中恶意行为自动识别这一典型工业场景问题。压缩包共6个文件(17KB&#xff…

2026/9/2 14:02:18 阅读更多 →
Hugging Face 安全实践:从数据集下载到供应链防护

Hugging Face 安全实践:从数据集下载到供应链防护

1. 背景:一场关于 Hugging Face 与 AI 安全的讨论1.1 Hugging Face 是什么Hugging Face 是目前人工智能领域使用最广泛的模型与数据集托管平台之一。大家平时在项目中用到的 Transformers、Diffusers、Datasets 等库,都和 Hugging Face 生态紧密相关。简…

2026/9/2 14:02:18 阅读更多 →
安全基准怎么建?从风险判断到内容防护的落地指南

安全基准怎么建?从风险判断到内容防护的落地指南

最近网上有个梗,流传度不算低:“若诈骗有基准,将以奥特曼命名。”第一次看到这句话的人,多半会笑一下,因为它把两个完全不搭界的东西硬凑在一起:一边是严肃的“诈骗”话题,一边是代表“正义”的…

2026/9/2 14:02:18 阅读更多 →
从逻辑推理到代码实现:手把手构建命题逻辑消解证明器

从逻辑推理到代码实现:手把手构建命题逻辑消解证明器

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 14:01:17 阅读更多 →

日新闻

QEMU为什么能模拟不同CPU?从ISA、CPU模型到指令翻译讲起

QEMU为什么能模拟不同CPU?从ISA、CPU模型到指令翻译讲起

1. 引言:一个软件为何能“伪装”成不同CPUQEMU 是一款广为人知的开源模拟器,它既能在一台 x86 电脑上运行 ARM 系统,也能在 ARM 开发板上启动 x86 的 Linux 发行版。很多人第一次接触 QEMU 时都会好奇:一个纯软件程序,…

2026/9/2 0:00:30 阅读更多 →
单片机计算机毕设之基于 STM32 或 51 单片机的感知式智能垃圾桶硬件控制系统设计 基于 STM32 或 51 单片机的安全防护型智能垃圾桶装置设计(025005)

单片机计算机毕设之基于 STM32 或 51 单片机的感知式智能垃圾桶硬件控制系统设计 基于 STM32 或 51 单片机的安全防护型智能垃圾桶装置设计(025005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:00:30 阅读更多 →
单片机计算机毕设之基于 ESP8266 的智能垃圾分类桶 APP 监控系统设计与实现 基于单片机的超声波满溢检测垃圾分类装置设计(025105)

单片机计算机毕设之基于 ESP8266 的智能垃圾分类桶 APP 监控系统设计与实现 基于单片机的超声波满溢检测垃圾分类装置设计(025105)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:00:30 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/9/1 19:44:48 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/9/1 18:13:19 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/9/2 1:01:37 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/2 1:06:24 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/2 1:01:13 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/2 2:01:56 阅读更多 →