学习编写Dockerfile
前言
我们学习docker的话,其主要目的还是要用来改变我们部署应用程序的传统习惯,达到解放生产力,解放人力的目的。这篇则自己来熟悉一下dockerfile常用命令。并且尝试改变下生产环境手动部署应用的方式。
常用基础命令
FROM 该dockerfile的基础镜像
RUN 启动时用来执行命令,通常用来执行应用程序安装和更新
CMD docker启动时,RUN执行前默认调用的命令,多条命令的话只会执行最后一条命令。
COPY 从上下文环境中复制文件到容器中。
ADD 更高级的复制功能,提供解压功能。
EXPOSE 暴露端口。
第一个Dockerfile
好吧,先来个hello world体检下dockerfile的便捷之处。
FROM ubuntu:14.04
MAINTAINER luck_successful@163.com RUN apt-get update CMD echo "hello docker I am garfieldzf"
接下来就生成镜像
docker build -t myubuntu:v1
执行无误后在终端里会显示hello docker I am garfieldzf
第二个Dockerfile
这个dockerfile则用来部署一个war包到容器中的tomcat中。在宿主机创建目录/usr/dockerfile。拷贝apache-tomcat-8.0.53.tar.gz、jdk-8u161-linux-x64.tar.gz springMVC.war都当前目录中。
创建Dockerfile文件并修改内容 touch Dockerfile vi Dockerfile
FROM centos:latest
MAINTAINER luck_successful@163.com WORKDIR /usr
RUN mkdir jdk
RUN mkdir tomcat ADD jdk-8u161-linux-x64.tar.gz /usr/jdk/
ADD apache-tomcat-8.0.53.tar.gz /usr/tomcat/ ENV JAVA_HOME /usr/jdk/jdk1.8.0_161
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/tomcat/apache-tomcat-8.0.53
ENV CATALINA_BASE /usr/tomcat/apache-tomcat-8.0.53
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/tomcat/apache-tomcat-8.0.53/bin/catalina.sh run
这里注意,我从本地下载的tomcat没有修改端口,一开始EXPOSE写的 80端口。build 和run后tomcat访问不了。这才想起来端口不对。
构建镜像。注意后面的小数点,表示构建镜像的上下文环境。
docker build -t garfieldzf/tomcat .
构建完成使用docker images会看到刚才构建的文件
运行镜像。 以后来运行的方式来运行。启动后会返回容器id
docker run -d -it -p 8080:8080 garfieldzf/tomcat
先来访问tomcat。看到tomcat跑起来,则说明容器内容tomcat已启动
接下来就是把本机的war包部署到容器的tomcat目录下
使用docker cp 把war复制到容器里。复制前先用docker ps查看容器id
docker cp springMVC.war [容器id]:/usr/tomcat/apache-tomcat-8.0.53/webapps/
重启容器
docker restart [容器id]
访问:http://192.168.80.129:8080/springMVC/
完事。 第一个Dockerfile完成了。
学习编写Dockerfile的更多相关文章
- 编写 DockerFile
编写 DockerFile 本节内容简介 在前面的实验中我们多次用到的 Dockerfile,在本实验里我们将通过完成一个实例来学习Dockerfile的编写. 本节中,我们需要依次完成下面几项任务: ...
- [转帖]Docker学习之Dockerfile命令详解
Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...
- 4.Docker容器学习之Dockerfile入门到放弃
原文地址: 点击直达 0x01 Dockerfile 编写 描述:Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内 ...
- Docker容器学习梳理 - Dockerfile构建镜像
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...
- 实战docker,编写Dockerfile定制tomcat8镜像,实现web应用在线部署
最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7 ...
- 编写Dockerfile自定义镜像
要求 编写一个Dockerfile自定义centos镜像,要求在容器内部可以使用vim和ifconfig命令,并且登入落脚点为/usr/local 编写Dockerfile FROM centos M ...
- 编写 Dockerfile 生成自定义镜像
一般情况下我们可以从公共渠道诸如 DockerHub 获取镜像上获取镜像,但是在实际生产过程中,往往需要定制化的镜像,例如修改一些配置文件,增加一些特殊的命令或软件等需求,这时就需要通过编写 Dock ...
- DOCKER学习_012:Dockerfile配置指令详解
1 Dockerfile结构 基础镜像信息 镜像操作指令 容器启动时执行指令 2 FROM 指定基础镜像,用于继承其他镜像使用的 FROM ubuntu:14.06 FROM centos FROM ...
- (转)编写 DockerFile
这几天在研究怎样制作docker image. 其中使用dockerfile是一种可记录制作image的过程的并且是容易重复使用的一种方式.在园子里看到了一篇好文,于是分享到这里~~ 原文链接: ht ...
随机推荐
- Go语言基础(二)
Go语言基础(二) 跟着上篇,继续看Go基础 一.变量作用域 与C类似,有全局变量.局部变量.形参之分 package main import "fmt" // 全局变量 var ...
- 新建一个express项目的流程
1.先创建一个文件夹,然后创建一个项目,默认有一个:package.json 文件 #初始化项目 npm init 2.初始化项目会出现一个默认的提醒 #这个实用程序将指导您创建一个包,json文件. ...
- php操作数组函数
整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...
- 旧项目Makefile 迁移CMake的一种方法:include Makefile
有些c++旧项目用Makefile,要迁移CMake的时候非常痛苦,有些像static pattern的语法和make自带命令 cmake要重写一套非常的麻烦. 因此这里用trick的方法实现了一种i ...
- 33 ArcToolBox学习系列之数据管理工具箱——投影与变换(Projections and Transformations)未完待续……
工具箱位置 打开ArcToolBox,找到工具集Projections and Transformations,位置如下:ArcToolbox--Data Management Tools--Proj ...
- d3.js,初遇
接触d3完全是由兴趣所致,废话不多说看代码: var dataArray = [23, 13, 21, 14, 37, 15, 18, 34, 30];这是这个图所需要的数据,其实这个柱状图最初不长这 ...
- 最简单的 nginx 负载均衡,只能演示,企业中最好不用
修改nginx.conf 配置,重启nginx即可 upstream 包名{ ip_hash; #使用此功能,权重和备份都不能使用!一台机器永远只连同一台机子 server IP:端口 weight= ...
- nova boot from volume代码分析
首先要创建一个bootable volume curl -i http://16.158.166.197:8776/v1/c24c59846a7f44538d958e7548cc74a3/volume ...
- Vue 学习笔记 — 组件初始化
简书 在vue中有3个概念很容易搞混,data,computed,props,特别是我们这些原后端开发人员. new Vue({ el: "#x", data: { id: 1 } ...
- 高级Java面试总结1
一.三大框架方面问题 1.Spring 事务的隔离性,并说说每个隔离性的区别 解答:Spring事务详解 2.Spring事务的传播行为,并说说每个传播行为的区别 解答:Spring事务详解 3. ...