docker镜像dockerfile常用参数
FROM 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
CMD 指定一个容器启动时要运行的命令。
dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换。
EXPOSE 当前容器对外暴露的端口号
ENV 用来在构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝到镜像里面并且ADD命令会自动处理URL和解压tar压缩包
COPY COPY:类似ADD,拷贝文件和目录到镜像中,但是它只是拷贝,不会自动处理URL和解压tar压缩包。
ENTRYPOINT 指定一个容器启动时要运行的命令。
ENTRYPOIT的目的和CMD一样,都是在指定容器启动程序及参数。
VOLUME 容器数据卷,用于数据保存和持久化工作
USER 指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户
WORKDIR 指定在容器创建后,终端默认登录进来工作目录,一个落脚点
ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发。
制作docker镜像
示例:
FROM openjdk:8
#向镜像内添加文件到指定目录
ADD databuilder /databuilder
#运行命令修改时区,多行命令使用分隔符 \
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ; \
chmod +x /databuilder/*.sh
#指定端口
EXPOSE 8281
#容器启动后默认进入的目录
WORKDIR /databuilder
#指定镜像生成容器后的目录输出到宿主机
#VOLUME /databuilder/logs
#启动服务,/bin/bash为容器添加前台进程,使得start.sh执行后容器不因进程结束退出
CMD /bin/bash start.sh ; /bin/bash
制作镜像: docker build -t databuilder:latest .
-f : 参数可以用来指定Dockerfile文件,如果文件名为Dockerfile,可以不加-f Dockerfile
-t : 参数用来设置镜像的名字及标签
注意:最后有一个 . ,这个表示当前的构建环境的上下文,Dockerfile中的资源文件都默认成这个上下文的目录中查找,然后拷贝到容器当中去;也可以指定目录。
如果不带上 ”.“,或者指定的上下文目录不对,在编译时则会出现错误。
通过镜像启动容器
创建新容器:docker run -dit --restart=on-failure --name databuilder -v /opt/test/databuilder:/databuilder/logs --privileged=true -p 8281:8281 databuilder:latest
启动:docker start databuilder
停止:docker stop databuilder
删除容器:docker rm databuilder
删除镜像:docker rmi databuilder
--restart:
no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
将docker镜像打包为文件
容器打包为镜像:docker commit -a 提交人 -m “提交的描述信息” CONTAINERID 保存名称
例:docker commit -a MMM -m "test" ec3ea1a8b91c test
注:-a -m 参数可省略 docker commit ec3ea1a8b91c test
制作images包:docker save -o images安装包名称 images名称
例:docker save -o databuilder.tar.gz databuilder 或 docker save databuilder > databuilder.tar.gz
加载images包:docker load -i images安装包
例:docker load -i databuilder.tar.gz 或 docker load < databuilder.tar.gz
扩展--使用maven制作docker镜像
添加pom.xml依赖,制作:mvn docker:build -D maven.test.skip=true
注:mvn制作镜像时若已存在同名镜像,会制作失败,不会更新镜像,需要删除镜像后再制作
删除方式:docker rmi databuilder (databuilder为镜像名称)
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--镜像名称-->
<imageName>databuilder</imageName>
<!--dockerfile文件的目录 -->
<dockerDirectory>docker</dockerDirectory>
<!--镜像tag-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>target</directory>
<include>databuilder*.tar.gz</include>
</resource>
</resources>
</configuration>
</plugin>