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

Docker简介,快速入门

  • 快速部署应用,不需要像linux中手动执行命令行进行环境配置

  • 使用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。相当于下载绿色软件,开箱即用

  • Docker会在运行镜像时创建一个隔离环境,称为容器(container)

![[Pasted image 20250410105745.png]]

-p 用于将宿主机端口映射到容器端口,从而使外部可以通过宿主机访问容器内的服务:

docker run -p 宿主机端口:容器端口

参数说明:

  • 宿主机端口:宿主机上开放的端口号
  • 容器端口:容器内应用程序监听的端口号

比如下面,访问宿主机的 http://localhost:8080 就相当于访问容器内的 http://localhost:80:

docker run -p 8080:80 my_web_server

![[Pasted image 20250406171124.png]]

镜像相关命令
# 从 Dockerfile 构建镜像
docker build -t <镜像名>:<标签> .

# 查看本地所有镜像
docker images

# 删除镜像
docker rmi <镜像ID或名称>

# 下载镜像(从远程仓库)
docker pull <镜像名>:<标签>

# 上传镜像(到远程仓库)
docker push <镜像名>:<标签>

# 保存镜像到压缩文件
docker save -o <文件名>.tar <镜像名>

# 从文件加载镜像
docker load -i <文件名>.tar
容器相关命令
# 创建并启动容器(基于镜像)
docker run -d --name <容器名> -p 宿主机端口:容器端口 <镜像名>

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 停止容器
docker stop <容器ID或名称>

# 启动已停止的容器
docker start <容器ID或名称>

# 删除容器
docker rm <容器ID或名称>

# 查看容器日志
docker logs <容器ID或名称>

# 进入容器执行命令
docker exec -it <容器ID或名称> /bin/bash
用起别名的方式简化docker命令
  • 首先编辑当前用户主目录下的 .bashrc 文件
vi ~/.bashrc
  • 简化前的命令:
docker ps -a
  • 然后在.bashrc中添加简化后的命令:
alias dps='docker ps -a'
  • 再重新加载配置:
  source ~/.bashrc
数据卷
  • 数据卷是宿主机文件目录和容器文件目录之间的桥梁
  • 可以实现宿主机文件目录和容器文件目录之间的双向绑定,不需要再进入容器中修改文件

相关命令:

# 创建数据卷
docker volume create

# 查看所有数据卷
docker volume ls

# 删除指定数据卷
docker volume rm <卷名>

# 查看某个数据卷的详情
docker volume inspect <卷名>

# 清除未使用的数据卷
docker volume prune

# 查看容器,镜像,网络,数据卷的详细信息
docker inspect <对象ID或名称>

  • 如果容器已经存在了不能进行挂载:

![[Pasted image 20250407085901.png]]

本地目录挂载

![[Pasted image 20250407091904.png]]

镜像

![[Pasted image 20250407093249.png]]

![[Pasted image 20250407093355.png]]

![[Pasted image 20250407094237.png]]

![[Pasted image 20250407094746.png]]

自定义网络

![[Pasted image 20250407095419.png]]

部署java项目
  • Dockerfilejar包放在同一目录下便于构建镜像:
/my-java-app
  ├── hm-service.jar
  └── Dockerfile

dockerfile文件:

# 1. 指定基础镜像:这里使用 openjdk:11.0-jre-buster 作为运行时环境
FROM openjdk:11.0-jre-buster

# 2. 设定时区:设置为 Asia/Shanghai,使容器内的时间与上海时区一致
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 3. 拷贝 jar 包到镜像中
# 将项目目录下的 hm-service.jar 文件复制到镜像内根目录,并命名为 app.jar
COPY hm-service.jar /app.jar

# 4. 当容器启动时,将自动执行这个命令来运行 Java 应用
ENTRYPOINT ["java", "-jar", "/app.jar"]
  • 然后在Dockerfilejar包目录下构建镜像:
# -t my-java-app:指定镜像的名称为 my-java-app
# .:表示当前目录作为构建上下文
docker build -t my-java-app .
  • 镜像构建完成后运行容器:
