单容器和多容器部署:
Docker: 通常用于单个容器的部署,需要为每个容器手动编写Dockerfile
Docker Compose: 专门用于多容器应用程序的部署,可以使用一个docker-compose.yml文件定义多个服务(容器)
源码部署和镜像部署:
- 源码部署:提供了更高的灵活性和定制性,你可以根据自己的需求进行定制和修改
- 镜像部署:相对于源码部署来说更为简单和快速,在主机上找到项目的目录,要访问Docker容器内的文件,你可以使用以下命令:
docker run -it --rm <image_name> /bin/bash
带数据库部署 和 数据库外置部署:
带数据库部署: 意味着你不需要在主机上直接安装和配置数据库服务, 提供了更好的环境隔离和便携性
数据库外置部署: 外置数据库部署方式通常有两种方法
- 使用
--network=host参数,让容器直接使用主机网络 - 将外部数据库连接信息以环境变量的形式传递给容器内部的应用程序
docker run --name one -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/one"
部署镜像的方式
docker-compose.yml文件中,使用image 和 build 都是用来定义服务的镜像的方式
二者选一,image是远程镜像,build是自定义镜像(源码部署)
services:
box-name:
# image: "远程镜像"
build:
context: ./子目录
dockerfile: Dockerfile
docker run:创建并启动一个新的容器
docker stop:停止一个正在运行的容器
docker build:从 Dockerfile 构建一个新的镜像
docker ps:列出正在运行的容器
docker rm:删除一个或多个容器
进入容器:docker exec -it 容器名称或ID bash
Docker Compose 常见的命令:
docker-compose ps: 列出正在运行的 Docker 容器,类似于 docker ps -a 命令,但只显示由 docker-compose.yml 定义的服务。
docker-compose exec: 在运行的容器中执行命令,类似于 docker exec 命令,但只能作用于由 docker-compose.yml 定义的服务。
docker-compose up: 构建、创建并启动 Docker 容器。如果 docker-compose.yml 中没有指定镜像,它会先构建镜像。如果容器已经存在,该命令将重建容器。
docker-compose down: 停止并删除所有相关的 Docker 容器、网络和卷等资源。如果想要停止但不删除这些资源,可以使用 docker-compose stop 命令。
docker-compose start: 启动已创建但是处于停止状态的容器。
docker-compose stop: 停止已创建的容器,但不删除它们。
docker-compose restart: 重启已创建的容器。
docker-compose logs: 查看服务的日志输出,类似于 docker logs 命令,但只显示由 docker-compose.yml 定义的服务。
docker-compose build: 构建 Docker 容器,如果 docker-compose.yml 中指定了构建上下文和 Dockerfile,它将使用它们来构建镜像。
这些是 Docker Compose 的一些常见命令。你可以通过在终端中输入 docker-compose --help 查看更多的命令和选项。
当前有两个容器时
docker-compose stop 会暂停两个容器
docker-compose stop A 只暂停A容器,注意不要写成 A/
docker-compose exec A sh 进入A容器,注意A容器必须是在运行中
修改项目源码后,页面未变更,需要重新构建docker
docker-compose up --build
如果不成功,可以运行以下命令来构建新的 Docker 镜像。确保将 your_image_name 替换为您想要给新镜像起的名字,. 表示 Dockerfile 所在目录。
docker build -t your_image_name .
docker-compose up --build
容器之间通信
在Docker中,容器之间通常使用它们各自的IP地址进行通信,而不是使用主机的IP地址。当使用 Docker Compose 部署容器时,默认情况下,Compose 会创建一个网络以连接这些容器,并且容器可以使用彼此的服务名称进行通信。
您可以使用 docker network ls 命令来查看可用的网络
并使用 docker network inspect <network-name> 命令来查看网络的详细信息。
如web容器链接db容器,修改想db容器为3007 (3306常被占用)
- db容器的端口改为 ports:'3307:3306'
- web容器保持3306 @tcp(db:3306)/dbname
清理 Docker 占用的磁盘空间
查看磁盘使用情况 df -h
- 清理停止的容器:
docker container prune - 清理未使用的镜像:
docker image prune -a - 清理未使用的卷:
docker volume prune - 清理 Docker 缓存:
docker system prune --all --force --volumes; 使用--volumes选项将清理所有未使用的卷,这可能会导致数据丢失【请谨慎使用,但很有效,记得先启动 所有需要的项目,再清理缓存】