1.安装Docker
下载docker Desktop for mac或者docker Desktop for windows
官网下载
docker由于历史原因有很多版本,各个版本适应不同环境,最新的是安装版,简单易用,不过对系统有要求
2.编写dockerfile
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER abc
ADD ./target/kks-java-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Dspring.profiles.active=online","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
dockerfile没有后缀名 放在pom文件同级
FROM anapsix/alpine-java:8_server-jre_unlimited:指定基础镜像,alpine是精简版linux镜像,打包后体积会小很多,推荐
MAINTAINER abc: 维护者信息
ADD kks-java-0.0.1-SNAPSHOT.jar app.jar:将本地文件添加到容器中,本地kks-java-0.0.1-SNAPSHOT.jar放到app.jar中
RUN bash -c ‘touch /app.jar’:构建镜像时执行的命令,修改这个文件的访问时间和修改时间为当前时间
ENTRYPOINT [“java”,"-Dspring.profiles.active=online","-- Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]:配置容器,使其可执行化,ENTRYPOINT可以执行一些额外配置
参考dockerfile详解
3.打包镜像
这里要根据dockerfile放置你的jar包
打包语句
docker build -t kks-java:latest .
-t − 给镜像加一个Tag
kks-java − 给镜像起的名称
latest − 给镜像的Tag名,不写自动添加latest
. -Dockerfile所在目录必填
打开docker desktop软件,发现镜像已打包上去
测试镜像启动语句
docker run -d -p 9101:9101 --name kks-java kks-java:latest
-d - 后台运行容器,并返回容器ID
-p - 指定端口映射,格式为:主机(宿主)端口:容器端口
–name kks-java kks-java:latest - kks-java为运行容器名称,kks-java:latest为images镜像名:版本号tag
镜像打包成tar文件 不打包无法找到镜像
docker save kks-java >kks-java.tar
4.部署linux
放置到服务器指定位置 rz 或者手托。
cd找到文件位置还原成镜像
cat kks-java.tar | docker load
运行容器
docker run -d -p 9101:9101 --name mms-kks kks-java:latest
记住 -name 后面的是容器名重复是无法启动的
可能出现的报错
1.容器名已存
The image kksdocker:latest already exists, renaming the old one with ID sha256:05bc842111691c44f215a86b23310fbe74d6cd602ef9db922e4ec5899c13046d to empty string
Loaded image: kksdocker:latest
解决 删除容器就好或换名字 命令下面
2.docker 连接被删除
fa5b60865fd10cd052a18e48be12fde8d9342ba9de5ea35df3a3d87d88076502
docker: Error response from daemon: driver failed programming external connectivity on endpoint kksdocker (96cf2d0a709196604e0a66c0950fae07d7fef63425d5da889d1822f117b0401d): (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.18.0.3 --dport 80 -j ACCEPT: iptables: No chain/target/match by that name.
(exit status 1)).
解决重启docker
systemctl restart docker
需要替换记得删除容器 : 原有镜像被相同镜像覆盖后的废弃镜像
docker ps #查看运行容器
docker ps -a #查看容器
docker images #查看镜像
docker rmi <IMAGE ID/REPOSITORY> #删除镜像
docker stop <CONTAINER ID/NAMES> #停止运行容器 id 和name都可以
docker start <CONTAINER ID/NAMES> #启动容器 id 和name都可以
docker rm<CONTAINER ID/NAMES> #删除容器 记住删除的是停止的 id 和name都可以
部署前端静态页面
docker exec -it <CONTAINER ID/NAMES> /bin/sh #进入容器
chmod 777 -R htdocs/ #赋予htdocs文件夹权限 具体看你静态页面位置这是默认的
如果开了防护墙的一定记住放行端口
防火墙放行9101
firewall-cmd --zone=public --add-port=9101/tcp --permanent
firewall-cmd --reload #重启firewall
firewall-cmd --list-ports #查看已经开放的端口