从零开始部署 Java Web 应用
安装 docker(Linux)
yum install docker
不同系统安装命令可能不同service docker start
启动服务chkconfig docker on
将 docker 加入开机启动docker version
查看 docker 版本
下载 Tomcat 镜像
docker pull tomcat:${version}
下载 tomcat 镜像docker images
查看本地镜像
制作自己的镜像
vim Dockerfile
编写 Dockerfile
FROM tomcat:${version}
ADD ${yourApp.war} /usr/local/tomcat/webapps/
#修正语言乱码和时间错误
ENV LANG en_US.UTF-8
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
CMD ["catalina.sh", "run"]
docker build -t ${yourImageName} .
制作镜像
运行 Docker 容器
docker run --name ${containerName} -d -p 8080:8080 ${yourImageName}
参数 --name
后跟自定义的唯一别名,参数 -d
表示后台运行,参数 -p
表示端口映射 HOST_PORT
需要注意端口映射的 -p
参数中,前面的端口是宿主机的端口(HOST_PORT),冒号后面的端口是容器的端口(CONTAINER_PORT),例如 docker run -d -p HOST_PORT:CONTAINER_PORT nginx
常用命令
docker ps -a
查看所有容器,参数-a
表示显示所有容器,不加参数只显示运行中的容器docker logs ${containerName}
查看容器日志docker inspect ${containerName}
检查容器docker diff ${containerName}
查看容器文件变化docker exec -t ${containerName} date
查看容器时间docker cp /etc/localtime ${containerName}:/etc/localtime
通过拷贝本机的时区文件到容器修正时区错误curl localhost:8080
可以用这个命令快速进行访问测试
绑定 data volume
为了方便部署也可以使用参数 -v
绑定宿主机文件或文件夹 docker run --name ${yourContainerName} -d -p 8080:8080 -v ${path/yourApp.war}:/usr/local/tomcat/webapps/your.war tomcat:\${version}
和端口规则一样,前面的是宿主机的路径,后面的是容器的路径
运行 mysql 容器
docker run --name ${yourContainerName} -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=${yourPassword} mysql:\${version}
最终部署命令
用于连接的 mysql
docker run --name mysql -d -v /home/username/data:/var/lib/mysql -v /home/username/my.cnf:/etc/mysql/my.cnf:ro -e MYSQL_ROOT_PASSWORD=test mysql:5.7
tomcat 连接 mysql
docker run --name tomcat_mysql --link mysql:link_mysql -d -p 8089:8080 -v /home/usrename/logs:/usr/local/tomcat/logs -v /home/username/webapps:/usr/local/tomcat/webapps/ tomcat:9
对于连接的容器,可以对父容器使用docker exec ${yourContainerName} env
查看环境变量,或者查看 host 文件docker exec ${yourContainerName} cat /etc/hosts
得到连接容器信息
用于管理的 mysql
docker run --name mysql -d -p 3306:3306 -v /home/username/data:/var/lib/mysql -v /home/username/my.cnf:/etc/mysql/my.cnf:ro -e MYSQL_ROOT_PASSWORD=test mysql:5.7