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

简介:

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

本篇我们将完成:

1、用Dockerfile创建docker

2、端口映射

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


1、用Dockerfile创建docker

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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

1
2
3
4
5
6
7
8
9
注意命令后有个点,不要忘记,当前文件夹下面一定有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提供服务的端口

1
2
3
4
5
6
7
启动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

1
#systemctl start firewalld.service #启动firewall

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

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

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

先关闭运行中的docker

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

好了,挂载目录启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 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 为进程号
[root@923bc1dda78f /] # cd /data/tomcat8/webapps/ROOT/
[root@923bc1dda78f 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目录。



本文转自 jackjiaxiong 51CTO博客,原文链接:http://blog.51cto.com/xiangcun168/1958270


相关文章
|
1天前
|
存储 安全 持续交付
【Docker 专栏】Docker 镜像的版本控制与管理
【5月更文挑战第9天】本文探讨了Docker镜像版本控制与管理的重要性,包括可重复性、回滚能力、协作开发和持续集成。常用方法有标签、构建参数和版本控制系统。管理策略涉及定期清理、分层管理和镜像仓库。语义化标签、环境变量和配置文件在版本控制中有应用。版本系统与Docker结合能跟踪历史和促进协作。注意点包括优化镜像大小、确保安全性和兼容性。案例分析和未来趋势展示了持续发展的镜像管理技术,为Docker应用的稳定与进步保驾护航。
【Docker 专栏】Docker 镜像的版本控制与管理
|
1天前
|
存储 安全 开发者
如何删除 Docker 镜像、容器和卷?
【5月更文挑战第11天】
19 2
如何删除 Docker 镜像、容器和卷?
|
1天前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
1天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
1天前
|
Java Linux 数据安全/隐私保护
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
|
1天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
1天前
|
存储 缓存 运维
【Docker 专栏】Docker 镜像的分层存储与缓存机制
【5月更文挑战第8天】Docker 镜像采用分层存储,减少空间占用并提升构建效率。每个镜像由多个层组成,共享基础层(如 Ubuntu)和应用层。缓存机制加速构建和运行,通过检查已有层来避免重复操作。有效管理缓存,如清理无用缓存和控制大小,可优化性能。分层和缓存带来资源高效利用、快速构建和灵活管理,但也面临缓存失效和层管理挑战。理解这一机制对开发者和运维至关重要。
【Docker 专栏】Docker 镜像的分层存储与缓存机制
|
1天前
|
存储 安全 数据安全/隐私保护
【Docker 专栏】Docker 容器化应用的备份与恢复策略
【5月更文挑战第9天】本文探讨了Docker容器化应用的备份与恢复策略,强调了备份在数据保护、业务连续性和合规要求中的关键作用。内容涵盖备份的重要性、内容及方法,推荐了Docker自带工具和第三方工具如Portainer、Velero。制定了备份策略,包括频率、存储位置和保留期限,并详细阐述了恢复流程及注意事项。文章还提及案例分析和未来发展趋势,强调了随着技术发展,备份与恢复策略将持续演进,以应对数字化时代的挑战。
【Docker 专栏】Docker 容器化应用的备份与恢复策略
|
1天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
1天前
|
Ubuntu Docker 容器
docker容器保存和导入
docker容器保存和导入
13 0