首选做准备工作
① 新建一个空的目录(以jdktemp为例),然后在目录中新建一个文件,命名为Dockerfile
② 拷贝课前资料提供的 jdk8.tar.gz 到这个目录中
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
a )基于java:8-alpine作为基础镜像
b )将app.jar拷贝到镜像中
c )暴露端口
d )编写入口ENTRYPOINT
④ 使用docker build命令构建镜像
⑤ 使用docker run创建容器并运行
步骤6:运行命令:生成镜像
docker build -t java:8-alpine . (不要忘记这个点.)
之后会生成镜像,如上图所示: 使用 docker images
命令进行查看
镜像生成成功以后可以使用命令先进入到容器中运行 java -version命令看能否成功,先前编写的 Dockerfile文件的版本号错误导致报错 :bash: java: command not found
docker run -it java:8-alpine /bin/bash
java -version
进入容器以后 ctrl + d 可以退出容器命令模式
运行容器
docker run -dit --name java8 java:8-alpine
进入容器以后 ctrl +d 可以退出容器
systemctl restart docker
相关链接: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)).
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 (关闭服务开机自启动)
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
启动成功:
原因就在于daemon.json文件是一个JSON文件 添加内容时需要加一个 ,(逗号) 忘了加
重加载
systemctl daemon-reload
重启docker
systemctl restart docker
–start always 跟随docker一起启动
相关参考链接:https://blog.csdn.net/qq_47346664/article/details/119887657