dock与linux

简介: 本文介绍了 Linux 常用命令与 Docker 的基本操作,涵盖文件管理、权限修改、日志查看、容器管理、镜像构建及 Docker Compose 编排等内容,帮助开发者快速掌握项目部署与服务管理技能。

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

作用

定义 “单个容器” 的镜像构建规则

定义 “多个容器” 的关系和启动方式

关注对象

单个组件(如前端、后端)的环境打包

整个应用系统(多组件协同)的部署流程

执行方式

通过 docker build

构建镜像

通过 docker-compose up

启动所有容器

依赖处理

仅处理单个容器内的依赖

处理容器间的依赖关系(如 depends_on

文件位置

每个组件目录下单独存放

通常放在项目根目录(统一管理所有组件)

总结

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 本质上就是一个进程,可以运行在不同的系统的上面

相关文章
|
4月前
|
SQL JavaScript Java
三层架构理解(实现前后端分离)
本文介绍了三层架构实现前后端分离的流程,从前端Vue发起请求,到后端Spring处理数据,最后返回结果并由前端渲染展示。同时详细解析了Bean重复问题的解决方案,包括使用@Service、@Primary、@Qualifier和@Resource注解进行依赖注入控制。此外还介绍了MyBatis中#{}与${}的区别及使用场景,以及三层架构中各组件的协作方式。
|
存储 传感器 数据可视化
【软件设计师备考 专题 】IO接口的功能、类型和特性
【软件设计师备考 专题 】IO接口的功能、类型和特性
661 1
|
网络协议 Shell 网络安全
在外SSH远程连接macOS服务器【cpolar内网穿透】
macOS系统自带有Secure Shell 客户端,它可让您登录到侦听传入SSH连接的远程服务器和台式机。我们可以用ssh username@ip来ssh到服务器,但通常局限于局域网内的远程。
520 0
|
存储 SQL Java
Java8 stream 中利用 groupingBy 进行多字段分组求和
Java8 stream 中利用 groupingBy 进行多字段分组求和
|
8天前
|
人工智能 自然语言处理 算法
2025年AI 搜索优化(GEO)行业年度盘点:从资本爆发到入场公司初步分化
2025年,AI搜索优化(GEO)爆发式增长,取代传统SEO成营销新焦点。受全球资本热捧,中国市场规模突破480亿元,即搜AI与边鱼科技领跑,分别布局全域搜索与中小微企业服务。技术与商业闭环加速构建,行业迈向可持续价值竞争。
|
4月前
|
Java
初识线程
在 Java 多线程编程中,线程对象名与线程名称是两个不同概念。对象名是代码中引用线程对象的变量名,如 `t1`,而线程名称是线程实例在 JVM 中的标识,可通过 `setName()` 或构造函数设置。若不显式设置,Java 会分配默认名称如 `Thread-0`。通过 `Thread.currentThread().getName()` 可获取当前执行线程的名称。
|
4月前
|
存储 安全 测试技术
Python面试题精选及解析
本文详解Python面试中的六大道经典问题,涵盖列表与元组区别、深浅拷贝、`__new__`与`__init__`、GIL影响、协程原理及可变与不可变类型,助你提升逻辑思维与问题解决能力,全面备战Python技术面试。
172 0
|
5月前
|
自然语言处理 开发者 Python
Django 实战:I18N 国际化与本地化配置、翻译与切换一步到位
Django国际化与本地化指南,涵盖i18n和l10n的定义、配置、视图与模型中的翻译使用、消息文件生成与编译,以及多语言登录实战。助你打造多语言支持的Web应用。
275 0
|
7月前
BigDecimal保留两位小数
本文介绍了BigDecimal保留两位小数的三种方法:`setScale`、`DecimalFormat`和`String.format`。其中,`setScale`可设置保留规则并返回BigDecimal类型值;`DecimalFormat`通过匹配规则返回字符串类型值;`String.format`为字符串自带方法,同样返回字符串类型值。此外,文章还对比了四种保留小数规则(如`00.00`、`#0.00`等),总结出`#0.00`是最适用的规则。附有详细代码示例与控制台打印结果,便于理解与实践。
1070 19
|
4月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
416 0