Docker 基础
Docker 基础
1.把宿主机(虚拟机/服务器)的端口,映射到 Docker 容器内部镜像(如nginx)的端口
2.下载了一个中间件和就得到了一个中间件的镜像,运行后就得到了一个该中间件的容器
如:下载了一个nginx,就得到了一个nginx镜像,运行后就得到了一个nginx容器
基本命令
-d ==>后台启动
-p ==>端口映射
-name ==>容器名
1.镜像命令
1.下载==>docker pull
2.列表==>docker images
3.删除==>docker rmi
2.容器命令
1.运行==>docker run
2.停止==>docker stop
3.启动==>docker start
4.重启==>docker restart
5.状态==>docker stats
6.日志==>docker logs
7.日志==>docker exec
8.删除==>docker rm
9.查看正在运行的容器==>docker ps
10.查看全部的容器==>docker ps -a
3.分享
1.提交==>docker commit
2.保存==>docker save
3.加载==>docker load
4.登录==>docker login
5.命名==>docker tag
6.推送==>docker push
端口映射
(服务器端口)8080 : 80(镜像端口) 即为把服务器的8080端口映射到 nginx的端口。当访问服务器的8080端口时即把请求转发到nginx docker run -d -p 8080:80 nginx
卷映射
实际项目中使用卷来存储数据
在Linux下的MySQL默认的数据文档存储目录为/var/lib/mysql,默认的配置文件的位置/etc/mysql/conf.d,为了确保MySQL镜像或容器删除后,
造成的数据丢失,下面建立数据卷保存MySQL的数据和文件。
docker run -d -p 3306:3306 \
配置文件的卷
-v /home/mysql/conf:/etc/mysql/conf.d \
保存数据的卷
-v /home/mysql/data:/var/lib/mysql \
环境变量配置
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql01 \
mysql:5.7 \
目录挂载
解析:宿主机(服务器)的目录或文件挂载到 Docker 容器内的镜像,即数据存储在服务器目录中
场景:如果直接在镜像内设置数据,那么镜像删除后数据也连带一起消失。通过目录挂载可以解决这个问题,开辟一个数据目录与镜像关联起来。
网络
1.docker会为每一个容器分配ip,使用容器ip和容器端口进行配置可以实现容器间互相访问
2.通过服务器ip和端口映射进行配置
如果直接使用服务器的ip加端口映射就可以忽略ip分配变化带来的问题了
自定义网络
解决分配的容器ip发生变化的问题
由于容器重启或其它原因可能会导致分配的容器ip发生变化,导致通过容器分配的ip进行的关联失效。
此时可以通过域名(引入域名概念)来实现固定,即容器名作为域名。ip会变但是域名不会变(容器名不会变)
在 Nginx 配置中使用 backend 作为后端地址
server {
listen 80;
location /api/ {
proxy_pass http://backend:5000/;
}
}
这里的 backend 是容器名,即使 backend 这个容器重启了,IP 变了,依然可以访问它。
DockerCompose
在compose.yml文件中批量管理,创建容器
可以更好的管理容器
写好配置文件后可以实现自动创建网络等
1.上线(创建并启动所有服务容器)==>docker compose up -d
1.下线(停止并移除所有服务容器和网络)==>docker compose down
version: '3.8'
services:
mysql:
image: mysql:latest
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: tsy-store
ports:
- "3306:3306"
volumes:
- /home/mysql_data:/var/lib/mysql
networks:
- tsy-store
//后端项目
store_app:
build: .
container_name: tsy-store
restart: always
depends_on:
- mysql
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/tsy-store?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: 123456docke
ports:
- "8081:8081"
networks:
- tsy-store
nginx:
image: nginx:latest
container_name: nginx
restart: always
ports:
- "80:80"
volumes:
- /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
- /home/nginx/html/dist:/usr/share/nginx/html:ro
depends_on:
- store_app
networks:
- tsy-store
//创建网络
networks:
tsy-store:
external: true
DockerFile
作用:构建自定义的镜像,如把后端项目的jar包在Docker中打包成镜像
先在本地打包好jar包然后执行构建命令,根据文档填写的jar包路径构建后端项目的镜像
# 使用 OpenJDK 17 作为基础镜像
FROM openjdk:17
# 设置作者信息
LABEL authors="tcs"
# 复制编译好的 JAR 文件
COPY tsy-store-0.0.1-SNAPSHOT.jar /app.jar
# 声明后端项目接口,所在的真实端口(application.yml里的)==>仅为方便查看
EXPOSE 9999
# 启动 Spring Boot 应用
CMD ["java", "-jar", "/app.jar"]