Linux下安装docker:
yum install docker
启动docker:
systemctrl start docker
docker挂载jar包:
docker run -d --restart=always --name novademo \
-v /app/demo.jar:/usr/demo.jar \
-v /app/application.yml:/usr/application.yml \
-v /app/tomcat/logs:/logs \
--privileged=true \
-p 8080:8080 \
java:8 /usr/bin/java -jar /usr/demo.jar \
--spring.config.location=/usr/application.yml
参数解析:
-d:后台运行
--restart=always:docker启动时自启动容器
--name novademo :容器名称
-v /app/demo.jar:/usr/demo.jar:将容器中/usr/demo.jar文件挂载到主机/app/demo.jar文件
-v /app/tomcat/logs:/logs:将容器日志/logs,挂载到主机/app/tomcat/logs
--privileged=true:使容器获得root权限,否则可能报permission错误
-p 8080:8080:将容器的8080端口映射到主机的8080端口
docker挂载mysql:
docker run -d --restart=always --name mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /app/mysql/log:/var/log/mysql \
--privileged=true \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=li15034395319 \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci
参数解析
-d:后台运行
--restart=always:docker启动时自启动容器
--name novademo :容器名称
-v /app/mysql/data:/var/lib/mysql:将数据文件夹挂载到主机
-v /app/mysql/conf:/etc/mysql/conf.d:将配置文件夹挂在到主机,可以在宿主机放一份自定义 my.cnf文件,那么容器就会按自定义配置启动
-v /app/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-e TZ=Asia/Shanghai:修改 docker 容器时区
-e MYSQL_ROOT_PASSWORD=li15034395319 :初始化root用户的密码
--character-set-server=utf8mb4:设置字符集
--collation-server=utf8mb4_general_ci:排序方式
传输sql文件:
docker cp /app/novademo.sql mysql:/
执行sql文件:
source /novademo.sql;
容器启动后查看启动日志:
docker logs "容器id"
查看容器状态:
docker ps -a
如果容器的status一直为restarting,则可能是挂载-v
出现了问题。具体问题需要查看启动日志。
进入容器
docker exec -it mysql /bin/bash
停止容器
docker stop "容器id"
删除容器
docker rm "容器id"
删除image
docker rmi "imageID"
踩坑记录:
docker之间无法访问,主要表现为挂载的jar包启动时,无法访问mysql数据库(开放3306)。启动后,无法被访问(开放8080)。
原因分析:Linux防火墙需要开放端口。
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload