Docker Docker 之使用 Dockfile 制作一个简单镜像

· 2020年03月31日 · 最后由 cool 回复于 2020年04月03日 · 2005 次阅读

Dockfile 制作一个简单的镜像

实现功能:

  • 拉取 centos 镜像,安装 wget、jdk、git、maven 软件,并设置环境变量
  • 下载代码,并执行测试用例

Dockerfile 文件

FROM centos

ADD entrypoint.sh /root
ADD jdk /usr/local/jdk/

RUN yum install -y wget
RUN yum install -y git
RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
RUN tar -zxvf apache-maven-3.6.3-bin.tar.gz
RUN mv apache-maven-3.6.3 /usr/local


ENV JAVA_HOME=/usr/local/jdk/
ENV MAVEN_HOME=/usr/local/apache-maven-3.6.3
ENV PATH=$PATH:$MAVEN_HOME/bin:$JAVA_HOME/bin

ENTRYPOINT ["/bin/bash","/root/entrypoint.sh"]

上面多条的 RUN 命令也可以合并执行,替换成

RUN yum install -y wget \
&& yum install -y git \
&& wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz \
&& tar -zxvf apache-maven-3.6.3-bin.tar.gz \
&& mv apache-maven-3.6.3 /usr/local

entrypoint.sh 文件

#/bin/bash

git clone https://github.com/ycwdaaaa/techUI
cd techUI
mvn test

最后用docker build -t newimage . 在当前工作目录下打一个镜像

Dockerfile 参数详解

  • FROM:指定基础镜像,必须为第一个命令
  • RUN:构建镜像时执行的命令
  • ADD:将本地文件添加到容器中,tar 类型文件会自动解压 (网络压缩资源不会被解压),可以访问网络资源,类似 wget
  • COPY:功能类似 ADD,但是是不会自动解压文件,也不能访问网络资源
  • CMD:构建容器后调用,也就是在容器启动时才进行调用。
  • ENTRYPOINT:配置容器,使其可执行化。配合 CMD 可省去"application",只使用参数。
  • ENV:设置环境变量
  • WORKDIR:工作目录,类似于 cd 命令
  • LABEL:用于为镜像添加元数据
  • EXPOSE:指定于外界交互的端口

参考https://www.cnblogs.com/panwenbin-logs/p/8007348.html

私有镜像仓库 -- 镜像的上传和拉取

docker pull registry
docker run -d -p 5000:5000 -v /usr/local/registry:/var/lib/registry --restart=always --name registry registry:latest    
# --restart=always 此参数保证当docker重启后,容器也会重新启动   -v  宿主机目录挂载到容器中
docker pull busybox          #拉取busybox镜像
docker tag busybox localhost:5000/bosybox:v1.0   #打tag
docker push localhost:5000/bosybox:v1.0  #push到私有镜像仓库
curl http://localhost:5000/v2/_catalog
共收到 3 条回复 时间 点赞
重新开启了讨论 02月27日 21:26
关闭了讨论 05月13日 11:18
关闭了讨论 05月13日 11:18
关闭了讨论 05月13日 11:18
关闭了讨论 05月13日 11:18

后边可以再看下 docker-compose

#2 · 2020年04月01日 Author
花菜 回复

谢谢提醒😄 起初分层执行方便调试,我来改成合并执行的方式

RUN 命令可以合并起来执行

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册