Jansiel Notes

云部署: Docker的一些常用命令

docker重启nginx

要在Docker中重新启动Nginx容器,可以按照以下步骤进行操作:

  1. 首先,确保已经安装了Docker并且正在运行。如果没有安装,请根据所使用的操作系统版本参考官方文档进行安装。

  2. 打开命令行界面(Terminal)或者PowerShell等工具。

  3. 输入以下命令来查看当前正在运行的Docker容器列表:

    docker ps -a

    这将显示所有正在运行的容器及其相关信息。

  4. 从结果中找到名为"nginx"的容器ID或名称。通常情况下,该容器应该处于“Up”状态。

  5. 若要重新启动Nginx容器,可以使用以下命令:

    docker restart <container_id>

前台运行打包

docker-compose up

运行完成后大概率会报错,因为我们使用的mysql账号没有权限,所以需要进行设置

切换后台运行

1// Ctrl+C 终止程序后执行后台运行命令, 用于本地运行
2docker-compose up -d
3

docker-compose up 正常用来测试本地打包,和第一次构建 redismysql 容器,后续需要在本地运行开发模式只需保证 redismysql 容器正常运行即可,如需再次打包只需重新构建server容器即可

docker-compose up -d --force-recreate --no-deps --build --remove-orphans server_docker

本地开发模式只需关闭server容器,然后在项目内只需 start:dev即可

1docker stop server_docker
2npm run start:dev
3

docker删除容器

把容器和镜像快速删除的方式:

docker-compose down --rmi all

要在Docker中删除容器,可以使用 docker rm 命令。

如果想要删除单个容器,只需指定容器的ID或名称作为参数传递给该命令即可。示例如下所示:

1docker rm <container_id>
2

其中, <container_id> 是要删除的容器的ID或名称。

如果想要同时删除多个容器,可以将它们的ID或名称列表作为参数传递给该命令。示例如下所示:

1docker rm container1 container2 container3 ...
2

这样就能同时删除多个容器了。

注意事项:

  • 当容器正在运行时无法直接删除,必须先停止容器后才能进行删除操作。
  • 若要永久性地删除容器及相关资源(包括存储卷),则应添加 -v 选项来删除与之关联的存储卷。示例如下所示:
1docker rm -v <container_id>
2

Nest的docker-compose.yml

 1version: "3.0"
 2
 3services:
 4    # docker容器启动的redis默认是没有redis.conf的配置文件,所以用docker启动redis之前,需要先去官网下载redis.conf的配置文件
 5    redis_docker: # 服务名称
 6        container_name: redis_docker # 容器名称
 7        image: daocloud.io/library/redis:6.0.3-alpine3.11 # 使用官方镜像
 8        # 配置redis.conf方式启动
 9        # command: redis-server /usr/local/etc/redis/redis.conf --requirepass 123456 --appendonly yes # 设置redis登录密码 123456、--appendonly yes:这个命令是用于开启redis数据持久化
10        # 无需配置文件方式启动
11        command: redis-server --appendonly yes # 开启redis数据持久化
12        ports:
13            - 6379:6379 # 本机端口:容器端口
14        restart: on-failure # 自动重启
15        volumes:
16            - ./deploy/redis/db:/data # 把持久化数据挂载到宿主机
17            - ./deploy/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf  # 把redis的配置文件挂载到宿主机
18            - ./deploy/redis/logs:/logs # 用来存放日志
19        environment:
20            - TZ=Asia/Shanghai  # 解决容器 时区的问题
21        networks:
22            - my-server_docker
23
24    mysql_docker:
25        container_name: mysql_docker
26        image: daocloud.io/library/mysql:8.0.20 # 使用官方镜像
27        ports:
28            - 3306:3306 # 本机端口:容器端口
29        restart: on-failure
30        environment:
31            MYSQL_DATABASE: docker_db
32            MYSQL_ROOT_PASSWORD: 123456
33            MYSQL_USER: docker_user
34            MYSQL_PASSWORD: 123456
35            MYSQL_ROOT_HOST: '%'
36        volumes:
37            - ./deploy/mysql/db:/var/lib/mysql # 用来存放了数据库表文件
38            - ./deploy/mysql/conf/my.cnf:/etc/my.cnf # 存放自定义的配置文件
39            # 我们在启动MySQL容器时自动创建我们需要的数据库和表
40            # mysql官方镜像中提供了容器启动时自动docker-entrypoint-initdb.d下的脚本的功能
41            - ./deploy/mysql/init:/docker-entrypoint-initdb.d/ # 存放初始化的脚本
42        networks:
43            - my-server_docker
44
45    server_docker: # nestjs服务
46        container_name: server_docker
47        build: # 根据Dockerfile构建镜像
48            context: .
49            dockerfile: Dockerfile
50        ports:
51            - 9003:9003
52        restart: on-failure # 设置自动重启,这一步必须设置,主要是存在mysql还没有启动完成就启动了node服务
53        networks:
54            - my-server_docker
55        depends_on: # node服务依赖于mysql和redis
56            - redis_docker
57            - mysql_docker
58
59# 声明一下网桥  my-server。
60# 重要:将所有服务都挂载在同一网桥即可通过容器名来互相通信了
61# 如nestjs连接mysql和redis,可以通过容器名来互相通信
62networks:
63    my-server_docker:
64