当前位置: 首页 > news >正文

docker 安装 使用

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.xdnf.cn/news/1301977.html

相关文章:

  • QT在Widget类下的四种QPushbutton的信号与槽的连接方式
  • Python中推导式和表达式
  • QT(事件)
  • 【机器学习深度学习】客观评估训练程度
  • AIoT浪潮之巅:AI如何赋能边缘物联网,解锁三大核心潜能
  • Spring中存在两个相同的Bean是否会报错?
  • Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与学习体验增强中的应用(399)
  • STM32F103C8T6学习——直接存储器访问(DMA)标准库实战3(ADC数据采集+DMA回传)
  • 开始回溯的学习
  • I/O多路复用特性与实现
  • 【学习嵌入式day-25-线程】
  • 扣子(Coze),开源了!Dify 天塌了
  • 无人机智能跟踪模块设计与运行分析
  • Mac Mysql 卸载
  • 【Docker】openEuler 使用docker-compose部署gitlab-ce
  • C++设计模式:类间关系
  • 企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
  • Flinksql bug: Heartbeat of TaskManager with id container_XXX timed out.
  • gitee_流水线搭配 Dockerfile 部署vue项目
  • MetaFox官方版:轻松转换视频,畅享MKV格式的便捷与高效
  • 【Linux基础知识系列】第九十六篇 - 使用history命令管理命令历史
  • std::set_symmetric_difference
  • 4. 图像识别模型与训练策略
  • 解锁AI大模型:Prompt工程全面解析
  • Spring MVC ModelAndView 详解
  • Linux网络基础(一)
  • 【计算机视觉与深度学习实战】01基于直方图优化的图像去雾技术
  • Python入门第3课:Python中的条件判断与循环语句
  • 电商架构测试体系:ZKmall开源商城筑牢高并发场景下的系统防线
  • Dijkstra与Floyd求最短路算法简介