docker学习笔记(四)——Dockerfile创建自定义镜像

用Dockerfile创建docker,注意下,建议在空文件夹下创建

本篇我们将完成:

1、用Dockerfile创建docker

2、端口映射

3、卷挂载,即docker目录挂载到宿主机

1、用Dockerfile创建docker

在/opt/centos/目录下,创建Dockerfile

# Centos based container with Java and Tomcat
FROM 127.0.0.1:5000/centos:v2    #镜像源,这里为私有
MAINTAINER jack.zhang         #作者
ENV REFRESHED_AT 2017-8-28     #日期

# Prepare environment        #声明创建变量

ENV JAVA_HOME /opt/jdk1.8.0_131
ENV JRE_HOME /opt/jdk1.8.0_131/jre 
ENV  CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$JRE_HOME/bin:$PATH

RUN mkdir /data
RUN yum install -y wget         

#建议搭建本地软件源,取包比较快,当时直接yum安装也可以,前提宿主机可以上网

RUN wget http://192.168.10.144:9098/jdk-8u131-linux-x64.tar.gz && \  #下载10.144安装包
     tar -xvf jdk-8u131-linux-x64.tar.gz -C /opt/
     

# Install Tomcat

RUN wget http://192.168.10.144:9098/tomcat.tar.gz &&   tar -xvf tomcat.tar.gz -C /data/ &&   mv /data/tomcat /data/tomcat8
 
