从无到有制作docker镜像、容器详细步骤

1、编写一个Dockerfile文件,内容如下

# 基础镜像jdk,jdk里包含里操作系统
FROM openjdk:8u282-jdk

# 工作目录,也就是容器里目录
WORKDIR /home/prq/

# 添加ppp目录下的文件到容器/home/prq/里
ADD ./ppp /home/prq/

# 暴露端口8080
EXPOSE 8080

# 启动脚本
CMD ./startup.sh

2、ppp目录下准备以下文件,用于运行项目(ppp目录和Dockerfile文件在同一层目录下)

  a、一个运行jar ,例如 test.jar  ,后面修改代码升级时,用到的jar名称需修改成test.jar

 b、启动脚本startup.sh

c、日志目录 logs

d、配置文件目录 conf

3、在Dockerfile所在的目录下执行以下命令

1、 生成test:1.0.1镜像,最后的点不用省略
docker build -t test:1.0.1 .

2、 查看生成的镜像
docker images 

3、 通过test:1.0.1镜像启动容器
docker run -itd   --privileged=true --name test test:1.0.1

4、进容器(可以在进容器里添加一些基本命令,如telnet、ifconfig命令,不然制作的镜像是没有这些基本命令的)
docker exec -it test  /bin/bash

安装一些常用的工具
yum -y install vim
yum -y install net-tools


5、 将镜像test:1.0.1保存为test.tar.gz,默认保存在当前目录
docker save -o test.tar.gz test:1.0.1

6、将test.tar.gz 导入镜像
docker load -i test.tar.gz

7、 通过test:1.0.1镜像启动容器
docker run -itd   --privileged=true --name test test:1.0.1


8、如果知道容器id,也可以通过容器id转镜像(将294oajfhfnci容器保存为镜像abcdef)
docker commit 294oajfhfnci test:1.0.1

4、每次升级时,需要把修改的test.jar 通过docker cp命令传到容器里,比较麻烦,所有有了另一种方式,通过compose文件volumes对宿主机和容器做个映射关系。

1、把javaDump.hprof从容器id为db0906d6e687,容器路径为/home/ppp/logs中把javaDump.hprof文件拿到宿主机/home/ppp/目录下
docker cp db0906d6e687:/home/ppp/logs/javaDump.hprof /home/ppp/

2、把宿主机/home/ppp/logs/javaDump.hprof复制到容器id为db0906d6e687的/tmp目录下
docker cp /home/ppp/logs/javaDump.hprof  db0906d6e687:/tmp

compose.yml内容

# yaml 配置
version: '3'
services:
  nacos-server:
    image: nacos/nacos-server:v1.4.3
    container_name: nacos-server
    network_mode: "host"
    environment:
      - PREFER_HOST_MODE=ip
      - MODE=standalone
    volumes:
      - /home/docker/volumes/ppp/_data/nacos_data/logs/:/home/nacos/logs
      - /home/docker/volumes/ppp/_data/nacos_data/conf/application.properties:/home/nacos/conf/application.properties
      - /home/docker/volumes/ppp/_data/nacos_data/data/:/home/nacos/data
    ports:
      - 8848:8848
    restart: always
  portainer:
    image: "portainer/portainer-ce"
    container_name: "portainer"
    ports:
      - "8000:8000"
      - "7000:9000"
    restart: always
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/home/docker/volumes/portainer_data/_data:/data"
      - "/etc/localtime:/etc/localtime"
      - "/etc/timezone:/etc/timezone"
  portainer-agent:
    image: "portainer/agent"
    container_name: "portainer-agent"
    ports:
      - "9001:9001"
    restart: always
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/home/docker/volumes:/var/lib/docker/volumes"
      - "/etc/localtime:/etc/localtime"
      - "/etc/timezone:/etc/timezone"

  redis:
    image: "redis:6.2.1"
    container_name: "redis"
    ports:
      - "6379:6379"
    restart: always
    sysctls:
      - net.core.somaxconn=1024
    volumes:
      - "/home/docker/volumes/ppp/_data/redis_data/conf/redis.conf:/etc/redis/redis.conf"
      - "/home/docker/volumes/ppp/_data/redis_data/data:/data"
      - "/etc/localtime:/etc/localtime"
      - "/etc/timezone:/etc/timezone"
    command: redis-server /etc/redis/redis.conf
 test:
    image: "test:1.0.1"
    container_name: "test"
    network_mode: "host"
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - NACOS_SERVER=10.12.12.12:8848
      - NACOS_NAMESPACE=yreyehhfdsd-ea28-47b9-a3fa-e818gege5
      - ADMIN_SERVER_URL=http://10.12.12.12:8060

    volumes:
      - "/home/docker/volumes/ppp/_data/test/startup.sh:/home/ppp/startup.sh"
      - "/home/docker/volumes/ppp/_data/test/conf:/home/ppp/conf"
      - "/home/docker/volumes/ppp/_data/logs_data:/home/ppp/logs"
      - "/home/docker/volumes/ppp/_data/test/node1/test.jar:/home/ppp/test.jar"
      - "/home/docker/volumes/ppp/_data/wait-for-it.sh:/home/ppp/wait-for-it.sh"
      - "/etc/localtime:/etc/localtime"
      - "/etc/timezone:/etc/timezone"
    logging:
      options:
        max-size: 500m
    privileged: true
    command: /home/ppp/wait-for-it.sh 10.12.12.12:8848 -t 0 --strict  -- /bin/sh -c 'sh startup.sh'

