1 打包springboot项目 maven install ,打包为lib和jar
2 编写Dockerfile文件
注意:此文件没有后缀
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
ARG LIB_FILE
ADD ${JAR_FILE} app.jar
ADD ${LIB_FILE} lib
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08"]
CMD ["-Xms512m","-Xmx512m","-jar","/app.jar"]
3 上传Dockerfile, jar和lib到linux下,
4 cd 到 jar所在的目录,执行docker build命令
docker build -t discovery-eureka:1.0 --build-arg JAR_FILE=discovery-eureka-1.0-SNAPSHOT.jar --build-arg LIB_FILE=lib .
注意 最后的点不能少,表示当前路径
-t后面表示生成的镜像名称和版本
--build-arg后面是参数名称,多个参数使用多个--build-arg
5 查看刚才的镜像
docker images
6 创建并运行容器
docker run --name c-discovery -p 8081:8081 discovery-eureka:1.0
7 docker 查看日志
docker logs -f c-discovery
8 根据容器id停止、启动容器
docker stop 4bb16cffaf9a
docker start 4bb16cffaf9a
docker启动失败问题:
Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details
通过 journalctl -xe 命令,显示:
unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '#' looking for beginning of object key string
重新编写daemon.json文件,文件内容为:
cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"registry.docker-cn.com"
]
}
可以换成阿里云的镜像
"insecure-registries":["registry.cn-hangzhou.aliyuncs.com"
冒号后面不能有空格
镜像上传到阿里云仓库:
https://blog.csdn.net/qq_42266114/article/details/122846772
开启防火墙:
systemctl start firewalld
firewall-cmd --reload
firewall-cmd --query-port=666/tcp 查看端口是否开放
提示 yes,表示开启;no表示未开启。
开放指定的端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent
如果真的不希望docker被访问自动唤醒,执行 systemctl stop docker 后再执行systemctl stop docker.socket即可
外面访问docker映射端口不成功,还未解决?