dock与linux
linux常见命令:
1.cd
2.ls ll
3.grep
4.tail 动态输出
5.grep 管道命令搜索
6.chomd 修改权限
7.编辑相关
7.1 vi ,vim
7.2 a,i o
7.3 esc +:q/:wq!
应用场景:
8.排查故障 cat 日志文件 |grep ("敏感词")
拓展 分布式/微服务 :arthas /skywalking(排查万能工具)
9.部署项目步骤:
9.1打包:(打成jar包) 在maven中使用package/install
9.2 上传: 直接拉过去(放到相应的目录中)一般????
9.3 运行: java -jar 项目jar包(运行前要先配置java环境)
9.4 停止原来的服务: kill -9 pid(进程号)
docker
常见命令:
查看镜像:docker images
拉取/推送镜像: docker pull / push
删除镜像: docker rmi -f (i:代表镜像images)
容器启停:dockers run/start/restart/stop
查看所用运行中的容器: docker ps
查看全部容器:docker ps -a
查看docker日志 docker logs -f 容器名称(判断是否部署成功 -f 滚动刷新)
进入容器:docker exec -it 容器名称 bash
删除容器:docker rm -f(强制删除正在运行的容器,先关闭容器使用stop 在使用 docker rm 不用 -f )
创建网络(单机):docker network create
数据卷:(本质上就类似于共享的内存(docker,内不可见)然后放在 linux(可见,便于访问与修改));数据卷必须在创建docker是就必须挂载
docker volume inspect/create
示例:docker run -d --name 容器名称 -p 80:80 -v html:/usr/share/nginx/html nginx
9.4 停止原来的服务: kill -9 pid(进程号)
Docker Compose 和 Dockerfile 是互补关系:
- Dockerfile 负责构建单个组件的镜像(解决 “如何打包”)。
- Docker Compose 负责编排多个容器(解决 “如何协同工作”)
- 使用 Compose 时通常仍需要 Dockerfile,除非你的所有组件都能直接使用官方镜像且无需自定义。
核心区别:Dockerfile 与 Docker Compose 的定位
维度 |
Dockerfile |
Docker Compose |
作用 |
定义 “单个容器” 的镜像构建规则 |
定义 “多个容器” 的关系和启动方式 |
关注对象 |
单个组件(如前端、后端)的环境打包 |
整个应用系统(多组件协同)的部署流程 |
执行方式 |
通过 构建镜像 |
通过 启动所有容器 |
依赖处理 |
仅处理单个容器内的依赖 |
处理容器间的依赖关系(如 ) |
文件位置 |
每个组件目录下单独存放 |
通常放在项目根目录(统一管理所有组件) |
总结
dockersfile(部署单个组件)
步骤:
1.创建目录(最终打包成镜像)
2.编写dockerfile( 成分: from (基础镜像(比如应用的centos) )
文件名 Dockerfile:
# 使用 CentOS 7 作为基础镜像 FROM centos:7 # 设置维护者信息,非必须 LABEL maintainer="hebo@itcast.cn" # 添加 JDK 到镜像中 作用:将文件或目录从构建上下文复制到镜像中。 COPY jdk17.tar.gz /usr/local/ RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk17.tar.gz # 设置环境变量 作用:设置环境变量,在容器运行时保持有效。 ENV JAVA_HOME=/usr/local/jdk-17.0.10 ENV PATH=$JAVA_HOME/bin:$PATH # 注意,必须改成自己的 ENV OSS_ACCESS_KEY_ID LTAI5tFww3VE7EZSs9dfh7j5 ENV OSS_ACCESS_KEY_SECRET 3eVYBbuK1F8rX5Tv0ge8lkKG1TrOLs # 创建应用目录 RUN mkdir -p /tlias 作用:为后续的 RUN、CMD、COPY、ADD 等命令设置工作目录。 WORKDIR /tlias # 复制应用 JAR 文件到容器 COPY tlias.jar tlias.jar # 暴露端口 EXPOSE 8080 作用:声明容器运行时监听的端口,但不会实际映射端口。 # 运行命令 作用:配置容器启动时执行的命令,不会被 docker run 的参数覆盖,但可以通过 --entrypoint 选项覆盖。 ENTRYPOINT ["java","-jar","/tlias/tlias.jar"]
3.准备文件(把所需要的文件放到相应目录下)
4.构建镜像(是整个文件的镜像,就是相当于打包(所需的文件放到一个目录,编写一个dockerfile记录配置信息),总体打包成镜像) 使用docker build -t 目录名 .(.代表当前目录)
5.运行容器
例:
mysql的 docker run -d \ -d 后台运行 --name mysql2 \ -- name 容器名称 -p 3308:3306 \ -- linux端口用户直接访问的:docker的mysql端口(固定3306) 类似代理(linux是公网ip,后面的是局域网的ip) -e TZ=Asia/Shanghai \ -- 设置时区 可写可不写 -e MYSQL_ROOT_PASSWORD=123 \ -- 用户名和密码 (mysql必须大写??) mysql:8 // 使用 docker images 查询版本 (是latest可以不用写,直接写 mysql) 运行之后不报错误,可以使用docker logs -f 容器名称 如果有进程占用,使用 docker ps 查看进程id 再使用 kill -9 进程号 占用情况下
9.4 停止原来的服务: kill -9 pid(进程号)
dockecompose
实质上是把 已经打包好的镜像给组合起来,并实行通信
主要通过配置文件镜像进行拉取镜像
dockercompose文件
version: "3.8" services: mysql: image: mysql:8 container_name: mysql ports: - "3307:3306" environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: 123 volumes:(挂载卷) - "/usr/local/app/mysql/conf:/etc/mysql/conf.d" - "/usr/local/app/mysql/data:/var/lib/mysql" - "/usr/local/app/mysql/init:/docker-entrypoint-initdb.d" networks: - itheima tlias: build: context: . dockerfile: Dockerfile container_name: tlias-server ports: - "8080:8080" networks: - itheima depends_on: - mysql nginx: image: nginx:1.20.2 container_name: nginx ports: - "80:80" volumes: - "/usr/local/app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" - "/usr/local/app/nginx/html:/usr/share/nginx/html" depends_on: - tlias networks: - itheima networks: itheima: name: itheima
执行命令
docker-compose up -d
本质上 文件打包 (源码直接使用maven install打包) -> 镜像(就是编写dockerfile 最后使用 docker build -t 镜像名称和版本信息命令转化为镜像)->容器(通过docker run 由镜像变成容器)->运行多个容器(整体运行 docker-compose up -d ,通过识别当前目录下docker-compose.yaml进行编译运行(特定名字,有变更,执行命令要指定名字) )
0-1 与1-2 怎么部署
0-1docker run
1-2 docker start
docker 本质上就是一个进程,可以运行在不同的系统的上面