目标:通过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
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
问题依旧在。。。
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
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