(二)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必须在同一级

相关推荐
码农小韩34 分钟前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
Hellc00739 分钟前
Docker网络冲突排查与解决方案:完整指南
网络·docker·容器
嵌入式-老费1 小时前
外壳3D结构设计(学习的方法)
学习
hanyi_qwe1 小时前
发布策略 【K8S (三)】
docker·容器·kubernetes
山土成旧客1 小时前
【Python学习打卡-Day40】从“能跑就行”到“工程标准”:PyTorch训练与测试的规范化写法
pytorch·python·学习
Yyuanyuxin1 小时前
保姆级学习开发安卓手机软件(一)--安装软件及配置
学习
眠りたいです1 小时前
Docker核心技术和实现原理第二部分:docker镜像与网络原理
运维·网络·docker·容器
●VON2 小时前
跨模态暗流:多模态安全攻防全景解析
人工智能·学习·安全·von
德育处主任2 小时前
『NAS』在群晖部署图片压缩工具-Squoosh
前端·javascript·docker
星火开发设计2 小时前
C++ map 全面解析与实战指南
java·数据结构·c++·学习·算法·map·知识