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
Docker 自定义镜像Dockerfile使用详细教程的更多相关文章
- 创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作
实例解析Docker如何通过commit,Dockerfile两种方式自定义Dcoker镜像,对自定义镜像的pull,push,rmi等常用操作,通过实例创建一个Python数据分析开发环境的Dock ...
- 【Docker学习之五】Docker自定义镜像示例
环境 docker-ce-19.03.1-3.el7.x86_64 centos 7 一.创建centos+jdk+tomcat镜像 对于公用的容器比如,tomcat.nginx.mysql等应用组件 ...
- docker 自定义镜像
step1:自定义镜像 原镜像 registry.aspider.avlyun.org/library/php-apache docker run -d --name xz_apache regist ...
- docker自定义镜像上传阿里云
1.alpine制作jdk镜像 2.Alpine制作jre镜像(瘦身) 3.Docker镜像上传至阿里云 alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻 ...
- docker自定义镜像仓库
创建私有仓库 vim /etc/docker/daemon.json //使用私有仓库运行容器 , 宿主机ip { "insecure-registries" : ["1 ...
- 自定义Sublime Text图标详细教程
改造后的Sublime 先看看我改造后的神器图标,接下来你就知道下面是干什么的了 : 之前无意间在刘哇勇的博客上看到这么一篇文章,很好奇就尝试着更改Sublime Text ...
- 4. Docker自定义镜像
下面制作镜像: 此时,验证一下: 以上验证都是成功的,到此就可以把刚才建立并经过刚才运行并验证的镜像包通过各种方式传递给其他人来部署使用了,并且环境肯定是可你统一的.
- docker 构建镜像 centos7 nginx php
#docker 构建镜像(Dockerfile) centos 7.4.1078镜像制作 nginx镜像制作(以前面centos7镜像为基础) Nginx+php镜像制作 更多操作实例,查看git里的 ...
- Docker 安装Centos,Tomcat,Jdk等相关的自定义(Dockerfile)镜像
一.安装Centos镜像 这里Centos 安装 国内daocloud网站提供的官方镜像 docker pull daocloud.io/library/centos:latest 利用docker ...
- Docker学习(六)Dockerfile构建自定义镜像
Docker学习(六)Dockerfile构建自定义镜像 前言 通过前面一篇文章可以知道怎么去使用一个镜像搭建服务,但是,如何构造自己的一个镜像呢,docker提供了dockerfile可以让我们自己 ...
随机推荐
- 学习SSD—day1_20240814
1.SSD的基本概念以及结构 SSD是一种以半导体(半导体闪存)作为存储介质吗,使用纯电子电路实现的存储设备. SSD硬件包括几大组成部分:主控.闪存.缓存芯片DRAM(可选,有些SSD上可能只有SR ...
- Jetpack架构组件学习(5)——Hilt 注入框架使用
原文: Jetpack架构组件学习(5)--Hilt 注入框架使用-Stars-One的杂货小窝 本篇需要有Kotlin基础知识,否则可能阅读本篇会有所困难! 介绍说明 实际上,郭霖那篇文章已经讲得比 ...
- Visual Studio C++ 安装以及使用教程
官网下载网址 https://visualstudio.microsoft.com/zh-hans/ Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (micr ...
- [postgres]使用pgbench进行基准测试
前言 pgbench是一种在postgres上进行基准测试的简单程序,一般安装后就会自带.pgbench可以再并发的数据库绘画中一遍遍地进行相同序列的SQL语句,并且计算平均事务率. 测试准备 既然要 ...
- Dev-C++ 安装教程
下载地址:https://sourceforge.net/projects/orwelldevcpp/ 下载完成,在指定的下载位置有一个安装包: 双击开始安装程序 安装是默认英文安装即可,在启动后可以 ...
- DOM & BOM – 大杂烩
Document.scrollingElement 参考: why to use 'html, body' for scrollTop instead of just 'html' MDN 使用doc ...
- jQuery - 不同版本的差异對比
jQuery 一共分了 1.x.2.x.3.x 这三个大版本. jQuery 的版本都是不向后兼容的! jQuery 的版本都是不向后兼容的! jQuery 的版本都是不向后兼容的!重要的事情说三遍哈 ...
- 新题速看!2021阿里、腾讯、字节都在问的SQL数据库笔试题及答案都给你整理好啦!
前 言 2021到了最后一个月份,年后肯定有蛮多小伙伴需要跳槽换工作,但对于年限稍短的软件测试工程师,难免会需要进行笔试,而在笔试中,基本都会碰到一道关于数据库的大题,今天这篇文章呢,就收 ...
- 浏览器中生成 OSS 令牌 | Web Crypto API
笔者写文章的时候,都会把图片通过自己搭建的一个简单站点 https://imgbed.sugarat.top/ 把图片上传到各种云的对象存储服务(OSS)上. 然后通过CDN访问,保证图片有可靠的访问 ...
- Android usb广播 ACTION_USB_DEVICE_ATTACHED流程源码分析
整体流程图 大概意思就是UsbHostManager启动监控线程,monitorUsbHostBus会调用usb_host_run函数(使用inotify来监听USB设备的插拔)不停的读取bus总线, ...