RUN chmod +x /data/tomcat8/bin/*sh

VOLUME ["/data/tomcat8/webapps/"]

EXPOSE 8090    #对外暴露的端口,即对外提供服务的端口
EXPOSE 8009

ENTRYPOINT ["/data/tomcat8/bin/catalina.sh", "run"]   
#启动tomcat,注意, docker里面的进程要一直挂起,要不然会退出,我们用这种办法启动

文件编辑完成后,我们来生成docker

注意命令后有个点,不要忘记,当前文件夹下面一定有Dockerfile
#docker build -t  test/test_app .   

会打印一堆日志,这不影响,如果有异常可以找出对应问题,
创建后,我们看下是不是已经成功了

# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
test/test_app           latest              29175ec8a720        17 hours ago        836MB

2、端口映射

因为上面的端口已经暴露出来,只要tomcat启动了,端口就是通的,所以我们这里要做的就是启动docker并把端映射出来,这里的8090是docker提供服务的端口

启动docker并映射端口 注意,-p 就是端口映射
#docker run -d  -p 8090:8090 --restart=always --name tomcat test/test_app
看下进程是否启动成功

# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
923bc1dda78f        test/test_app       "/data/tomcat8/bin..."   29 minutes ago      Up 29 minutes       8009/tcp, 0.0.0.0:8090->8090/tcp   tomcat

用宿主机访问IP:端口,访问是不是可以访问到了?

需要说明的是,端口映射其它是基于iptables的,所以如果docker启动没问题,进程也存在,确认宿主机的iptables 是否启动

centos iptables

#systemctl start firewalld.service #启动firewall

3、卷挂载,即docker目录挂载到宿主机

其它挂载目录到宿主机,没什么特别的,有些文档介绍的好像有多么深奥,其实没啥

只是启动命令加下参数罢了,

先关闭运行中的docker

#docker stop 923bc1dda78f    923bc1dda78f 是docker的进程号,通过docker ps 可以看得到

好了,挂载目录启动

-v 命令, 注意 前面的是宿主机的目录,后面提docker目录
即把宿主机的/usr/share/nginx/html 挂载到docker的/data/tomcat8/webapps/ROOT/下
# docker run -d -v /usr/share/nginx/html:/data/tomcat8/webapps/ROOT -p 8090:8090 --restart=always --name tomcatapp test/test_app

查看下进程
# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
923bc1dda78f        test/test_app       "/data/tomcat8/bin..."   29 minutes ago      Up 29 minutes       8009/tcp, 0.0.0.0:8090->8090/tcp   tomcat

我们进入到docker shell 看下是不是成功挂载
# docker exec -it 923bc1dda78f /bin/bash     #923bc1dda78f 为进程号
[[email protected] /]# cd /data/tomcat8/webapps/ROOT/
[[email protected] ROOT]# ls
404.html  50x.html  apache-tomcat-8.5.15-src.tar.gz  index.html  jdk-8u131-linux-x64.tar.gz  nginx-logo.png  poweredby.png

可以看到已经功能挂载

直接访问宿主机:端口,是不是首页不一样的~~

这样是不是很方便了,我们直接维护宿主机的目录就相当于维护docker目录。

时间: 2024-10-06 13:34:07

docker学习笔记(四)——Dockerfile创建自定义镜像的相关文章

Docker学习笔记——Mongo Dockerfile及容器运行

1.创建项目目录mongo,在目录下上传下载的Mongodb安装文件及mongo.conf配置文件,创建Dockerfile文件,项目结构如下: mongo - Dockerfile - mongo.conf - mongodb-linux-x86_64-3.4.9.tgz - data - logs Dockerfile内容如下: # mongo # SOURCE_IMAGE FROM centos # MAINTAINER_INFO MAINTAINER bluemooder [email 

Android 学习笔记四:创建工具栏按钮

原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏幕很小,所以很多时候我们会需要用到工具栏,通过下拉菜单之类的方式来节省空间. Android 提供了对工具栏按钮的强大支持. 增加一个工具栏按钮 我们现在给 MainActivity 增加一个搜索按钮.增加一个按钮需要做这三件事 一,在 res/menu/activity_main.xml 中增加一

docker学习笔记(2)---Dockerfile

在docker学习笔记(1)中,我们提到了通过commit 的命令来提交新的image,下面我们来通过Dockerfile文件来生成image,而且使用Dockerfile,很方便移植. 一.Dockerfile中几个常用的指令: (1)FROM 格式: FROM <image> 或者 FROM <image>:<tag> (2)MAINTAINER 格式: MAINTAINER <name> 说明:设置生成image的作者 (3)RUN 格式: 使用she

Docker学习笔记(四)走进docker的世界

Docker学习笔记(四)走进docker的世界 一个容器实际上是运行在宿主机上的一个进程. 只不过在启动这个进程之前进行了一些特殊处理,让这个容器进入了一个全新的虚拟环境,与宿主机的环境分开, 所以这个进程及其子进程认为自己运行在一个独立的世界里面. #查看进程 sudo docker run -d cyf:sshd /usr/sbin sshd -D ps axf 可以看到在宿主机里面的5948这个sshd进程 下面进入docker容器查看 sudo docker-enter.sh 6867

Docker学习笔记——镜像、容器、仓库

Docker三个基本概念 镜像(image) 容器(container) 仓库(Repository) 镜像(image) 搜索镜像 docker search nginx 获取镜像 docker pull nginx 指定Registry地址和具体的仓库名下载镜像,没有指定Registry地址,默认从Docker Hub上下载 docker pull jwilder/nginx-proxy 查看镜像 docker images  REPOSITORY          TAG         

docker学习笔记18:Dockerfile 指令 VOLUME 介绍

在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数据就没了,除非我们人工备份下来(或者基于容器创建新的镜像).能否可以让容器进程持久化的数据保存在主机上呢?这样即使容器删除了,数据还在. 2)当我们在开发一个web应用时,开发环境是在主机本地,但运行测试环境是放在docker容器上. 这样的话,我在主机上修改文件(如html,js等)后,需要再同步

8.Docker之使用dockerfile创建nginx镜像

一.前言 看了很多人的dockerfile,都是长篇大论,解释的又很少,对于初学者来说根本不知道指令的意思,哪怕知道指令的意思,也不知道指令后面配置的一大串东西来自于哪里,而这一大串又无需去记忆,例如: 开头的RUN指令都能根据dockerfile的指令说明可以知道该指令是干嘛用的,但是后面这一串这么长的东西又是来自于哪里? 所以在编写dockerfile之前,你必须懂的nginx(该文章是基于dockerfile创建nginx镜像)在linux上的安装流程,否则,需要安装什么依赖等都不知道,就

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被

Docker 学习笔记【3】 Docker 仓库、数据卷、数据卷容器,网络基础实操。高级网络配置学习

Docker 学习笔记[4] 高级网络配置实操,实战案例实验 =========================================================================== Docker 学习笔记[2] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,记录开始 =========================================================================== 被格式化的脚本内容: #开头代表