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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值