镜像下载
在有网络的电脑下载镜像(Windows):依次在CMD命令台执行以下代码
docker pull node:20docker pull openjdk:22-jdkdocker pull mysql:8.0docker pull nginx:1.27
删除镜像代码:
docker rmi node:latest
查看镜像列表代码:
docker images
测试镜像代码:
docker run --rm openjdk:22-jdk java -version
检查容器状态(包括已停止的):
docker ps -a
镜像导出
docker save -o node-20.tar node:20docker save -o mysql-8.0.tar mysql:8.0docker save -o openjdk-22-jdk.tar openjdk:22-jdk
docker save -o all-images.tar node:20 mysql:8.0 openjdk:22-jdk
镜像导入
docker load -i node-20.tardocker load -i mysql-8.0.tardocker load -i openjdk-22-jdk.tar
项目部署
后端:
FROM openjdk:22-jdk
WORKDIR /app
COPY platFormBack-0.0.1-SNAPSHOT.jar .
EXPOSE 8580
ENTRYPOINT ["java", "-jar", "platFormBack-0.0.1-SNAPSHOT.jar"]
前端:
FROM nginx:1.27
RUN rm -rf /etc/nginx/conf.d/*
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY dist /usr/share/nginx/html
EXPOSE 9877
CMD ["nginx", "-g", "daemon off;"]
server {listen 9877;server_name localhost;root /usr/share/nginx/html;index index.html index.htm;location / {try_files $uri $uri/ /index.html;}
}
docker-compose.yml:
version: "3.8"services:frontend:build:context: ./frontenddockerfile: Dockerfilecontainer_name: frontend_containerports:- "9877:9877"restart: alwaysbackend:build:context: ./backenddockerfile: Dockerfilecontainer_name: backend_containerports:- "8580:8580"restart: alwaysmysql:image: mysql:8.0container_name: mysql_containerports:- "3307:3306" # 宿主机3307 → 容器3306restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: 123456volumes:- mysql_data:/var/lib/mysqlvolumes:mysql_data:
数据库
docker cp "D:/Docker部署测试/mysql-init/platform.sql" mysql_container:/init.sql
docker exec -it mysql_container bashmysql -u root -pcreate database platform;source /init.sql;
项目容器启动
docker-compose up -d
强制使用最新镜像并覆盖
docker-compose up -d --build
关闭运行代码:
docker-compose down
进入容器查看
docker exec -it frontend_container bashcat /etc/nginx/conf.d/default.confnginx -t
BUG修复
前端或后端一直访问不到:
原因:容器启动的镜像如果已存在未关闭,则一直启动的是旧的镜像。
后端请求mysql失败:
强制重新构建镜像
docker-compose down
docker-compose up -d --build