Docker安装

一键安装命令

sudo curl -fsSL https://get.docker.com| bash -s docker --mirror Aliyun

启动docker

sudo service docker start

pull镜像加速配置

sudo vi /etc/docker/daemon.json

输入下列内容,最后按ESC,输入 :wq! 保存退出。

{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.1panel.live","https://hub.rat.dev"]
}

重启docker

sudo service docker restart

镜像的获取和管理

获取Docker镜像:docker pull

docker pull 镜像名称:标签

比如:

docker pull nginx # 省略标签默认为latest,拉取最新Nginx官方镜像
docker pull postgres:14 # PostgreSQL 14镜像
docker pull your_docker_username/project:1.0

查看管理本地镜像

列出本地镜像:docker imagesdocker image ls

docker images
docker image ls

删除本地镜像:docker rmidocker image rm

docker rmi 镜像id或名称

注:如果镜像正在被容器使用(即使容器已经停止),需要先删除容器。
强制删除:docker rmi -f 镜像id或名称

将docker镜像保存为.tar文件

mkdir -p ~/docker_images/
docker save -o ~/docker_images/project_images.tar 镜像名字:标签

在目标机器加载镜像

docker load -i ./project_images.tar

镜像的运行

运行镜像(创建容器): docker run

docker run 选项 镜像名称:标签 命令 参数

常用选项:

-d / --detach : 后台运行

docker run -d nginx

-p 主机端口:容器端口 / --publish 端口映射:将宿主机端口映射到容器内部端口,从外部访问容器中的服务

--name 容器名称:指定容器名称,如果不指定,docker随机生成

docker run -d -p 8080:80 --name my-nginx nginx
# 将主机8080映射到容器80
# 访问主机:http://localhost:8080

-it : 交互式运行
-i / --interactive : 保持标准输入打开
-t / --tty : 分配伪终端(TTY)

docker run -it ubuntu:22.04 bash
# 启动一个ubuntu容器并进入bash shell

--rm : 容器退出时,自动删除容器

docker run -it --rm ubuntu:22.04 bash

-v: 宿主机路径:容器内路径:权限 / --volume
权限:ro(只读)或rw(读写)

# 将本地项目代码映射到容器
docker run -it --rm -p 80:80 \
-v /home/a/java-app:/app \
java-dev-image:latest bash

--network 网络名称:将容器连接到指定的Docker网络

docker run -d --network my-custom-network my-app-image

容器的管理操作

查看正在运行的容器:docker ps

docker ps```
查看所有容器(包括已经停止的):`docker ps -a````bash
docker ps -a

docker compose up:基于 docker-compose.yml 创建并启动容器。
docker compose down:删除容器,再次启动时重新创建。

docker compose up
docker compose down

停止容器:docker stop
保留容器及其数据。

启动容器:docker start
用来启动已经创建好的容器,不会读取 docker-compose.yml

docker stop 容器id或名称
docker start 容器id或名称

进入正在运行的容器:docker exec

docker exec -it 容器id或名称 bash
# 退出容器shell: exit

从容器复制文件到宿主机:docker cp 容器id或名称:/path /path
从宿主机复制文件到容器:docker cp /path 容器id或名称:/path

Docker Compose 与多服务编排

在多服务应用场景下,手动编写和管理复杂的 docker run 命令会变得非常繁琐。docker-compose 应运而生,它允许你通过一个 YAML 文件(docker-compose.yml)来定义和运行多个 Docker 容器应用。它极大地简化了多容器应用的部署和管理。

Docker Compose 的核心作用

