(二)Docker实战--Docker镜像部署与启动

一、构建docker镜像

(一)、步骤

1.导入jdk8的docker镜像

cs 复制代码
# 将jdk.tar加载到本地的docker镜像仓库中
docker load -i jdk.tar

2.编写dockerfile

Dockerfile文件

定义"如何构建docker镜像"的文本文件,包含一系列指令,docker会按照这些指令的顺序,自动构建出一个可运行的镜像。

cpp 复制代码
# 指定基础镜像(Java 8运行环境)
FROM openjdk:8
# 容器内的工作目录
WORKDIR /app
# 将宿主机的文件复制到镜像中
ADD ./test.jar /app/test.jar
# 定义容器启动时必须执行的命令
ENTRYPOINT ["java","-jar","test.jar" ]

3.上传jar包到服务器

4.执行构建命令【docker build 命令会自动读取并执行 Dockerfile 中的所有指令;必须和Dockerfile同级

cs 复制代码
docker build -t test:1.0 .
# docker build:启动镜像构建流程
# -t test:1.0:给镜像命名为test,标签为1.0
# .:表示以当前目录作为 "构建上下文"(Docker 会在当前目录下找 Dockerfile 和需要复制的文件,如test.jar)。

二、生产环境启动Docker容器

为什么在生产环境中不使用docker run??

docker run的配置和操作缺乏**"持久化记录",无法留下可追溯、可复用的痕迹(即配置档案)**

Docker run 是通过命令行参数一次性启动容器的,这些参数只存在于"执行命令的瞬间"。

生产环境 :系统或软件正式投入使用、面向终端用户和实际业务的运行环境。

(一)、Docker Compose 配置文件

所以我们使用docker-compose文件:

其作用有2个:对多个相互关联的容器进行统一管理/docker容器的配置文件化

内容如下:

cs 复制代码
# 指定Docker Compose的配置版本
version: '3'
# 定义服务的配置块、一个services下可以包含多个服务
services:
  # 定义一个名为test的服务
  test:
    # 指定创建该服务容器所使用的Docker镜像名称为test.1.0.1
    image: "test.1.0.1"
    # 指定容器实际名称为test
    container_name: test
    # 容器重启策略为always
    restart: always
    # 将主机的18080端口映射到容器内的8080端口
    ports:
      - 18080:8080
    # 挂载 实现持久化【将主机当前目录下的data文件夹挂载到容器内的/app目录下
    volumes:
      - ./data/:/app
    # 设置时区为伤害
    environment:
      - TZ=Asia/Shanghai
    # 让容器加入test网络组
    networks:
      - test
# 声明该网络组是外部已经存在的网络
networks:
  test:
    external: true

网络组:隔离与通信,是逻辑上的隔离单元------加入同一个网络的容器,默认可以通过容器名相互访问;不同网络的容器默认相互隔离。

(二)、步骤

1.在配置文件目录下创建data目录(目的是映射)

2.将test.jar移动到data目录下

原因:

挂载会"覆盖"容器内原有的目录内容,即容器内/app的内容由主机的/data目录内容决定;

Dockerfile中写的容器启动逻辑是:在app目录下运行程序

java 复制代码
# 指定基础镜像(Java 8运行环境)
FROM openjdk:8
# 容器内的工作目录
WORKDIR /app
# 将宿主机的文件复制到镜像中
ADD ./test.jar /app/test.jar
# 定义容器启动时必须执行的命令
ENTRYPOINT ["java","-jar","test.jar" ]

若主机目录没有test.jar,则会报错找不到test.jar

3.编写docker-Compose文件

如上所示:

4.创建网落组test(test是自己命名的)

5.启动容器、查看日志

docker logs -f 后面跟的是容器id 或 名称【-f是--follow的缩写,意思是实时输出容器新产生的日志】

6.在本机电脑上访问虚拟机的ip地址:18080/test

cs 复制代码
# 停掉容器
docker-compose down

四、shell脚本自动部署

1.脚本编写:

bash 复制代码
vi build.sh
bash 复制代码
#!/bin/bash
echo "停用所有容器"
docker-compose down
echo "删除镜像"
docker rmi test.1.0.1
echo "构建镜像"
docker build -t test.1.0.1 .
echo "运行容器"
docker-compose up -d

#!/bin/bash:Shebang(也称为 hashbang)声明,用于指定脚本的解释器。

echo:输出文字

2.执行脚本

Dockerfile、docker-compose和build.sh必须在同一级

相关推荐
屁股割了还要学2 小时前
【C++进阶】STL-string的简单实现
c语言·开发语言·数据结构·c++·学习·考研
Helibo443 小时前
C++pair学习笔记
c++·笔记·学习
掘根3 小时前
【Docker】docker compose
docker·容器·eureka
CarmenHu4 小时前
大模型应用评估指标学习笔记
笔记·学习
java_logo4 小时前
PERL Docker 容器化部署指南
linux·运维·docker·容器·eureka·centos·perl
十五学长4 小时前
计算机理论基础学习Day19
学习
snakecy5 小时前
系统时间更新
大数据·学习·docker·区块链
蒙奇D索大5 小时前
【算法】递归算法的深度实践:深度优先搜索(DFS)从原理到LeetCode实战
c语言·笔记·学习·算法·leetcode·深度优先
做运维的阿瑞5 小时前
Redis 高可用集群部署实战:单Docker实现1主2从3
java·redis·docker