文章目录
- 基本概念
- commit构建镜像
- 常用指令
- 拓展指令
- ARG
- USER
- ONBUILD
- HEALTHCHECK
- SpringBoot项目镜像构建
- Nginx项目镜像构建
基本概念
Docker为我们提供一个用于自定义构建镜像的一个配置文件。利用docker的build命令,指定dockerfile文件,就能按配置内容把容器构建出来。
- 可以自定义镜像内容
- 构建公共基础镜像
- 开源程序快速部署
commit构建镜像
启动一个nginx容器,在里面把index.html改成自己的页面
docker run --rm -d -p 80:80 --name nginx_commit nginx
然后用commit命令打包成镜像
docker commit -a "lum1n0us" -m "MyNginx" nginx_commit mynginx:latest
-a 作者id
-m 描述信息
nginx_commit 当前容器的name
mynginx:latest 镜像名称:版本号
然后启动commit的镜像,发现页面已经被改成了自己的。
docker run --rm -d --name test -p 80:80 mynginx
常用指令
# 1.指定当前的基础镜像
FROM openjdk:8
# 2.描述镜像作者、联系方式
MAINTAINER Lum1n0us<shyshy.x@qq.com>
# 3.镜像的标签信息
LABEL version='1.0'
LABEL description='hello world'
# 4.环境变量配置
ENV JAVA_ENV
ENV APP_NAME test-dockerfile
# 5.在构建镜像时,需要执行的shell命令
RUN ls -la
RUN mkdir /www/test
# 6.将主机中的指定文件复制到容器的指定位置
#ADD /etc/hosts /etc/hosts
ADD ['/etc/hosts','/etc/hosts']
# 7.设置容器的工作目录,如果目录不存在,会自动创建
WORKDIR /app
RUN pwd
# 8.绑定数据卷
VOLUME ["/tmp"]
# 9.暴露容器启动后的端口
EXPOSE 8080/tcp
# 10.CMD和ENTRYPOINT选择其一即可,作用是镜像启动后,启动容器时默认执行的脚本
# CMD ping 127.0.0.1
CMD ["sh","-c","ping 127.0.0.1"]
拓展指令
ARG
将常量变为变量,给用户多一个选择。
ARG jdk=8
FROM openjdk:$jdk
这样默认openjdk的版本为8,在用户对这个dockerfile进行build时,可以用以下命令更改
docker build -t --build-arg jdk=11
USER
设置容器的用户,可以是用户名或pid,如果容器设置了以daemon用户去运行,那么RUN、CMD和ENTRYPOINT都会以这个用户去运行。需要保证该用户的权限足够。
RUN useradd wolfcode
USER wolfcode
ONBUILD
表示在构建镜像时做某操作,不对当前dockerfile生效,而是对以当前dockerfile镜像作为基础镜像的子镜像生效。
HEALTHCHECK
对容器的运行进行健康检查
# 健康检查,每各10s检查容器是否正常,每次不超过3s,如果失败,最多不超过3次
HEALTHCHECK --interval=10 --timeout=3 --retries=5 CMD ps -ef | grep java || exit 1
返回参数:
0:success =>健康
1:unsuccess => 不健康状态
SpringBoot项目镜像构建
dockerfile如下:
# 选择基础镜像及版本
FROM openjdk:8
# 将项目jar拷贝到容器中
ADD *.jar app.jar
# 设置环境变量
ENV APP_OPTS=""
ENV JVM_OPTS="-Duser.timezone=Asia/Shanghai -Xms128m -Xmx128m"
# 设置暴露端口
EXPOSE 8080
# 设置启动命令
ENTRYPOINT ["sh","-c","java $JVM_OPTS -jar /app.jar $APP_OPTS"]
保存后用以下命令来构建镜像
docker build -t springboot-docker:1.0.0 .
Nginx项目镜像构建
首先要下载nginx和pcre的包
wget https://nginx.org/download/nginx-1.8.1.tar.gz
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.bz2/download
dockerfile如下
FROM centos:7
MAINTAINER Lum1n0us<shyshy.x@qq.com>
ADD pcre-8.45.tar.bz2 /usr/local/src
ADD nginx-1.14.2.tar.gz /usr/local/src
RUN yum install -y wget gcc gcc-c++ make openssl-devel
RUN useradd -s /sbin/nologin -M www
WORKDIR /usr/local/src/nginx-1.14.2
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.45
RUN make && make install
# 关闭nginx后台运行
RUN echo 'daemon off;' >> /usr/local/nginx/conf/nginx.conf
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
ADD index.html /usr/local/nginx/html
CMD ["nginx"]
build并运行后发现构建成功