第一次实践,方法比较笨,欢迎大神们指导。
1,准备web应用编译文件
创建eval/web目录,添加eval_linux.jar文件(将其替换为自己的web应用jar即可),编写Dockerfile,如下:
# Use an official java as a parent image
FROM java:8
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY evaluation_linux.jar /app/evaluation_linux.jar
# Make port 80 available to the world outside this container
EXPOSE 80
# Run java -jar when the container launches
CMD ["java", "-jar", "eval_linux.jar"]
2,准备数据库内容
通过如下命令行运行容器将创建的数据库保存在本地/home/luye/eval/data路径中
docker run --name hi-eval -v /home/luye/eval/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
获取上述容器IP地址:
docker inspect hi-eval|grep IPAddress
在Linux系统上远程登录容器,生成guns数据库:
mysql -h 172.17.0.4 -u root -p
mysql> create database guns;
mysql> commit;
mysql> use guns
Database changed
mysql> source /home/luye/eval/db_data/eval-20190421.sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| guns |
| mysql |
| performance_schema |
| sys |
授权其他容器可以访问该数据库,否则后续数据库无法链接。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.*' IDENTIFIED BY 'root' WITH GRANT OPTION;flush privileges;
3,在eval目录下编写docker-compose.yml文件
version: '3.3'
services:
db:
container_name: db
image: mysql:5.7
volumes:
- "/home/luye/eval/data:/var/lib/mysql" ##这里使用刚才mount的本地地址
environment:
MYSQL_DATABASE: guns
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root
ports:
- 3306:3306
web:
build:
./web
ports:
- 8080:8080
- 9990:9990
depends_on:
- db
4,运行上述脚本,可以看到容器正确运行起来了:
docker-compose up -d
Creating db ... done
Creating eval_web_1 ... done
5,验证:
获取上述容器eval_web_1的IP地址172.17.0.3,在浏览器中键入:http:172.17.0.3,就会发现我们的应用可以正常使用了。
关于docker-compose命令的具体含义参见:
https://github.com/docker/labs/blob/master/developer-tools/java/chapters/ch05-compose.adoc