其中wait-for-it.sh(网上可下载这个文件)
#wait-for-it.sh ip:端口 检测该ip与端口是否已经能连接,能了就执行后面的命令
#-t 0 超时参数 检测该ip与端口是否已经能连接,超过指定时间后无论ip与端口是否已经能连接都执行后续命令 
#-t 0 不设置超时参数  ip与端口不能连接就不执行后续命令
#不加 -t 0 或者 -t 超时时间 都会在超时时间过了之后执行后续命令 不管ip与端口是否已经能连接
#默认超时时间 15秒
./wait-for-it.sh 10.12.12.12:8848 -t 0 -- java -jar /user_ms_docker.jar

10.12.12.12:8848通的话,才执行echo,不通不执行,一直等待

执行脚本insatll.sh

#!/bin/bash
#引入外部脚本
#source ./sysctl.sh
echo "preparing for system envrionment ..."

image_home="../images"
image_redis="redis-6.2.1.tar.gz"
image_portainer="portainer.tar.gz"
image_portainer_agent="portainer-agent.tar.gz"
image_nacos="nacos-v1.4.3.tar.gz"
image_test="test.tar.gz"

ppp="/home/docker/volumes/ppp/_data"

echo "=============update docker path ... ============"
cp ../conf/common/docker.service /etc/systemd/system/multi-user.target.wants/
systemctl daemon-reload
systemctl restart docker

echo "Loading docker images ..."
docker load -i ${image_home}/${image_redis}
docker load -i ${image_home}/${image_portainer}
docker load -i ${image_home}/${image_portainer_agent}
docker load -i ${image_home}/${image_test}
docker load -i ${image_home}/${image_nacos}


echo "Creating volumes ..."
docker volume create ppp
docker volume create portainer_data


echo "preparing for envrionment ..."

mkdir -vp ${ppp}/redis_data ${ppp}/portainer_data ${ppp}/nacos_data
mkdir -vp ${ppp}/redis_data/conf  ${ppp}/redis_data/data
mkdir -vp ${ppp}/nacos_data/conf ${ppp}/nacos_data/data ${ppp}/nacos_data/logs
mkdir -vp ${ppp}/zookeeper_data ${ppp}/keepalived_data
mkdir -vp ${ppp}/logs_data
mkdir -vp ${ppp}/lib
mkdir -vp ${test} ${test}/node1 ${test}/node1/logs ${test}/node1/data
cp  ../conf/ioms/startup.sh ${test}/
cp -r ../conf/ioms/custom-config ${test}/
cp ../conf/common/wait-for-it.sh ${ppp}