docker run -d -p 8080:8080 --name my-java-container my-java-app

解释:

  • -d:后台运行容器

  • -p 8080:8080:将容器内的8080端口映射到宿主机的8080端口

  • --name my-java-container:指定容器名称

  • my-java-app:运行之前构建的镜像。

然后访问宿主机的8080端口进行测试.

  • 查看日志:
   docker logs -f my-java-container
DockerCompose
  • 实现一键部署,不需要分别配置前端容器,后端容器等

![[Pasted image 20250407111722.png]]

version: "3.8"  # 指定 Compose 文件版本

services:
  web:
    image: my-web-app:latest      # 指定要运行的镜像
    container_name: web_container   # 自定义容器名称
    build:                        # 如果需要构建镜像
      context: .                  # 构建上下文为当前目录
      dockerfile: Dockerfile      # 指定 Dockerfile 文件
    ports:
      - "80:80"                   # 映射端口,将宿主机的 80 端口映射到容器的 80 端口
    environment:
      - DEBUG=true                # 设置环境变量
    depends_on:
      - db                        # 依赖 db 服务,先启动数据库服务
    volumes:
      - ./web-data:/usr/share/nginx/html  # 挂载本地目录到容器内
    networks:
      - front-end                 # 加入 front-end 网络

  db:
    image: mysql:5.7              # 使用官方 MySQL 镜像
    container_name: db_container
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql    # 挂载命名卷,用于数据持久化
    networks:
      - back-end                  # 加入 back-end 网络

volumes:
  db-data:                        # 声明命名卷 db-data

networks:
  front-end:
    driver: bridge
  back-end:
    driver: bridge

相关文章:

  • OSPF+MGRE的配置练习
  • 1.29G 雨晨 19044.5737 Windows 10 IoT 企业版 LTSC x64 极速版 VIP 7天有效开放体验
  • GPT - 多头注意力机制(Multi-Head Attention)模块
  • AI应用开发平台 和 通用自动化工作流工具 的详细对比,涵盖定义、核心功能、典型工具、适用场景及优缺点分析
  • CTF web入门之文件包含
  • SAP BDC:企业数据管理的新纪元
  • flink部署使用(flink-connector-jdbc)连接达梦数据库并写入读取数据
  • NO.85十六届蓝桥杯备战|动态规划-经典线性DP|最长上升子序列|合唱队形|最长公共子序列|编辑距离(C++)
  • FreeRTOS入门与工程实践-基于STM32F103(一)(单片机程序设计模式,FreeRTOS源码概述,内存管理,任务管理,同步互斥与通信,队列,信号量)
  • BGP分解实验·23——BGP选路原则之路由器标识
  • 最新版IDEA超详细图文安装教程(适用Mac系统)附安装包及补丁2025最新教程
  • 首批 | 云轴科技ZStack通过电子标准院云上部署DeepSeek验证测试
  • Tkinter高级布局与窗口管理
  • Node.js中util模块详解
  • 【golang/jsonrpc】go-ethereum中json rpc初步使用(websocket版本)
  • vue3使用keep-alive缓存组件与踩坑日记
  • [实战] 二分查找与哈希表查找:原理、对比与C语言实现(附完整C代码)
  • PostgreSQL 实例运行状态全面检查
  • 考研数据结构精讲:数组与特殊矩阵的压缩存储技巧(包含真题及解析)
  • 大数据面试问答-Hadoop/Hive/HDFS/Yarn
  • 武汉旅游体育集团有限公司原党委书记、董事长董志向被查
  • 警方通报男子地铁上拍视频致乘客恐慌受伤:列车运行一度延误,已行拘
  • 壹基金发布2024年度报告,公益项目惠及937万人次
  • 85后清华博士黄佐财任湖北咸宁市咸安区委副书记、代区长
  • 一季度全国消协组织为消费者挽回经济损失23723万元
  • 中科院院士魏辅文已卸任江西农业大学校长