Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 面试

  • 工具

    • Linux
    • Git
    • Apipost
    • IDEA
    • Docker
      • 1.Docker特性
      • 2.基本操作
      • 3.数据卷
      • 4.自定义镜像&分布式搭建
      • 5.根据Jar包配置Dockerfile并部署
    • 快捷键
    • 炼丹环境配置
    • 博客搭建
    • CDN
    • Vue3+Vite+Pinia+Element-Plus项目搭建
    • 资源合集
    • LLM入门
  • 项目

  • 关于

  • 更多
  • 工具
phan
2023-05-15
目录

Docker

# Docker

# 1.Docker特性

  • 同一个内核不同系统环境下执行用户程序时,Docker会把用户程序和所需要调用的系统函数库一起打包执行,而这些打包的库函数在同一个内核下是兼容的。

    采用沙箱机制来隔离容器,保证不同用户程序的依赖不会互相干扰。

  • Docker与虚拟机之间的区别:虚拟机是在一个操作系统中模拟硬件设备,运行另一个操作系统。Docker执行则是直接调用自己的操作系统内核,因此性能比虚拟机好。

  • 镜像:Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起称为镜像。镜像是只读的,它是一个分层结构,基础镜像层+layers+入口(程序启动命令) 容器:镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

image-20230301215737434

# 2.基本操作

关闭防火墙

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
1
2
3
4

通过命令启动docker

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务
1
2
3
4
5

拉取镜像

docker pull
1

打包保存镜像

docker save -o nginx.tar nginx:latest
1

读取tar文件解包镜像

docker load -i nginx.tar
1

查看镜像

docker images
1

查看容器信息,默认只能查看运行中容器

docker ps
1

查看所有容器

docker ps -a
1

运行容器,--name表示容器的名字,-p表示端口映射,把宿主机(外部所访问的地址)的86端口映射到docker80端口,-d表示后台运行加镜像名称,-v表示把数据卷html挂载到容器内/root/html目录(如果数据卷不存在docker会自动创建)。

此外容器目录还可以直接与宿主机目录进行挂载。-v 宿主目录:容器目录

docker run --name containerName -v html:/root/html -p 86:80 -d nginx
1

进入容器

docker exec -it containerName bash
1

强制删除容器

docker rm -f containerName
1

删除镜像

docker rmi imageName
1

容器暂停和运行

docker stop containerName
docker start containerName
1
2

# 3.数据卷

数据卷是一个虚拟目录,指向宿主机系统的某个目录。可以基于数据卷进行容器内文件修改,给容器备份。

image-20230302092853848

数据卷操作。其中inspect指令Mountpoint可以获得宿主机挂载地址

docker volume create volumename//创建
docker volume ls //列出数据卷
docker volume rm volumename//删除
docker volume inspect  volumename //查看详情
1
2
3
4
docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/my/own/datadir -d mysql:5.7.25 
1

# 4.自定义镜像&分布式搭建

Dockerfile:自定义创建容器

  • from指定基础镜像
  • env设置环境变量(路径变量)
  • expose指定容器运行时监听的端口,即镜像提供给使用者访问的
  • entrypoint镜像的启动命令,容器运行时调用

Docker Compose:快速部署分布式应用,无需一个个创建和运行容器

每个微服务都需要通过build指明自己dockerfile的目录

Docker镜像仓库:首先配置Docker信任地址,然后通过dockercompose配置registry服务

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=私有仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

推送本地镜像到仓库前需要使用docker tag重命名镜像,以镜像私服仓库的地址为前缀

# 5.根据Jar包配置Dockerfile并部署

将打包好的Jar包传入服务器,通过构建镜像文件运行在docker上

  • 步骤

①将打包好的可执行jar包与Dockerfile传入服务器

②编写Dockerfile文件,其中常用指令:

ENV:指定容器启动后,所要执行指令的运行环境,配合外部传入

FROM:指定基础镜像,必须为第一个命令

ADD:将本地文件(jar包)添加到容器中

WORKDIR:配置指定当前工作目录,后续所有指令(CMD)和操作都是把该目录作为相对路径。

EXPOSE:配置镜像暴露的服务端口,一般配合host网络模式使用。(不配置host模式启动容器,会被-p接口映射覆盖)

ENTRYPOINT / CMD:配置容器启动后,调用执行的命令。

# 基础镜像
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER  "phan"
# 时区
ENV TZ=PRC
WORKDIR /usr/local/dockerfile
# 添加应用
ADD api-gateway-engine.jar /api-gateway-engine.jar
# 执行镜像
ENTRYPOINT ["java","-jar","/api-gateway-engine.jar"]
1
2
3
4
5
6
7
8
9
10
11

③编译Dockerfile文件,生成Docker镜像。其中后面的点表示从当前上下文相对路径获取。

docker build -f ./Dockerfile -t api-gateway-engine:1.0.1 .
1

④执行镜像,并暴露对应的端口给外部访问

docker run -p 7397:7397 -p 8002:8002  --name api-gateway-engine -d api-gateway-engine:1.0.1
1

另外,在dockerfile中的ENTRYPOINT使用$JAVA_OPTS占位符,并在运行容器通过-e指定Dockerfile配置的外部运行环境参数,最终拼接到Dockerfile的指令当中:

docker run -p 8003:8003 -p 7398:7398 \
    -e PARAMS="
    --sever.port=8003
    --api-gateway.address=http://192.168.200.200:8080
    --api-gateway.groupId=10001
    --api-gateway.gatewayId=api-gateway-g4
    --api-gateway.gatewayName=电商配送网关
    --api-gateway.gatewayAddress=192.168.200.200:7398" \
    --name api-gateway-engine2 -d api-gateway-engine:1.0.0
1
2
3
4
5
6
7
8
9

不使用容器与宿主机的自动映射,启动host网络模式,宿主机EXPOSE暴露的端口会直接使用宿主机对应的端口

docker run --network host --name api-gateway-engine -d api-gateway-engine:1.0.1
1
编辑 (opens new window)
#工具
上次更新: 2023/12/15, 15:49:57
IDEA
快捷键

← IDEA 快捷键→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式