• Docker 自定义镜像Dockerfile使用详细教程


    认识 Dockerfile 文件

    Dockerfile 用于构建 Docker 镜像,Dockerfile 文件是由一行行命令语句
    组成,基于这些命令即可以构建一个镜像

    比如下面就是一个Dockefile 文件样例:

    FROM XXX/jdk:8
    MAINTAINER docker_user
    ENV JAVA_HOME /usr/local/java
    ADD apache-tomcat-8.0.32.tar.gz /usr/local/
    RUN mv apache-tomcat-8.0.32 tomcat8
    EXPOSE 8080
    RUN chmod u+x /usr/local/tomcat8/bin/*.sh
    CMD /usr/local/tomcat8/bin/catalina.sh start
    

    Dockerfile 的基本结构

    一般的,Dockerfile 分为四部分:

    • 基础镜像信息
    • 维护者信息
    • 镜像操作指令
    • 容器启动时执行指令

    Dockerfile 指令

    FROM

    格式为 FROM <image> 或 FROM <image>:<tag>
    Dockerfile 文件的第一条指令必须为 FROM 指令。并且,如果在同一个 Dockerfile 中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)
    

    MAINTAINER

    格式为 MAINTAINER <name>
    指定维护者信息
    

    ENV

    格式为 ENV <key> <value>
    指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持
    

    ADD

    格式为 ADD <src> <dest>
    复制指定的<src>到容器中的<dest>
    

    EXPOSE

    格式为 EXPOSE <port> [<port>...]
    告诉 Docker 服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过 -p 映射端口,Docker 主机会自动分配一个端口转发到指定的端口
    

    RUN

    格式为 RUN <command>
    RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 \ 来换行
    

    CMD

    指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
    

    Dockerfile 自定义镜像

    自定义 JDK 镜像

    FROM centos:latest MAINTAINER wkcto
    ADD jdk-8u121-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/local/jdk1.8.0_121
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV PATH $PATH:$JAVA_HOME/bin
    CMD java -version
    构建镜像:docker build -t wkcto_jdk1.8.0_121 .
    运行镜像:docker run -d ac84bde53958
    

    自定义 Tomcat 镜像

    FROM wkcto_jdk1.8.0_121 MAINTAINER wkcto
    ADD apache-tomcat-8.5.24.tar.gz /usr/local/
    ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.24
    ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    EXPOSE 8080
    CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run
    构建镜像:docker build -t wkcto-tomcat-8.5.24 .
    运行镜像:docker run -d -p 8080:8080 ab41b5f48256
    

    自定义 MySQL 镜像

    FROM centos:centos6 MAINTAINER wkcto
    RUN yum install mysql-server mysql -y
    RUN /etc/init.d/mysqld start &&\
     mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456' WITH
    GRANT OPTION ;"&&\
     mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456'
    WITH GRANT OPTION ;"&&\
     mysql -uroot -p123456 -e "show databases;"
    EXPOSE 3306
    CMD /usr/bin/mysqld_safe
    构建镜像:docker build -t wkcto-mysql .
    运行镜像:docker run -d -p 3306:3306 09ce279d92df
    

    自定义 Redis 镜像

    FROM centos:latest MAINTAINER wkcto
    RUN yum install epel-release -y && yum install redis -y && yum install net-tools -y
    EXPOSE 6379
    CMD /usr/bin/redis-server –protected-mode no
    构建镜像:docker build -t wkcto-redis .
    运行镜像:docker run -d -p 6379:6379 390583cf0531
    

    镜像发布到仓库

    阿里云容器镜像仓库网址:https://dev.aliyun.com

    docker login --username=xxxx registry.cn-qingdao.aliyuncs.com
    docker tag [ImageId] registry.cn-qingdao.aliyuncs.com/123test/1234test:[ 镜 像 版 本 号 ]
    docker push registry.cn-qingdao.aliyuncs.com/123test/1234test:[镜像版本号] 请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
    

    Dockerhub镜像加速

    vim /etc/docker/daemon.json
    {"registry-mirrors": ["https://gg3gwnry.mirror.aliyuncs.com"]}
    

    Docker 应用部署

    部署一个 SpringBoot 项目
    1、将开发的 springboot 程序打成 jar 包或者 war 包;
    2、将打好的 jar 包或 war 包上传到 Linux 某个目录下,比如:/root/docker
    3、定义 Dockerfile 文件,用于创建项目镜像;

    Docker部署Jar包SpringBoot程序

    定义Jar包程序Dockerfile文件

    FROM wkcto_jdk1.8.0_121 MAINTAINER wkcto
    ADD springboot-web-1.0.0.jar /opt
    RUN chmod +x /opt/springboot-web-1.0.0.jar
    CMD java -jar /opt/springboot-web-1.0.0.jar
    

    构建和运行 Jar 包程序的镜像

    构建镜像:docker build -t springboot-web-jar .
    运行容器:docker run -d ac84bde53958
    

    Jar 包程序依赖容器环境准备

    运行 Redis 容器:docker run -p 6379:6379 -d redis
    运行 MySQL 容器:docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e
    MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
    修改容器保存:docker commit 容器 id xxx(镜像名:tagxxx)
    比如:docker commit b034f6d23833 wkcto_mysql_new
    

    运行 Docker 化的 Jar 包程序,通过windows的浏览器访问,验证SpringBoot 项目是否可以正常访问;

    Docker部署War包SpringBoot程序

    定义 War 包程序 Dockerfile 文件

    FROM wkcto-tomcat-8.5.24 MAINTAINER wkcto
    ADD springboot-web-1.0.0.war /usr/local/apache-tomcat-8.5.24/webapps
    EXPOSE 8080
    CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run
    

    构建和运行 War 包程序的镜像

    构建镜像:docker build -t springboot-web-war .
    

    War 包程序依赖容器环境准备,与上面部署 Jar 程序依赖的容器环境一样;

    运行 Docker 化的 War 包程序
    通过windows的浏览器访问,验证SpringBoot 项目是否可以正常访问;

    springboot-web-1.0.0.war → springboot-web-1.0.0
    
  • 相关阅读:
    visual C sharp express from 360 free download
    Druid 在小米公司部分技术实践-博客-云栖社区-阿里云
    公司业务-猫眼知健康
    Sculptor
    可译网 —— 翻译可以更简单
    牛客网-专业IT笔试面试备考平台,最全C++JAVA前端求职题库,全面提升IT编程能力
    设置Redis的LRU策略
    springboot中使用aop技术
    elasticSearch的部署和使用
    jvm原理和代码运行的过程
  • 原文地址:https://www.cnblogs.com/gaohongyu/p/16185426.html
Copyright © 2020-2023  润新知