FROM [镜像:版本]
:指定所依赖的基础镜像
RUN <命令行命令>
:等同于在终端执行的shell命令
RUN ["可执行文件", "参数1", "参数2"]
:等同于在终端shell中执行 ./可执行文件
COPY <源文件> <目标文件>
:将Dockerfile同目录下的文件拷贝到容器里面
ADD <源文件> <目标文件>
:类似于COPY,区别在于如果文件是*.tar、*.gzip、*.bzip2等文件,会自动解压缩(注意:支持解压tar、gzip和bzip2文件,但不会自动解压zip文件)。
ADD my.zip /opt/webapps/my.zip
RUN unzip -d /opt/webapps/my /opt/webapps/my.zip
CMD <命令行命令>
:类似于RUN,区别在于:
--entrypoint
选项所覆盖ENTRYPOINT ["<可执行命令>", "<参数1>", "<参数22>"]
:类似于CMD,存在多个 ENTRYPOINT 指令,仅最后一个生效,区别在于:
ENTRYPOINT 不会被 docker run 的命令行参数指定的指令所覆盖
ENTRYPOINT 可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,比如:
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
不传参:
$ docker run nginx:test
容器内会执行如下命令:
$ nginx -c /etc/nginx/nginx.conf
传参:
$ docker run nginx:test -c /etc/nginx/new.conf
容器内会执行如下命令:
$ nginx -c /etc/nginx/new.conf
ENV
:设置环境变量,示例:
ENV NODE_VERSION 7.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
ARG
:类似于ENV,区别在于 ARG 只在 docker build 过程中有效,build 好之后,镜像内不存在设定的环境变量。
VOLUME
:定义挂载数据卷,一般为/tmp,作用是避免容器内数据因为重启而丢失。
EXPOSE
:声明暴露端口,docker run -P 时会自动映射EXPOSE指定的端口,-p 会覆盖声明的端口。
WORKDIR
:指定工作目录,指定的工作目录,会在构建的镜像的每一层都在。(WORKDIR 指定的工作目录,必须是提前创建好的)。docker build 过程中,每一个RUN命令都是新建的一层,只有通过 WORKDIR 创建的目录会一直存在。
LABEL
:给镜像添加标签,以键值对的形式存在,比如添加镜像的作者:
LABEL org.opencontainers.image.authors="acgkaka"
注意: Dockerfile 的每一行指令都会在docker上新建一层,为了避免镜像过大,尽量将命令写在同一行,例如:
FROM centos
RUN yum -y install **wget**
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
合并为:
FROM centos
RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
参考:Dockerfile|菜鸟教程
1)创建一个空白目录
2)在空白目录中新建一个Dockerfile文本文件:
FROM centos
# 只是单纯的打印"hello world"
RUN echo "hello world"
3)用命令行打开当前目录,输入如下内容
docker build -t hello_world .(最后有一个点)
4)查看docker镜像
docker images
5)创建容器
docker run -d --name=hello_world hello_world
6)启动容器
docker start hello_world
7)补充
删除容器:docker rm -f hello_world
删除镜像:docker rmi hello_world
1)在main路径下创建Dockerfile
2)在Dockerfile中填写如下内容:
# 依赖于oracle官方JDK8
FROM openjdk:8-jdk-alpine
# 将本地路径/tmp挂载到容器
VOLUME /tmp
# 拷贝jar包 eureka-server.jar为目标jar包,重命名为app.jar
COPY eureka-server.jar app.jar
# 运行jar包
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
3)将jar包复制到docker文件夹下
4)用命令行打开当前目录,执行如下命令
docker build -t eureka-server:0.0.1 .(最后有一个点)
5)查看镜像
6)制作并启动容器
docker run -d --name=eureka-server -p 1001:6001 eureka-server:0.0.1(注:宿主机端口:容器端口)
7)查看容器日志
docker logs -f --tail=20 eureka-server
8)访问eureka页面
整理完毕,完结撒花~