## Docker重要概念:镜像vs容器 > 镜像可以理解为软件压缩包,容器为运行中或未运行的软件。需要先通过Dockerfile构建镜像,再通过镜像创建并运行容器。 ## 调试服务器: > root@47.110.247.58 > > 8Ngsmu~bPmUgN7w ## step1:编写后端Dockerfile(端口换掉,避免冲突) ![img.png](imgs/docker_file.png) ## step2:编写后端容器启动命令,flask服务的启动命令有所区别 ![img.png](imgs/startup.png) ## step3:编写nginx镜像 > nginx镜像用于消息路由,将前端请求转发到后端。其Dockerfile在frontend文件夹,不需要修改,因为只需要使用nginx提供的服务即可 > 只需要修改nginx.conf配置文件 > 对于后端的ip地址,可以先使用调试服务器的ip地址,给我的时候,ip改成如下: ### 2.20.208.159 ![img.png](imgs/nginx.png) ## step4:将前端dist文件夹放到frontend文件夹中,和前端的Dockerfile同一个目录。 ## step5:构建镜像(需要构建两个镜像,nginx镜像构建时需要先cd到frontend目录下) > docker build -t(指定镜像名称和标签) image_name:tag .(当前目录) ```commandline docker build -t privacy_retrieval_web:latest . ``` ## step6:通过镜像创建并运行容器 > docker run --name container_name -d(后台运行,不加即调试运行) -p(端口映射) 主机端口:容器端口 -v(挂载) 宿主机目录:容器目录 镜像名 ```commandline docker run --name privacy_retrieval_web -d -p 9360:9360 -v /root/PrivacyRetrieval:/code privacy_retrieval_web:latest ``` > nginx镜像和后端镜像类似,注意两个镜像端口不能重复。 ## step7:导出镜像 ```commandline docker save -o privacy_retrieval_web.tar privacy_retrieval_web:latest ``` ## 常见docker指令: ### 列出所有镜像: ```commandline docker images ``` ### 列出所有运行中容器: ```commandline docker ps ``` ### 列出所有容器: ```commandline docker ps -a ``` ### 停止运行中的容器: ```commandline docker stop container_id ``` ### 删除容器: ```commandline docker rm container_id ``` ### 删除镜像 ```commandline docker rmi image_id ``` ## 以下两个命令可以经常使用,调试过程中可能会创建多个镜像或容器,占用系统存储空间。 ### 条件删除:删除所有已经退出的容器 ```commandline docker rm $(docker ps -a|grep Exited|awk '{print $1}') ``` ### 删除无用镜像 ```commandline docker rmi -f $(docker images -f "dangling=true" -q) ``` ## docker-compose > 容器编排工具,用于一键启动多个容器。这个项目用不到。