cp  -r ../lib ${ppp}/lib

cp ../conf/common/redis.conf ${ppp}/redis_data/conf/

cp ../conf/common/application.properties ${ppp}/nacos_data/conf/

echo "copy keepalived config file ..."
cp ../conf/keepalived/keepalived.conf ${ppp}/keepalived_data/

chmod 777 -R ${ppp}
chmod 644 ${ppp}/keepalived_data/keepalived.conf

echo "=============Starting containers...========== "

echo "=============creating all containers ...==================="
docker-compose -f ../compose.yml up -d nacos-server
docker-compose -f ../compose.yml up -d redis
docker-compose -f ../compose.yml up -d portainer
docker-compose -f ../compose.yml up -d portainer-agent
docker-compose -f ../compose.yml up -d test


卸载脚本uninstall.sh

#! /bin/bash

# 停止容器
docker-compose -f ../compose.yml down

# 删除镜像
docker rmi -f $(docker images -qa)

# 删除数据
docker volume rm test portainer_data


查看完整的容器id和command
docker ps -a --no-trunc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/314287.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

红黑树之概述

红黑树 R-B Tree,全称是 Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。 红黑树的特性 (1)每个节点或者是黑色&…

从DETR到Mask2Former(1):DETR-segmentation结构全解析

网上关于DETR做的detection的解析很多,但是DETR做Segmentation的几乎没有,本文结合DETR的论文与代码,对DETR做一个详细的拆解。理解DETR是理解Mask2Former的基础。 首先得把DETR-segmentation给run起来。Github上DETR的repository&#xff0…

日常工作中,软件测试人员如何避免“背锅”

作为一名软件测试工程师,日常工作中最常打交道的肯定就是开发和产品经理。有沟通就会问题,有问题难免会有争执。那么你肯定听过这些话: “这么弱智的bug你都测不出来吗?” “为啥这个功能还没测完就上线了?” “研发…

AI生成APP工具推荐:5款让你惊艳的AI应用

在这个数字化、智能化的时代,人工智能(AI)已经深入到我们生活的方方面面。其中,AI生成APP工具更是以其强大的创意和生成能力,成为自媒体人和设计师们的得力助手。本文将为你介绍五款实用的AI生成APP工具,它们将为你的创意打开无限…

Pycharm close project 速度缓慢解决办法

解决Pycharm close project缓慢现象 1.问题描述 close project后需要等待很长的时间。 2.解决办法 在Help -> Find Action -> 输入 Registry -> 禁用ide.await.scope.completion 问题解决!!! 😃😃&#x…

opencv拉流出现missing picture in access unit with size 4错误解决