docker-compose.yml 的作用是在 Dockerfile 构建好的镜像基础上,进一步定义这些服务在运行时如何协同工作。它关注的是整个应用栈的运行时配置和生命周期管理,例如:

  • 服务定义:你的 appfrontenddb 等,每个都是一个服务。
  • 镜像来源:可以直接引用预构建的镜像 (image: nginx),也可以指定通过 Dockerfile 构建 (build: .)。
  • 端口映射:将容器的端口映射到宿主机的端口,这是实际的对外暴露。
  • 数据卷挂载:将宿主机的文件或目录挂载到容器内部,用于数据持久化或动态配置。
  • 环境变量:向容器注入运行时所需的环境变量。
  • 命令覆盖:覆盖 Dockerfile 中定义的默认启动命令,常用于传递运行时参数。
  • 服务依赖:定义服务启动顺序,确保依赖的服务先启动。
  • 网络配置:定义服务之间的通信方式,docker-compose 会自动处理服务发现。
  • 健康检查:定义如何判断服务是否正常运行。

Dockerfile 专注于构建一个独立的、可运行的镜像,它描述的是镜像在构建时的状态和内容。而 docker-compose.yml 则专注于如何将这些独立的镜像组装起来,形成一个完整的、可部署的应用系统,并处理它们之间的协作和运行环境。这种职责分离使得 Dockerfile 可以更简洁地专注于其核心任务,而将复杂的部署细节委托给 docker-compose.yml

单独构建与运行服务

虽然 docker-compose 极大地简化了多服务管理,但理解如何单独构建和运行每个服务仍然很重要。下面我们将以你的项目为例,展示如何为每个服务单独编写 Dockerfile(如果需要)并使用 docker run 命令来启动它们。

1. 数据库服务 (db)

docker-compose.yml 中,db 服务直接使用了 postgis/postgis:17-3.4-alpine 官方镜像。通常不需要为它单独编写 Dockerfile,直接拉取并使用即可。

  • Dockerfile

如果需要为 db 服务定制镜像(例如,在镜像中预装特定的数据库扩展或初始化脚本),创建一个 Dockerfile_db

# Dockerfile_db
FROM postgis/postgis:17-3.4-alpine# 示例:如果要在构建时加入初始化脚本
# COPY ./db_init_scripts/ /docker-entrypoint-initdb.d/

构建镜像 (如果创建了 Dockerfile_db):

docker build -t my-custom-postgis -f Dockerfile_db .

单独运行 db 服务的 docker run 命令

docker-compose.ymldb 服务的所有配置转换为 docker run 命令的参数。首先手动创建一个 Docker 网络,因为 docker-compose 会自动创建。

# 1. 创建网络 (如果 app-network 不存在)
docker network create app-network# 2. 运行 db 服务
# 注意:以下命令中的环境变量值替换为默认值,实际使用时根据需要修改。
docker run -d \--name postgres \-p 54321:5432 \--restart always \-e POSTGRES_USER="postgres" \-e POSTGRES_PASSWORD="postgres" \-e POSTGRES_DB="postgis_test" \-e PGDATA="/var/lib/postgresql/data/pgdata" \-v ./volumes/db/data:/var/lib/postgresql/data \-v /home/a/Downloads/数据库:/docker-entrypoint-initdb.d \--network app-network \postgis/postgis:17-3.4-alpine \postgres -c 'max_connections=100' \-c 'shared_buffers=128MB' \-c 'work_mem=4MB' \-c 'maintenance_work_mem=64MB' \-c 'effective_cache_size=4096MB'
2. 前端服务 (frontend)

前端服务使用 Nginx 提供静态文件和反向代理。

Dockerfile

这是项目中用于构建 frontend 镜像的 Dockerfile

# Dockerfile (for frontend)
FROM nginx
COPY ./ /home/mapsys
COPY default.conf /etc/nginx/nginx.conf

构建镜像:

docker build -t front .

单独运行 frontend 服务的 docker run 命令

# 运行 frontend 服务
# 确保 app-network 已经创建 (见 db 服务部分)
docker run -d \--name frontend \-p 18000:80 \--network app-network \front

注意: 如果 default.conf/home/mapsys 中的内容在容器启动后需要动态更新,需要在 docker run 命令中添加 -v 参数进行卷挂载,例如:
-v ./default.conf:/etc/nginx/nginx.conf
-v /path/to/your/front/files:/home/mapsys

3. 后端应用服务 (app)

后端应用是基于 Java 的 Spring Boot 应用。

Dockerfile

