您的位置:首页 > 运维架构 > Docker

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

2017-08-22 11:22 1211 查看
用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 为进程号
[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目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息