docker pull docker.io/library/nginx:latestdocker.io: 仓库地址
library: 命名空间(作者名)
查看容器
启动之后,会使用当前镜像自动创建一个容器,我们可以输入
Link to originalps命令来查看当前容器的容器列表:
docker psRedis
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-redisdocker 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 bashlsafs 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 -pUSE 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:tagnameIn this case the tagname is latest
docker push mhyyyy/backend-app:latestDeploy 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