项目中用于构建 app 镜像的 Dockerfile_app

# Dockerfile_app (for app)
FROM openjdk:8-jreCOPY ./server/geospatial-0.0.1-SNAPSHOT.jar /usr/app/geospatial-0.0.1-SNAPSHOT.jar

构建镜像:

docker build -t app -f Dockerfile_app .

单独运行 app 服务的 docker run 命令

# 运行 app 服务
# 确保 db 服务和 app-network 已经创建并运行
docker run -d \--name java-app \-p 18080:8080 \--network app-network \app \java -jar /usr/app/geospatial-0.0.1-SNAPSHOT.jar \--spring.datasource.url=jdbc:postgresql://db:54321/postgis_test?stringtype=unspecified \--spring.datasource.username=postgres \--spring.datasource.password=postgres

注意: 在这个 docker run 命令中,--network app-network 是关键,它使得 java-app 容器能够通过服务名 db 访问到 postgres 容器(数据库)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93445.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93445.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93445.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机探测器技术解析

一、工作模式 无人机探测器通过多模式协同实现全流程防御闭环: 1. 主动扫描模式 雷达主动探测:发射电磁波(如Ka/Ku波段),通过回波时差与多普勒频移计算目标距离、速度及航向,适用于广域扫描(…

Linux学习-软件编程(进程与线程)

进程回收wait原型:pid_t wait(int *wstatus); 功能:回收子进程空间 参数:wstatus:存放子进程结束状态空间的首地址 返回值:成功返回回收到的子进程的PID失败返回-1WIFEXITED(wstatus):测试进程是否正常结束…

大模型微调分布式训练-大模型压缩训练(知识蒸馏)-大模型推理部署(分布式推理与量化部署)-大模型评估测试(OpenCompass)

大模型微调分布式训练 LLama Factory与Xtuner分布式微调大模型 大模型分布式微调训练的基本概念 为什么需要分布式训练? 模型规模爆炸:现代大模型(如GPT-3、LLaMA等)参数量达千亿级别,单卡GPU无法存储完整模型。 …

物联网、大数据与云计算持续发展,楼宇自控系统应用日益广泛

在深圳某智慧园区的控制中心,管理人员通过云端平台实时监控着5公里外园区内每台空调的运行参数、每盏路灯的开关状态和每个区域的能耗数据。当系统检测到某栋楼宇的电梯运行振动异常时,大数据算法自动预判可能的故障点并推送维修建议;物联网传…

在实验室连接地下车库工控机及其数据采集设备

在实验室连接地下车库工控机及其数据采集设备 我们小组为项目的数据采集组,目前在车顶集成了一个工控机、两个激光雷达、两个摄像头、一个户外电源 由于地下车库蚊子太多了,我们可受不了这个苦,所以想坐在实验室吹着空调就能连接工控机来修改…

icmpsh、PingTunnel--安装、使用

用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技…

系统思考:情绪内耗与思维模式

我们正在努力解决的问题,很多时候,根源就在我们自己。 在日常的工作和生活中,我们常常感到焦虑、内耗和失控。这些情绪和状态,似乎总是在不断循环。但如果停下来仔细思考,会发现,问题的背后,并不…

详解grafana k6 中stage的核心概念与作用

在Grafana k6中,​​Stage(阶段)​​ 是负载测试脚本的核心配置概念,用于动态控制虚拟用户(VUs)的数量随时间的变化。通过定义多个阶段,用户可以模拟真实场景中的流量波动(如用户逐步…

JS 和 JSX 的区别

JS 和 JSX 是两种不同的概念,尽管它们都与 JavaScript 密切相关,尤其是在 React 开发中。以下是它们的主要区别:1. 定义JS (JavaScript): 一种通用的编程语言,用于开发动态网页、服务器端应用程序等。它是标准的 ECMAScript 语言。…

Linux软件编程-进程(2)及线程(1)

1.进程回收资源空间&#xff08;1&#xff09;wait函数头文件&#xff1a;#include <sys/types.h>#include <sys/wait.h>函数接口&#xff1a;pid_t wait(int *wstatus);功能&#xff1a;阻塞等待回收子进程的资源空间参数&#xff1a;wstatus &#xff1a;保存子进…

java 集合 之 集合工具类Collections

前言早期开发者经常需要对集合进行各种操作比如排序、查找最大最小值等等但是当时没有统一的工具类来处理所以导致代码重复且容易出错java.util.Collections 工具类的引入为开发者提供了大量 静态方法 来操作集合它就像一个经验丰富的助手和数组工具类 Arrays 一样避免了我们重…

2025 年电赛 C 题 发挥部分 1:多正方形 / 重叠正方形高精度识别与最小边长测量

2025 年全国大学生电子设计竞赛 C 题 发挥部分 1&#xff1a;多正方形 / 重叠正方形高精度识别与最小边长测量 香橙派 OpenCV C 全流程解析 目录 赛题背景与需求技术难点全景图系统总体架构硬件平台与接线软件架构与线程模型算法流水线逐帧拆解 6.1 图像预处理6.2 轮廓提取与…

【自动驾驶】自动驾驶概述 ② ( 自动驾驶技术路径 | L0 ~ L5 级别自动驾驶 )

文章目录一、自动驾驶技术路径1、L0 级别 自动驾驶2、L1 级别 自动驾驶3、L2 级别 自动驾驶4、L3 级别 自动驾驶5、L4 级别 自动驾驶6、L5 级别 自动驾驶一、自动驾驶技术路径 美国汽车工程师学会 ( SAE ) 将 自动驾驶 分为 L0 ~ L5 六个级别 : 其中 L0 级别 是 完全手动 , L5…

C++少儿编程(二十二)—条件结构

1.理解条件结构小朋友们&#xff0c;今天让我们一起来探索一个神奇而有趣的知识——程序的条件结构&#xff01;首先&#xff0c;让我们来想象一个有趣的场景。比如说&#xff0c;你们正在准备去公园玩耍。在出发之前&#xff0c;你们会看看天气怎么样。如果天气晴朗&#xff0…

Ubuntu20.04下Px4使用UORB发布消息

1 .msg文件夹定义数据类型及 变量名文件位置如图&#xff0c;在PX4-Autopilot/msg文件夹下&#xff0c;笔者创建的文件名为gps_msg.msggps_msg.msg内容如下 uint64 timestamp # 时间戳 float32 latitude float32 longitude float32 altitude 同时&#xff0c;在CM…

three.js学习记录(第二节:鼠标控制相机移动)

效果展示&#xff1a; 鼠标控制一、鼠标控制 - 轨道控制器&#xff08;OrbitControls&#xff09; 1. 从nodeModules中导入OrbitControls&#xff0c;OrbitControls 是一个附加组件&#xff0c;必须显式导入 import { OrbitControls } from "three/examples/jsm/controls/…

Shortest Routes II(Floyd最短路)

题目描述There are n cities and m roads between them. Your task is to process q queries where you have to determine the length of the shortest route between two given cities.输入The first input line has three integers n, m and q: the number of cities, roads…

分享一个基于Hadoop的二手房销售签约数据分析与可视化系统,基于Python可视化的二手房销售数据分析平台

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题…

STM32的PWM

PWM作为硬件中几乎不可或缺的存在&#xff0c;学会 PWM&#xff0c;等于打通了 STM32 的“定时器体系”。学一次&#xff0c;STM32 全系列&#xff08;甚至 AVR、PIC、ESP32&#xff09;都能通用。硬件只要一个 I/O 就能驱动功率模块&#xff0c;非常省成本。不会 PWM&#xff…

OpenCompass傻瓜式入门教程

文章目录1 我也许不是傻瓜&#xff0c;却只想做个傻瓜2 环境要求3 安装3.1 下载源码3.2 创建虚拟环境3.3 安装4 下载数据5 查看支持的模型和数据集6 评测6.1 指定模型路径6.2 指定配置文件6.2.1 评测本地qwen2.5模型6.2.1.1 查看opencompass支持的qwen2.5模型6.2.1.2 创建配置文…