0、应用场景问题 我们使用opencv作为拉流客户端,获取画面后进行图像处理并推流(使用ffmpeg库)。 opencv解码同样使用ffmpeg库。 我们要求opencv能根据业务不断进行拉流操作,等效的逻辑代码如下: while(1) {printf(&…

YOLOv6s,map值打印成两位小数(原本是显示0.538,变成显示为53.79)

显示结果 更改前: 更改后: 方法 将tools/eval.py中的--do_pr_metric后面改为defaultTrue即可打印出map值原本是显示0.538,变成显示为53.79,方法为👇 在YOLOv6-main/yolov6/core/evaler.py中做如下更改&#xff1a…

揭秘H5与小程序的测试奥秘!

最近接触了较多关于H5页面的测试,H5页面的测试除了业务逻辑功能测试外,其他部分的测试方法基本是可以通用的,在此对H5页面和小程序的一些通用测试方法进行总结分享给大家。 H5优势 H5可以跨平台,开发成本相对较低; H…

代码随想录算法训练营第25天 | 216.组合总和III 17.电话号码的字母组合

目录 216.组合总和III 💡解题思路 回溯三部曲 💻实现代码 17.电话号码的字母组合 💡解题思路 # 数字和字母如何映射 # 回溯法来解决n个for循环的问题 💻实现代码 216.组合总和III 题目链接:216.组合总和III …

必须掌握的100+个Linux命令大全【持续更新中】

别有一番风趣的alias … note:: 寒蝉凄切,对长亭晚,骤雨初歇。 柳永《雨霖铃》 Linux alias命令用于设置指令的别名,可以将比较长的命令进行简化。 默认情况下会输出当前的设置: $ alias lls -lah lals -lAh llls -lh lsls --…

【Docker】Linux中Docker数据管理的数据卷及挂载

目录 一、数据管理 1. 讲述 2. 应用场景 二、数据卷的应用 1. 命令 2. tomcat镜像 3. 挂载数据卷 4. 项目部署在数据卷 三、目录挂载 四、完善Tomcat配置 每篇一获 一、数据管理 1. 讲述 Docker 的数据管理主要涉及到两个方面:数据卷(Volume…

[linux]编译一个ko文件并运行

一、需求 有一段代码需要在运行时加载注入内核中&#xff0c;当用户层需要访问时可以提供内核态环境去运行。 二、c代码构建 // #include <errno.h> // #include <string.h> // #include <stdio.h> // #include <fcntl.h> // #include <stdlib.h…

Docker数据卷与拦截与目录拦截

目录 高级容器挂载技术深度解析引言数据卷挂载原理解析应用场景使用介绍 目录挂载原理解析应用场景使用介绍 总结 高级容器挂载技术深度解析 引言 容器技术的快速发展使得容器挂载技术变得愈发重要。在容器化应用中&#xff0c;数据卷挂载和目录挂载是两种常见的挂载方式&…

SpringMVC 学习博客记录

文章目录 Servlet请求转发和请求包含RequestDispatcher HandlerInterceptor组件实际运用场景 HandlerMapping&RequestMappingInfo(HandlerMapping)HandlerExecutionChainHandlerAdapter源码学习知识点博客记录 Servlet请求转发和请求包含 RequestDispatcher Request#getR…

测试八年|对业务测试人员的一些思考

自从事测试工作八年多以来&#xff0c;经历过三个部门多条业务线&#xff0c;也经历过测试转型再回到测试&#xff0c;在此过程中对测试工作和角色的认知也逐步有些思考&#xff0c;想把这些思考分享给大家&#xff0c;希望为业务测试同学提供一些有价值的思路。 一、质量保障…

U盘启动安装win11遇到缺少计算机所需的介质驱动程序问题

一、使用U盘制作启动盘遇到问题 下载了windows原版镜像&#xff0c;验证了md5&#xff0c;确保文件没有损坏。使用ultroiso制作u盘启动盘&#xff0c;开始安装后出现下图的报错&#xff1a; 在网上搜索解决方案&#xff0c;主要有以下几种&#xff1a; 安装的时候&#xff0c…

POI:对Excel的基本写操作 整理1

首先导入相关依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><!--xls(03)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></depend…

SpringBoot中 如何优雅的 重试调用 第三方API?

引言 在实际的应用中&#xff0c;我们经常需要调用第三方API来获取数据或执行某些操作。然而&#xff0c;由于网络不稳定、第三方服务异常等原因&#xff0c;API调用可能会失败。为了提高系统的稳定性和可靠性&#xff0c;我们通常会考虑实现重试机制。 本文将深入探讨如何在…

Defi安全--Zunami Protocol攻击事件分析

其它相关内容可见个人主页 1 Zunami攻击事件相关信息 2023.8.13发生在Ethereum上发生的攻击&#xff0c;存在两个攻击交易&#xff0c;具体信息如下&#xff1a; 攻击合约地址&#xff1a;Contract Address 攻击合约 攻击者地址&#xff1a;Zunami Protocol Exploiter 攻击…

【DB2】installSAM执行后会重启这件事

碎碎念 在使用自动化工具安装TSAMP的过程中&#xff0c;机器会自动重启这件事。 TSAMP真的挺折磨的&#xff0c;一个月居然因为这件事情debug两次了。 在测试自动化脚本的时候&#xff0c;第一遍安装都是好好的&#xff0c;从第二遍开始&#xff08;因为要测试脚本的幂等性&…