前言
docker 官方镜像源已经有 tomcat 的镜像,运行命令 docker pull tomcat 就可以拉下来,但是如果我们想将自己的 tomcat 打成镜像,例如,我们业务需要修改了 tomcat 的源码,这时候我们想要将他打包成镜像,如何操作 ?
一、准备
前言说是我们自己修改过源码的 tomcat,那我们必须要先准备好一个已经修改了源码,并打包成 tar.gz 的压缩包 apache-tomcat-9.0.58.tar.gz
二、操作步骤
编写文件 Dockerfile
下面有 Dockerfile 文件中参数的简要说明
# 依赖镜像
FROM centos
FROM openjdk:8u312-jdk-oracle
MAINTAINER liqiye
# 工作目录
WORKDIR /usr/local/apache-tomcat-9.0.58
# 添加压缩包,自动解压
ADD apache-tomcat-9.0.58.tar.gz /usr/local
# 映射端口
EXPOSE 8080
# 启动
ENTRYPOINT ["/usr/local/apache-tomcat-9.0.58/bin/catalina.sh","run"]
把 winhong-winas-9.0.58.tar.gz、Dockerfile 放在linux同级目录
运行命令打包镜像
后面的点表示根据当前目录下的 Dockerfile 文件构建
docker build -t liqiye/tomcat:v1 .
查看本地镜像
docker images
镜像运行容器
注意镜像名必须放在最后面
docker run -itd –name winas -p 8080:8080 -v /usr/local/docker/winas/webapps:/usr/local/apache-tomcat-9.0.58/webapps liqiye/tomcat:v1
登录自己的 docker 账号
docker login
上传到docker仓库
docker push liqiye/tomcat:v1
三、Dockerfile参数说明
FROM
指定基础镜像,必须是第一条指令
如果不以任何镜像为基础,写法为:FROM scratch
MAINTAINER
指定作者
WORKDIR
工作目录
这里指定的路径,是在使用 docker exec 进入容器后默认的路径
ADD
作用:添加内容到镜像
格式:ADD
说明:将复制指定的
EXPOSE
暴漏容器运行时的监听端口给外部
这个只是起暴露作用,并没有实现主机与容器的端口映射,要实现端口映射需要在启动容器的时候带上参数 -p
ENTRYPOINT
启动时的默认命令
也就是从这里指定启动的程序
Dockerfile 文件的参数有很多,这里只是对本片文章用到的参数,做简单的介绍
查看容器配置(位置、映射、配置参数等等)
docker inspect imageid|less
查看所有容器
docker ps -a
查看在运行容器
docker ps
docker cp
查看所有镜像
docker images
移除容器
docker rm xxx
移除镜像
docker rmi xxx
进入容器
docker exec -it xxx /bin/bash
通过镜像创建容器并运行
docker run -itd –name mytomff -p 8900:8080 -v /root/dockercreate/apache-tomcat-8.5.64/webapps:/usr/local/apache-tomcat/webapps xff/tomcat-final:v1
-p 本地端口:容器端口 -v 本地目录:容器目录
镜像名最后
到Dockerfile目录运行,通过dockerfile生成镜像
docker build -t xx/xxx:version .
创建tomcat—–Dockerfile
FROM centos
FROM openjdk:8u312-jdk-oracle
MAINTAINER xff
WORKDIR /usr/local/apache-tomcat
ADD apache-tomcat-8.5.64 /usr/local/apache-tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/apache-tomcat/bin/catalina.sh","run"]
创建jar运行容器—–Dockerfile
FROM openjdk:8u312-jdk-oracle
MAINTAINER xff
ADD ./*.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]
WORKDIR
工作目录,进入容器后默认目录
ADD
将本地文件放入容器目录
EXPOSE
暴露端口
ENTRYPOINT
运行程序
创建tomcat—–Dockerfile
FROM centos
FROM openjdk:8u312-jdk-oracle
MAINTAINER xff
WORKDIR /usr/local/apache-tomcat
ADD apache-tomcat-8.5.64 /usr/local/apache-tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/apache-tomcat/bin/catalina.sh","run"]
创建jar运行容器—–Dockerfile
FROM openjdk:8u312-jdk-oracle
MAINTAINER xff
ADD ./*.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]
docker run添加命令参数
docker run --restart=always -p 6379:6379 --name redis-local -v /data/compose/redis/data:/data -d redis redis-server --requirepass dsj@6076
1 | version: "3.0" |
docker run --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx128m" -v /hda/compose/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /hda/compose/elasticsearch/data:/usr/share/elasticsearch/data -v /hda/compose/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:6.8.23
https://blog.csdn.net/ming19951224/article/details/109063041
docker pull rocketmqinc/rocketmq
docker run -d --restart=always --name xffrmqnar -p 9876:9876 -v /docker/rocketmq/data/namesrv/logs:/root/logs -v /docker/rocketmq/data/namesrv/store:/root/store rocketmqinc/rocketmq sh mqnamesrv
创建配置文件
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址
brokerIP1 = 192.168.217.128
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95
docker run -d --restart=always --name rmqbroker --link xffrmqnar:namesrv -p 10911:10911 -p 10909:10909 -v /root/rmq/logs:/root/logs -v /root/rmq/store:/root/store -v /root/rmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf -e "NAMESRV_ADDR=192.168.217.128:9876" rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
(非必要)
docker pull pangliang/rocketmq-console-ng
docker run -d --restart=always --name xffadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.217.128:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 9999:8080 pangliang/rocketmq-console-ng
查看
http://192.168.217.128:9999/#/
1 | version: '3.1' |
当多个容器需要互相通信时,需要使用docker-network
docker多个容器部署集群,需要互相连接
docker network help
zookeeper集群示例
docker network create zk_cluster
docker network inspect zk_cluster
docker network connect zk_cluster zoo1
docker network connect zk_cluster zoo2
docker network connect zk_cluster zoo3