• docker 生成镜像的几个问题


    根据jdk8.tar.gz 打包Jdk8 镜像失败

    首选做准备工作

    • ① 新建一个空的目录(以jdktemp为例),然后在目录中新建一个文件,命名为Dockerfile

    • ② 拷贝课前资料提供的 jdk8.tar.gz 到这个目录中

    在这里插入图片描述

    • ③ 编写Dockerfile文件:

    在这里插入图片描述
    在这里插入图片描述

    From centos
    
    MAINTAINER gnauhsil
    
    RUN mkdir /usr/local/jdk8
    
    ADD jdk8.tar.gz /usr/local/jdk8
    
    ENV JAVA_HOME /usr/local/jdk8/jdk1.8.0_144
    
    ENV JRE_HOME /usr/local/jdk8/jdk1.8.0_144/jre
    
    ENV PATH $JAVA_HOME/bin:$PATH
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • a )基于java:8-alpine作为基础镜像

    • b )将app.jar拷贝到镜像中

    • c )暴露端口

    • d )编写入口ENTRYPOINT

    • ④ 使用docker build命令构建镜像

    • ⑤ 使用docker run创建容器并运行

    步骤6:运行命令:生成镜像

    docker build -t java:8-alpine .  (不要忘记这个点.)
    
    • 1

    在这里插入图片描述
    之后会生成镜像,如上图所示: 使用 docker images命令进行查看

    镜像生成成功以后可以使用命令先进入到容器中运行 java -version命令看能否成功,先前编写的 Dockerfile文件的版本号错误导致报错 :bash: java: command not found

    docker run -it java:8-alpine  /bin/bash
    
    • 1
     java -version
    
    • 1

    在这里插入图片描述
    进入容器以后 ctrl + d 可以退出容器命令模式

    运行容器

    docker run -dit --name java8 java:8-alpine
    
    • 1

    进入容器以后 ctrl +d 可以退出容器

    运行镜像报错差不多是网络ip错误,在网上说重启docker即可解决

    systemctl restart docker
    
    • 1

    相关链接:https://blog.csdn.net/ystyaoshengting/article/details/102543163

    docker run --name web -p 8090:8090 -d javaweb:1.0
    c4489a0b442af92f597ac80476ea4d6de7e0b5993446d9f07bd799412442ae2d
    docker: Error response from daemon: driver failed programming external connectivity on endpoint web (3800bd001b28af0ef6d80ec954cd012e98dda038804ada3817a7a4ecffb8fec0): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8090 -j DNAT --to-destination 172.17.0.6:8090 ! -i docker0: iptables: No chain/target/match by that name.
    (exit status 1)).

    运行mysql5.7.25 镜像失败

    docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql5 (25d97ccf16344797d0d679b9f3d0d27fe29a769f2c311b3390900d591065d2e5): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.

    抱以上错误,原因是我的docker环境是后装的,在原来的虚拟机上已经有mysql服务占用了3306端口所以导致镜像无法运行成为容器。把原来的mysql服务停用就可以了。

    在这里插入图片描述

    systemctl status mysqld.service  (查看服务状态)
    
    systemctl stop mysqld.service    (关闭服务,对应的端口自然也就没有服务占用了)
    
    systemctl disable mysqld.service  (关闭服务开机自启动)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    docker run -d --name mysql5 -p 3306:3306 -v /tmp/mysql/data:/var/lib/mysql -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.25
    
    • 1

    启动成功:
    在这里插入图片描述

    向daemon.json文件添加内容导致docker重启失败

    在这里插入图片描述
    在这里插入图片描述
    原因就在于daemon.json文件是一个JSON文件 添加内容时需要加一个 ,(逗号) 忘了加

    重加载

    systemctl daemon-reload
    
    • 1

    重启docker

    systemctl restart docker
    
    • 1

    docker run 命令常用参数

    在这里插入图片描述

    –start always 跟随docker一起启动

    相关参考链接:https://blog.csdn.net/qq_47346664/article/details/119887657

  • 相关阅读:
    VMware设置共享文件夹
    python | 自动化exe程序
    Mysql详解
    redis分布式锁的实现
    同时上3种手段,保障Quartz不重复执行任务
    Python——基础知识
    JAVA线程池详解
    一个超好看的音乐网站设计与实现(HTML+CSS)
    DevOps|AGI : 智能时代研发效能平台新引擎(上)
    Linux工具(三)
  • 原文地址:https://blog.csdn.net/PY_XAT_SFZL/article/details/132743181