通过docker部署一个简单的web服务
前面把redis、oracle都部署好了,还有最后两步:
- 1)docker镜像制作和启动
- 2)redis和oracle都在vitualbox中,防火墙问题等等
docker 镜像及制作
首先安装好docker服务后。创建我的bddts目录,将我需要的jar包和配置文件等,都拷贝到该目录下:
编辑 Dockerfile 文件,如下:
FROM java:8
MAINTAINER Yueping Zhuo "jocelyn"
ENV KETTLE_HOME='/myapp/appsystems/data-integration'
ADD BD_DTS.jar /myapp/appsystems/apps/
ADD *.sh /myapp/appsystems/apps/
ADD data-integration /myapp/appsystems/data-integration
EXPOSE 8080
CMD java -Djava.io.tmpdir=/myapp/appsystems/tmp -Xbootclasspath/a:/myapp/appsystems/config: -jar -Dfile.encoding=UTF-8 /myapp/appsystems/apps/BD_DTS.jar
~
~
1)从java8的镜像上开始创建我们的web服务器镜像。
2)我们的web启动需要的环境变量
3)将jar文件、脚本文件、kettle环境加入到我们的image中
4)暴露端口8080
5)CMD 命令后面跟的是,当镜像制作好后,启动镜像使用的命令。
启动容器
docker run -it -v /docker/bddts/config:/myapp/appsystems/config -v /docker/bddts/logs:/myapp/applogs -v /docker/bddts/ktrs:/myapp/etlfile/ktrs/ bddts:latest
其中:-v 是指定挂载点,这样容器内的地址就能映射到宿主机的实际地址上,我们的conf、logs等都可以写到宿主机上。
VOLUM 也可以指定挂载点,但是在Dockerfile内通过VOLUMN指定的挂载点不同于启动容器通过-v指定的挂载点。通过 VOLUM 指定的挂载点,是指容器内会产生这一地址,但是这一地址会挂载到宿主机的一个随机目录下,一般在/var/docker目录下生产一个目录。 具体可以参考:宿主机与容器里文件共享 -v和 VOLUMEdocker
初看觉得 dockerfile 内的 VOLUM 没什么用,直接在外部指定就可以了。但是当我有个kettle home目录,下面的.kettle,pwd两个目录都需要挂载的时候,如果适用-v 必须写两次,不能通过指定他们的父目录就级联挂载上子目录。 这点可以通过 指定 -v /docker/kettle:/myapp/kettle 后,进入容器查看,发现确实没有看到他们子目录下的东西。这时必须在Dockerfile内通过 VOLUM /myapp/kettle 将该目录变为挂载点,再通过启动的时候 -v /docker/kettle:/myapp/kettle 就可以在容器中看到子目录下的东西了。
启动正常了,但是却无法连接另外一个虚拟机上的oracle库, 从宿主机是可以telnet通的,同时我的物理机Mac也是能正常连接数据库。
Oracle 网络连接
首先关掉了oracle服务器的防火前,保证docker的宿主机能telnet通后。执行下面操作:
- 验证docker 能不能ping 通oracle 服务器:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e91b01e1b2a3 bddts:latest "/bin/sh -c 'java -D…" 2 minutes ago Up 2 minutes 8080/tcp musing_mayer
$ sudo docker exec -it e91b01e1b2a3 /bin/bash
root@e91b01e1b2a3:/# ping 192.168.6.105
PING 192.168.6.105 (192.168.6.105): 56 data bytes
64 bytes from 192.168.6.105: icmp_seq=0 ttl=63 time=0.720 ms
64 bytes from 192.168.6.105: icmp_seq=1 ttl=63 time=0.893 ms
64 bytes from 192.168.6.105: icmp_seq=2 ttl=63 time=0.811 ms
通过docker exec进入容器内,发现能ping通宿主机。
如果能ping通,即可通过重建docker0网络恢复
先停掉宿主机上运行的docker容器,然后执行以下命令
在宿主机执行:
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d
systemctl restart docker
网上全是这种方法。。我还是不通哎。最后的解决方案是
使用了 --net host 作为启动参数,这样docker的虚拟机完全使用宿主机的网络了,docker连外网问题也一并解决了:
docker run -it -v /docker/bddts/config:/myapp/appsystems/config -v /docker/bddts/logs:/myapp/applogs -v /docker/bddts/ktrs:/myapp/etlfile/ktrs/ --net host bddts:latest
关于docker的网络模式,参考:Docker之网络配置
web页面访问
等到了访问页面我才想起来我没有映射宿主机和虚拟机的端口。。于是去用了-p准备映射端口的时候,发现了这么一句话:
WARNING: Published ports are discarded when using host network mode
好吧这么我也不用再去port端口了,原来在springboot配置文件中指定的8080就可以访问了~
通过docker部署一个简单的web服务相关推荐
- Docker安装Apache与运行简单的web服务——httpd helloworld
Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...
- IDEA 开发一个简单的 web service 项目,并打包部署到 Tomcat
文章目录 实现的效果 一.创建 web service 项目 二.测试类运行 web service 服务端 三.IDEA 打包 web service 项目 四.web service 项目部署到 ...
- 3.10 docker---概念介绍,安装和初识docker,docker的一些基本命令,使用docker部署一个nginx,
一.docker介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...
- [WS]使用Axis发布简单的Web服务
使用Axis,要发布一个Web服务非常简单,简直不能再简单了,尽管看起来过程和相关代码有些长.我这个帖子里用到了这些软件:Axis 1.1.Eclipse 2.1和Eclipse的Tomcat插件2. ...
- [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析
原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...
- maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目
maven学习笔记 一.什么是maven Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Life ...
- hosts多个ip对应一个主机名_一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端...
WebSSH 一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端.它是用Python编写的,基于tornado,paramiko和xterm.js. 特征 支持SSH密码验证,包括空密码. ...
- 在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!
作者 | Bram Dingelstad 译者 | 弯月 责编 |徐威龙 封图| CSDN下载于视觉中国 我们都遇到过这种情况:有人发现了一个bug,然而这不是一般的软件bug,甚至都不是通常意义上的 ...
- 使用Python实现一个简单的接口服务
使用Python实现一个简单的接口服务,可以通过get.post方法请求该接口,拿到响应数据.创建一个api_server.py文件,添加代码如下: import flask, json from f ...
最新文章
- 在 ubuntu 20.04 LTS 上安装 ROS2 执行 rosdep update 命令时出现的问题的解决办法
- 一切为了运营!如何从推广短信链接唤起 App?
- 使用Java读取 “Python写入redis” 的数据踩坑记录
- nssl1320,jzoj(初中)2108-买装备【dfs,水题】
- 关于Tensorflow安装opencv和pygame
- 设计原本思维导图笔记
- 好程序员大数据点睛:关于HDFS的二三事
- Java web 圈子设计_关于Java web开发中的面向对象问题?
- 拓端tecdat|scrapy爬虫框架和selenium的使用:对优惠券推荐网站数据LDA文本挖掘
- 汽车故障诊断技术【2】
- [0CTF 2016]piapiapia
- 微信HOOK 退出群聊
- 常用快递API及快递在线下单API分享
- firefox装在linux_在 Linux 中安装 Firefox
- android 天气预报
- 判断邮箱的正则表达式
- C++添加防火墙例外——检测目标程序不在例外列表时才进行添加,防止重复添加
- 文件服务协议:cifs/nfs 简介
- Markdown一键转换到富文本格式
- 半导体测试---测试基础原理之OS
热门文章
- 区块链是什么意思?区块链的概念及特点
- 2021年危险化学品生产单位安全生产管理人员考试内容及危险化学品生产单位安全生产管理人员试题及解析
- Fragment与Activity之间的完美邂逅
- two stage(两阶段实例分割)自上而下(Top-Down)和自下而上(Bottom-Up)
- php中显示li,请C语言大侠们帮忙看看,为什么总显示 array subsc... html中的ul li 用php怎么做?php在html中写 代码如......
- Big Faceless:PDF Viewer for JAVA Crack
- linux mate主题目录,七大顶级Linux桌面:Cinnamon和MATE_服务器_服务器产业-中关村在线...
- Cesium之3D拉伸显示行政区
- 解决html5直播延迟大问题,SRS 直播系统使用中发现延迟过大
- Apifox 学习笔记 - 前置操作