docker入门3:Dockerfile部署的第一个java应用

本文介绍了如何使用Dockerfile将JPress WAR包部署到Tomcat容器中,并与MySQL容器进行连接配置。内容包括从Daocloud获取Tomcat和MySQL镜像,Dockerfile的编写,如FROM、MAINTAINER、RUN、ADD、COPY等指令的使用,以及启动和连接问题的解决。在实际操作中,遇到数据库连接问题,但最终成功创建了数据库和表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:通过dockerfile把jpress war包部署到tomcat上,并连接到mysql容器完成配置
1.docker pull daocloud.io/library/tomcat
  docker pull mysq

2.Dockerfile语法:
FROM :base image
MAINTAINER:维护者
RUN:在base iamge上执行指定命令
ADD和COPY:都可以添加拷贝文件,只是ADD可以添加远程文件
CMD:一个dockerfile只能使用一次,启动容器时指定默认命令执行选项,docker run可以指定选项来覆盖
EXPOSE:容器暴露的端口
ENV:设定环境变量
ENTRYPOINT:指定配置容器启动后执行的命令
USER:指定user来RUN,CMD和ENTRYPOINT

Dockerfile文件:
from daocloud.io/library/tomcat
MAINTAINER aryoyo
COPY jpress.war /usr/local/tomcat/webapps
3.docker build -t jpress:latest . 报错:
Step 2 : COPY jpress-web-newest.war /usr/local/tomcat/webapps
stat /var/lib/docker/devicemapper/mnt/71f885e6c5a228807aaccef00cb7eb77111afb8bd6ad4f9a02d83ca884404e5b/rootfs/usr/local/tomcat/webapps/jpress-web-newest.war: not a directory
解决:Dockerfile修改COPY jpress.war /usr/local/tomcat/webapps为  COPY jpress.war /usr/local/tomcat/webapps/
[root@rhel64-64bit ~]# docker build -t jpress:latest .
Sending build context to Docker daemon 72.71 MB
Sending build context to Docker daemon 
Step 0 : FROM daocloud.io/library/tomcat
 ---> 8e956bfcc8a4
Step 1 : MAINTAINER aryoyo
 ---> Running in 4b0b96e505f3
 ---> 9dc22282f825
Removing intermediate container 4b0b96e505f3
Step 2 : COPY jpress.war /usr/local/tomcat/webapps/
 ---> fbd01889a1e3
Removing intermediate container 41df8a7dce67
Successfully built fbd01889a1e3

[root@rhel64-64bit ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED                  VIRTUAL SIZE
daocloud.io/library/tomcat    latest              8e956bfcc8a4        Less than a second ago   467.1 MB
jpress                        latest              fbd01889a1e3        46 seconds ago           487.8 MB

4.启动jpress和mysql容器:

[root@rhel64-64bit ~]# docker run -p 8889:8080 -d jpress
e03d14474acff940faccd5cddf8b4ad7af7bfe161acfec38026b434d4346e363

[root@rhel64-64bit ~]# netstat -pan|grep 8889
tcp        0      0 :::8889                     :::*                        LISTEN      10522/docker-proxy  

[root@rhel64-64bit ~]#docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jpress -d mysql 

5.数据库此处填写宿主机的地址192.168.1.103,但是始终连接不通,按理说容器之间是通过网桥互相通信应该没问题的

[root@rhel64-64bit ~]# netstat -pan|grep 3306                  
tcp        0      0 172.17.42.1:44180           172.17.0.10:3306            TIME_WAIT   -                   
tcp        0      0 172.17.42.1:44160           172.17.0.10:3306            TIME_WAIT   -                   
tcp        0      0 172.17.42.1:44156           172.17.0.10:3306            TIME_WAIT   -                   
tcp        0      0 172.17.42.1:44164           172.17.0.10:3306            TIME_WAIT   -                   
tcp        0      0 172.17.42.1:44168           172.17.0.10:3306            TIME_WAIT   -                   
tcp        0      0 172.17.42.1:44146           172.17.0.10:3306            TIME_WAIT   -                   
tcp        0      0 :::3306                     :::*                        LISTEN      11069/docker-proxy 
[root@rhel64-64bit nginx]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.56847afe9799	no		veth4923fa7
					                vethecbf01a
尝试解决方案:
1.在docker配置文件中加入:--icc=true允许容器之间互相连通
DOCKER_OPTS="--icc=true"
2.使用--link链接允许容器间安全通信,Docker 创建了一个安全隧道而不需要对外公开任何端口给外部容器,因此不需要在创
  建容器的时候添加-p或-P指定对外公开的端口
docker run -p 3306:3306 --name=jmysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jpress -d mysql
docker run -p 8889:8080 --link jmysql:mysql -d jpress
问题依旧在。。。
最终在换了mysql的版本后得以解决:
docker pull daocloud.io/library/mysql:5.6

6.

重启jpress容器后即可.mysql容器内jpress数据库已创建jpress的表了:

mysql> select * from jpress_user\G
*************************** 1. row ***************************
           id: 1
     username: admin
     password: 730d939c9e2ede41cfce7a5d301062fdbe5ba707002d3fc5dc07874e99306ddb
         salt: db2cec6bf85c82e


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值