docker pull docker.io/library/nginx:latest

docker.io: 仓库地址
library: 命名空间(作者名)

查看容器

启动之后,会使用当前镜像自动创建一个容器,我们可以输入ps命令来查看当前容器的容器列表:

Link to original

docker ps

Redis

docker run -d --name local-redis -p 6379:6379 redis:latest
命令片段通俗解释深入细节
docker run“帮我运行一个容器”告诉 Docker 引擎去启动一个相互隔离的独立运行环境(容器)。
-d“后台运行”(Detach)让 Redis 在后台默默工作。这样你的终端窗口不会被 Redis 的运行日志占满,你可以继续输入其他命令。
--name local-redis“给它起个名字叫 local-redis”方便你以后管理它。比如你想停止它时,可以直接运行 docker stop local-redis,而不用去记一串长长的随机 ID。
-p 6379:6379“把容器里的 6379 端口映射到我电脑的 6379 端口”格式是 宿主机端口:容器端口。

• 容器内部的 Redis 默认跑在 6379。

• 映射到本地后,你的 Spring Boot 访问 localhost:6379 就能直接连上容器里的 Redis。
redis:latest“使用官方最新版的 Redis 镜像”redis 是镜像名,latest 是版本标签(Tag)。如果本地没有这个镜像,Docker 会自动去官方仓库(Docker Hub)下载最新版本。
停止容器
docker stop local-redis
docker exec -it local-redis redis-cli

作用是:进入正在运行的 Redis 容器,并打开 Redis 命令行客户端(redis-cli)。

给 mysql 容器添加 sql文件并执行

复制sql文件到mysql容器

docker cp study.sql backend-mysql:/study.sql

执行,进去到容器

docker exec -it backend-mysql bash
ls

afs bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv study.sql sys tmp usr var

进入mysql数据库

mysql -uroot -p
USE study;

执行sql文件

source /study.sql;

Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.02 sec)
Query OK, 0 rows affected (0.09 sec)
Query OK, 1 row affected (0.02 sec)
Query OK, 1 row affected (0.01 sec)
Query OK, 1 row affected (0.02 sec)
Query OK, 1 row affected (0.02 sec)
Query OK, 0 rows affected, 1 warning (0.01 sec)
Query OK, 0 rows affected (0.08 sec)
Query OK, 1 row affected (0.01 sec)
Query OK, 1 row affected (0.01 sec)
Query OK, 1 row affected (0.02 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW TABLES;
+-------------------+
| Tables_in_study |
+-------------------+
| persistent_logins |
| users |
+-------------------+
2 rows in set (0.00 sec)

Tag Container

❯❯ docker images
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
backend-app:latest 214b1272c23f 386MB 122MB U
mysql:8.0 7dcddc01f13b 1.1GB 249MB U
redis:alpine 9d317178ecea 155MB 38.1MB U
redis:latest 234c902a2db4 208MB 56.3MB U

docker tag backend-app:latest mhyyyy/backend-app:latest  

Delete Tag

docker rmi mhyyyy/backend-app:latestdocker

Push to Docker Hub

create a repository called mhyyyy/backend-app

docker push mhyyyy/backend-app:tagname

In this case the tagname is latest

docker push mhyyyy/backend-app:latest

Deploy Spring Boot Project

docker-compose.yml

services:
​
  # 1. MySQL 服务
  mysql:
    image: mhyyyy/mysql-custom:0.1 # 镜像改为刚刚上传的自己自定义的镜像
    container_name: backend-mysql
    restart: always
​
    environment:
      MYSQL_ROOT_PASSWORD: "1234"
      MYSQL_DATABASE: "study"
​
    ports:
      - "3307:3306"
​
    volumes:
      - mysql-data:/var/lib/mysql
​
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      timeout: 5s
      retries: 10
​
​
  # 2. Redis 服务
  redis:
    image: redis:alpine
    container_name: backend-redis
    restart: always
​
    ports:
      - "6379:6379"
​
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 5
​
​
  # 3. Spring Boot 应用服务
  app:
    image: mhyyyy/backend-app:latest # 这个镜像也是
    container_name: backend-app
    restart: always
​
    ports:
      - "8080:8080"
​
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
​
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/study?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: "1234"
​
      SPRING_DATA_REDIS_HOST: redis
      SPRING_DATA_REDIS_PORT: 6379
​
​
volumes:
​
  mysql-data:

Put the file in the server’s folder. anywhere as long as it is not located in the root/

In this root directory

docker compose up -d

在服务器界面,暴露8080端口,现在 sprintboot 应该能正常返回接口了。

restart the container

docker compose restart