1 Dockerfile的简易用法
创建一个文件,编辑内容
touch hello
nano hello
#在文件中输入以下内容
FROM redis #FROM指令初始化一个新的构建阶段,并为后续指令设置**基础镜像**。因此,有效的 Dockerfile 必须以 FROM 指令开头。该镜像可以是任何有效的镜像–很容易通过从Public Repositories(镜像仓库) 拉取一个镜像。
MAINTAINER ohb
运行Dockerfile
2 idea连接虚拟机docker
2.1 配置linux
vim /lib/systemd/system/docker.service #编辑文件
在文件中第13行 :set number
显示行 插入
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
保存退出
systemctl daemon-reload #重载配置
重启docker服务
systemctl restart docker.service
curl 测试服务是否启动
curl http://192.168.188.128:2375/info
开启防火墙
firewall-cmd --add-port=2375/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
2.2 idea下设置
在idea中进行如图配置
3 linux安装JDK
3.1 上传JDK
3.2 解压
tar -zxvf
3.3 配置环境
cd /etc
nano profile
#在文件最末尾输入以下内容,这里是临时设置,注销该会话后需要重新应用
JAVA_HOME=/usr/local/softwares/jdk/jdk1.8.0_341
CLASSPATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
#根据windows的path可知,所有的路径以;保存在同一条记录下,这个命令将把 "$JAVA_HOME/bin" 添加到 $PATH 的开头。现在,系统将首先搜索 "/new/path",然后才会搜索默认的 $PATH 路径。
export JAVA_HOME CLASSPATH PATH
#将之前定义的变量导出,使其在当前会话中生效。
source /etc/profile
3.4 运行项目jar包
在运行之前,首先要确保端口已经开启
java -jar docker-hello-1.0-SNAPSHOT.jar
4 用idea在虚拟机中建立docker,运行项目
在根目录新建Dockerfile文件
FROM anapsix/alpine-java #下载anapsix/alpine-java,以它为镜像建立docker
MAINTAINER ohb #设置维护者为ohb
EXPOSE 8080 #指定容器中运行的应用程序将会监听的端口,这里是 `8080` 端口。
ADD target/docker-hello-1.0-SNAPSHOT.jar /app.jar #将应用程序打包成的可执行 jar 包添加到镜像中,并将其重命名为 `/app.jar`
ENTRYPOINT ["java","-jar","/app.jar"] #指定容器启动时的默认进程。这里是使用 Java 命令来启动 `/app.jar`
点击左上按钮
注:
镜像标记
是docker image的名称
容器名称
是docker容器的名称
绑定端口中主机端口可以自行更改,而容器端口必须和项目端口一致
5 补充
5.1 windows和linux环境变量的区别
序列 | 符号 | Windows | Linux |
---|---|---|---|
1 | 分隔符 | ; | : |
2 | 文件夹分割 | \ | / |
3 | 取值符号 | %变量% | $变量 |
5.2 Dockerfile文件常用指令
FROM 指定基础镜像
FROM指令初始化一个新的构建阶段,并为后续指令设置基础镜像。因此,有效的 Dockerfile 必须以 FROM 指令开头。该镜像可以是任何有效的镜像–很容易通过从Public Repositories(镜像仓库) 拉取一个镜像。
FROM类似于Java中extends关键字继承于基础镜像,即FROM之后的内容都依赖于此基础镜像。
格式
格式:
FROM 镜像名称
FROM 镜像名称:
FROM 镜像名称@
注:
tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
案例
-
FROM mysql:5.6
-
FROM java:8
MAINTAINER指定维护者信息
MAINTAINER指令用于指定维护者的信息,用于为Dockerfile署名。
格式
MAINTAINER 名字
案例
MAINTAINER ohb
ADD 复制文件
将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget。
格式
ADD src … dest
ADD [“src”,… “dest”] 用于支持包含空格的路径
从src目录复制文件到容器的dest。
案例
ADD target/springboot-dockerfile-1.0-SNAPSHOT.jar /app.jar
将本机target/springboot-dockerfile-1.0-SNAPSHOT.jar文件拷贝到容器内**/app.jar**
ENTRYPOINT 入口点
ENTRYPOINT 允许您配置将作为可执行文件运行的容器。用ENTRYPOINT的exec形式来设置相当稳定的默认命令和参数,然后使用CMD的任何一种形式来设置更可能更改的其他默认值。
注: 一般在制作一些执行就关闭的容器中会使用。
格式
ENTRYPOINT [“executable”, “param1”, “param2”] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。
案例
ENTRYPOINT ["java","-jar","/app.jar"]
EXPOSE
指定于暴露的端口。
格式
EXPOSE […]
案例
EXPOSE 9091
VOLUME 指定挂载点
使用指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可以共享给其它容器。
格式
VOLUME 文件路径
案例
VOLUME /tmp
CMD
**CMD 在 Dockerfile 中的主要目的是为正在运行的容器提供默认值。这些默认值可以包括一个可执行文件,也可以省略可执行文件,此时必须指定一个 ENTRYPOINT 指令来告知容器所需的可执行程序或命令。
测试及日志
日志
debug>info>warn>error>fatal
从左到右日志包含信息逐渐减少
debug:开发人员
info:使用人员
warn:客户
error:错误信息
fatal:严重错误信息
注:重要方法必有日志,异常信息必须捕获日志