学习编写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 ...
随机推荐
- C#一句话判断两个List<T>是否相等
List1.All(List2.Contains) && List1.Count == List2.Count
- nodejs编译遇到的问题
src\node_contextify.cc:631: Assertion 'args[1]->IsString()' failed. node 10 版本会出现这个问题, 安装natives后 ...
- 【ASP】session实现购物车
1.问题提出 利用session内置对象,设计并实现一个简易的购物车,要求如下: 1)利用用户名和密码,登录进入购物车首页 2)购物首页显示登录的用户名以及该用户是第几位访客.(同一用户的刷新应该记录 ...
- web端本地与服务端时间校验
当前校验逻辑: 本地和服务端的时间校验绑定在一个通用请求上,这个请求每七分钟会到服务端请求一次,本地拿到服务器时间后,计算请求服务器来回的时间,最后得出与服务器时间的差值,然后每次new Date() ...
- C# INI文件读写类
public class Ini { // 声明INI文件的写操作函数 WritePrivateProfileString() [System.Runtime.InteropServices.DllI ...
- freemarker导出带图片的word文档
最近做一个关于文档导出功能, 顺便学习了下freemarker,做了个关于导出带图片的word文档,模板并没有写全,只是验证代码的正确性 这只是做一个小功能,故只做了后台代码关于导出的代码,并未与前台 ...
- Xaml Controls Gallery 的五个没有用的控件
HyperlinkButton 功能:这个控件可以实现点击按钮后跳到另一个按钮的功能. 我觉得这个功能有些多余,据我了解,一些深受欢迎的游戏大都具备的一个特点,那就是操作简单,界面中不会出现冗余的东西 ...
- ASP.NET Core知多少(7):对重复编译说NO -- dotnet watch
ASP.NET Core知多少系列:总体介绍及目录 1. 引言 我们一般的开发过程,就是编码-->编译-->运行-->调试-->定位问题--->修改代码-->编译- ...
- aspnet core2中使用csp内容安全策略
aspnet core2中使用csp内容安全策略 问题:aspnet core2如何使用csp防止xss的攻击 方法: public void ConfigureServices( IServiceC ...
- 安装与配置Flutter开发环境
这篇博客我们介绍了Flutter,并且对比了H5,React Native,Flutter. 由于Flutter是跨平台的开发框架,开发一次可以同时运行在Android和iOS上面,所以我们开发时最好 ...