dockerfile手动构建镜像

1. dockerfile的理解

dockerfile 就像是镜像的配方,基于镜像通过一系列的dockerfile命令(药材)构建一个新的镜像。

2. dockerfile镜像的常用指令

FROM 基础镜像
RUN 制作镜像过程中需要的执行命令
CMD 容器启动的时执行的初始命令,容易被替换
ENTRYPOINT 容器启动的时候执行的初始命令,不能被替换,如果同时要用cmd命令将作为entrypoint的参数
ADD 将dockerfile当前目录下的文件拷贝到容器中(且会自动解压tar包)
CPPY 只copy不解压
WORKDIR 指定容器的默认工作目录
EXPOSE 镜像要暴漏的端口

3. 根据dockfile自定义构建镜像的思路

  1. FROM 后跟已有镜像或scratch(起跑线)新建一个系统镜像
  2. 根据制作镜像的命令编写dockerfile文件
  3. 根据dockerfile文件构建新的镜像
  4. 根据新的镜像启动容器并测试

4. 起跑线制作最小alpine系统镜像

  1. 镜像网站,如清华园下载alpine系统文件rootfs
   wget  https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/alpine/3.10/amd64/default/20191219_13%3A00/rootfs.tar.xz
  2.到mkdir /alpine 目录下mkdir   /alpine/rootfs -p  解压压缩包到rootfs目录下,按需修改系统信息如:vim /etc/os-release
  3. 将当项目录所有包重新打包到上一级目录
      tar zcf  ../apline.tar.gz *  
  4. 进入到dockerfile所在目录,编写制作dockerfile
      FROM   scratch   #从头开始
      ADD      apline.tar.gz    /    # "/" 为新系统镜像的跟目录下
      CMD [" /bin/sh"] 
  5.  docker  build -t   xinglong:v1 # 构建镜像并测试
      docker  run -it  xinlong:v1 进入目录成功表示一个linux下最小的镜像制作完成可用基于此 装各种服务。
  扩展  在自己制作系统镜像文件 都可以是将系统需要的文件打包成压缩包,构建新的镜像系统

5. dockerfile实战制作jpress项目

  1. 环境,centos7.6系统 ,基于centos7镜像制作jpress项目
  2. 制作思路与准备,目标就是将本该在容器中部署tomcat项目的需要的材料命令等
  移到宿主机相关目录下,编写到dockerfile文件中提交成镜像一劳永逸
  ① 同步系统源与epel扩展源到阿里云镜像站,下载
    openjdk  数据库(mariadb) 开发获取jpress.war 包
  ② 依据dockerfile的常用指令巧妙将素材编写好放到宿主机目录下
  ③ 编写CMD启动脚本,脚本中可放数据库交互命令,
  注意脚本中最后一个命令需要能够hang住tomcat进程,是容器活
  [root@docker01 tomcat]# ll
  apache-tomcat-8.0.27.tar.gz
  dockerfile
  init.sh
  jdk-8u60-linux-x64.tar.gz
  jpress.war

  [root@docker01 tomcat]# cat dockerfile 
  FROM centos:7
  RUN curl -o /etc/yum.repos.d/CentOS-Base.repo       http://mirrors.aliyun.com/repo/Centos-7.repo && \
  curl -o /etc/yum.repos.d/epel.repo       http://mirrors.aliyun.com/repo/epel-7.repo && \
  yum install mariadb-server mariadb  java-openjdk -y && \
  yum clean all
  RUN mkdir /app
  ADD apache-tomcat-8.0.27.tar.gz /app
  ADD jdk-8u60-linux-x64.tar.gz  /app
  COPY jpress.war /app/apache-tomcat-8.0.27/webapps
  ADD init.sh    /init.sh

  #!/bin/bash
  /usr/libexec/mariadb-prepare-db-dir
  /usr/bin/mysqld_safe --basedir=usr &>/dev/null &
  sleep  5
  mysql -e "create database jpress;"
  mysql -e "grant all on jpress.* to jpress@'localhost'           identified by '123456';"
  /app/apache-tomcat-8.0.27/bin/startup.sh
  tail -f  /etc/hosts
  
  docker build -t  tomcat:v1   构建镜像
  docker run -d -it  -p 80:8080 tomcat:v1  启动测试

你可能感兴趣的:(dockerfile手动构建镜像)