Dockerfile构建 引用菜鸟教程
主要有大量的命令需要记一下
脚本命令
Dockerfile 指令
说明
FROM
指定基础镜像,用于后续的指令构建。
MAINTAINER
指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL
添加镜像的元数据,使用键值对的形式。
RUN
在构建过程中在镜像中执行环境本身的命令。
CMD
指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT
设置容器创建时的主要命令。(不可被覆盖)
EXPOSE
声明容器运行时监听的特定网络端口。
ENV
在容器内部设置环境变量。
ADD
将文件、目录或远程URL复制到镜像中。会自动处理url和解压tar
COPY
将文件或目录复制到镜像中。
VOLUME
为容器创建挂载点或声明卷。
WORKDIR
设置后续指令的工作目录。
USER
指定后续指令的用户上下文。
ARG
定义在构建过程中传递给构建器的变量,可使用 “docker build” 命令设置。
ONBUILD
当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL
设置发送给容器以退出的系统调用信号。
HEALTHCHECK
定义周期性检查容器健康状态的命令。
SHELL
覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 FROM <IMAGE>FROM <IMAGE>:<TAG>MAINTAINER kewenLABEL <key>=<value> <key>=<value> <key>=<value> ... LABEL org.opencontainers.image.authors="kw" COPY <src> <dest> COPY ["<src>" "<dest>" ] (适用于文件路径包含空格的情况) ADD <src> <dest> ADD ["<src>" "<dest>" ] (适用于文件路径包含空格的情况) ENV <KEY> <VALUE>ENV <KEY>=<VALUE>ARG <参数名>[=<默认值>]WORKDIR <工作目录路径> USER <用户名>[:<用户组>] (用户组可选)VOLUME ["<路径1>" , "<路径2>" ...] VOLUME <路径> EXPOSE <PORT>RUN <command > (shell模式) RUN [ "executable" , "param1" , "param2" ] (exec 模式) RUN yum install httpd && yum install ftp && echo 'hello' CMD <command > (shell模式) CMD [ "executable" , "param1" , "param2" ] (exec 模式) CMD [ 'param1' , 'param2' ] (通常与ENTRYPOINT搭配指定ENTRYPOINT的默认参数) ENTRYPOINT <command > (shell模式) ENTRYPOINT [ "executable" , "param1" , "param2" ] (exec 模式)
构建Java应用 基本java程序 编写App.java程序 1 2 3 4 5 6 7 8 9 10 11 12 13 public class App { public static void main (String[] args) { System.out.println("hello world" ); String os = System.getProperty("os.name" ); String osArch = System.getProperty("os.arch" ); String osVersion = System.getProperty("os.version" ); System.out.println(os); System.out.println(osArch); System.out.println(osVersion); } }
编写Dockerfile 1 2 3 4 5 6 7 8 9 10 11 12 13 FROM openjdk:8 WORKDIR /root/app COPY App.java /root/app RUN javac App.java ENTRYPOINT java App
构建 1 2 3 docker build . # 或者打标签构建 docker build . -t firsttest:0.1
.
代表Dockerfile的路径,因为在本路径执行的,就直接当前路径
查看镜像,启动执行 1 2 3 4 # 查看镜像 docker images # 运行 docker run <id>
也可以打tag docker tag 镜像ID 存储:版本
1 docker tag <image-id> firsttest:0.1
再查看images如下
1 2 3 4 [root@centos d1-first]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE firsttest 0.1 af0028165c88 43 minutes ago 526 MB docker.io/openjdk 8 e24ac15e052e 2 years ago 526 MB
参考
准备springboot程序 准备好普通的springboot-web应用
创建Dockerfile 1 2 3 4 5 6 7 FROM openjdk:8 WORKDIR /root/app COPY D7-springboot-source-1.0-SNAPSHOT.jar /root/app EXPOSE 8081 ENTRYPOINT ["java" ,"-jar" ,"D7-springboot-source-1.0-SNAPSHOT.jar" ]
构建 1 docker buiild -t java-web-demo .
会得到一个id
启动 1 2 3 4 5 6 7 docker run -p 8081:8081 -itd <构建的镜像ID> # 查看日志 docker logs <容器ID> # 验证 curl http://localhost:8081/hello/hello