G
N
I
D
A
O
L

主要介绍在 Centos7 上安装和使用 Docker

# 1. Docker

# 1.1 docker 如何解决大型项目依赖关系复杂,不同组件依赖的兼容问题

  • Docker 允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
  • Docker 将每个应用放到一个隔离容器中运行,使用沙箱机制,相互隔离

# 1.2 Docker 如何解决开发、测试、生产环境有差异的问题

  • Docker 镜像中包含完整运行环境,包含系统库函数、仅依赖系统的 Linux 内核,因此可以在任意操作系统上运行

Docker 是一个快速交付应用、运行应用的技术:

  1. 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意 Linux 操作系统
  2. 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  3. 启动、移除都可以通过一行命令完成,方便快捷

# 2. Docker 命令

# 2.1 镜像命令

  1. docker images
  2. docker pull
  3. docker push
  4. docker save
  5. docker load

# 2.2 容器命令

  1. docker run
  2. docker pause
  3. docker unpause
  4. docker stop
  5. docker start
  6. docker rm
  7. docker exec
  8. docker logs
  9. docker ps

# 3. Docker 数据卷

数据卷是一个虚拟目录,指向宿主文件系统中的某个目录

其作用在于,将数据与容器分离,解耦合,方便操作容器内的数据,保证数据安全!

# 3.1 操作数据卷

docker volume [COMMAND]

docker volume 命令是数据卷操作,根据命令后跟随的 command 来确定下一步的操作:

  • create 创建一个 volume
  • inspect 显示一个或多个 volume 的信息
  • ls 列出所有的 volume
  • prune 删除未使用的 volume
  • rm 删除一个或多个指定的 volume

# 3.2 挂载数据卷

-v 数据卷:容器类目录

  • docker run 命令中通过 -v 参数挂载文件或目录到容器中:

    1. -v volume 名称:容器内目录
    2. -v 宿主机文件:容器内文件
    3. -v 宿主机目录:容器内目录
  • 数据卷挂载与目录直接挂载的区别

    1. 数据卷挂载耦合度低,由 docker 来管理目录;但是目录较深,不便于寻找
    2. 目录挂载耦合度较高,需要手动管理目录;便于寻找

# 4. Dockerfile 自定义镜像

# 4.1 镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成

镜像是分层结构,每一层称为一个 Layer

  • BaseImage 层:包含基本的系统函数库、环境变量、文件系统
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其他:再 BaseImage 基础上添加依赖、安装程序、完成整个应用的安装和配置

image-20230327135722299

# 4.2 Dockerfile 语法

Dockerfile 是一个文本文件,包含若干指令,用指令来说明要执行什么操作来构建镜像。每个指令都会形成一层 Layer

  • 常见指令

    指令说明示例
    FROM指定基础镜像FROM centos:7
    ENV设置环境变量,可在后面指令使用ENV key value
    COPY拷贝本地文件到镜像的指定目录COPY /xxx /tmp
    RUN执行 Linux 的 shell 命令,一般是安装过程的命令RUN yum install gcc
    EXPOSE指定容器运行时监听的端口,提供给镜像使用者EXPOSE 8080
    ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xxx.jar

    更详细语法说明,可参考官方文档https://docs.docker.com/engine/reference/builder

# 4.3 构建 Java 项目

  • 案例:基于 java:8-alpine 镜像,将一个 Java 项目构建为镜像

    实现思路如下:

    image-20230327142033950

    h
    # 指定基础镜像
    FROM java:8-alpine
    # 拷贝 jar 包到容器中
    COPY ./docker-demo.jar /tmp/app.jar
    # 暴露端口
    EXPOSE 8888
    #入口,java 项目启动命令
    ENTRYPOINT java -jar /tmp/app.jar

# 5. DockerCompose

# 5.1 DockerCompose 是什么

它能基于 Compose 文件快速部署分布式应用,而无需手动一个个创建和运行容器。Compose 文件是一个文本文件,通过指令定义集群中每个容器怎么运行。

image-20230327143217519

DockerCompose 的语法请参考:https://docs.docker.com/compose/compose-file

# 5.2 案例

docker-compose 文件编写:

l
version: "3.2"
services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