linux 相关

linux 工具

brew

  • The Missing Package Manager for macOS (or Linux)

llvm

  • LLVM (Low Level Virtual Machine) is an open source compiler infrastructure project that provides a set of libraries, tools, and techniques for building compilers and other programming tools.

bazel

  • Bazel是由Google开发的构建工具,用于构建和测试软件项目。

linux 部分语法

ctrl + p + q # 离开当前的容器界面,不是 kill
sudo super user do

下面是 > 的两种常见用法:

  1. 将命令输出写入文件:使用 > 可以将命令的标准输出重定向到一个文件中。例如,ls > file.txt 将当前目录的文件列表输出到 file.txt 文件中。如果 file.txt 文件不存在,则会创建该文件;如果存在,则会将文件内容清空,并将新的输出写入其中。
  2. 清空文件内容:使用 > 也可以将一个空内容的内容写入文件中,从而清空文件的内容。例如,> file.txt 将清空 file.txt 文件的内容。 需要注意的是,> 操作符会覆盖目标文件的原有内容。
  3. 如果您想要将命令输出追加到文件末尾而不是覆盖内容,可以使用 >> 操作符,例如,ls >> file.txt 将输出追加到 file.txt 文件的末尾。

ls / stat

  • ls
    • ls -l [file_name] 命令中,ls 是 "list" 的缩写,表示列出目录内容。
    • -lls 命令的一个选项/参数,表示以长格式(long format)显示文件和目录的详细信息。长格式输出包含文件权限、所有者、大小、修改时间等信息。
  • stat
    • stat file_name # 展示文件详情

windows

wsl & ubuntu

  • windows 下面的 wsl 自己安装的ubuntu里面安装docker和windows安装的docker使用的是共享的docker的信息

Docker

简介

  • 利用linux技术运行容器,运行Docker需要linux环境,一个Image可以创建多个Container,每一个Container都有各自独立的环境,该环境为linux系统的核心部分,每个容器都是相互隔离的
    每一个Container都有自己独立的Linux系统,但是这个系统为linux的核心部分,因此很小
  • 追求性能。Docker容器后台运行,就必须一个前台进程,容器(进程)运行的命令如果不是一直挂起的命令(如运行top,tail),就会自动退出。最好的解决方案是,使用命令行模式启动,表示我们还有交互操作
  • 镜像分层
    • 容器是根据镜像创建的运行实例
    • 镜像分层的好处是实现共享资源,镜像的每一层都是可以共享的,docker镜像层只是可读的,容器层是可写的
    • 镜像层、容器层
      • 容器启动的时候,一层新的可写层被加载到镜像的顶部,这一层被叫做"容器层",容器之下的都叫做"镜像层"
      • 添加、修改、删除等都是发生在容器层
  • 临时的文件
    • 在 Docker 中,容器的文件系统是临时的,并且容器本身是可短暂启动和停止的实例。当容器停止时,容器的文件系统也随之销毁,除非使用了持久化的存储机制,否则容器内的数据将会丢失。

Docker 的构成

  1. repository 可以类比git的仓库
  2. image 相当于class
  3. container 相当于class的实例

Docker基本命令

开关类(start/stop/restart/status)

ctl: ctrl
谁管理、谁开头

ubuntu 命令

  • systemctl start/stop docker
  • systemctl stop docker
  • systemctl restart docker
  • systemctl status docker
  • systemctl enable docker # 设置开机启动

docker 命令

  • docker info # 查看docker概要信息
  • docker --help # 查看docker总体帮助文档
  • docker cmd --help # 查看具体命令'cmd'的文档

镜像相关(image)

docker images [-a|-q] # -a 所有,-q 仅仅显示镜像ID, -aq
docker search [--limit [count]] image_name # 在仓库search名字为image_name的镜像
docker pull image[:tag] # tag 表示版本,不使用tag则是最新的版本
docker system df # df disk free 查看镜像,容器数据卷占用的空间
docker rmi [-f] image_name # rm->remove i->image -f-> forse 表示移除某个镜像

  • rmi 的 image_name 可以是多个,使用空格隔开,image_name 为 $(docker images -q) 表示删除全部的镜像

容器相关(container)

docker run [options] image_name [cmd] [arg]# 新建(docker create) + 启动(docker start)(没有指定名字的时候名字系统随机 )

  • options

    • -i->表示交互式的,-t->表示有一个终端,-i和-t一般一起使用(-it)
    • --name=='my_define_container_name'
    • -d : detach 后台运行返回容器的ID。即启动守护式容器(后台容器)
    • -P: 随机端口映射
    • -p: 指定端口映射
      -p 8080:80 8080为本地的,80为docker的
    • -v: /tmp/host_dir/:/container_dir/[:rw|:ro] 用于同步共享文件夹 host_dir 和 container_dir里面的内容,应该是通过硬链接实现的
      • container添加volume可以设置访问权限,默认就是rw,可读可写,针对的是container
    • --volumes-from < container_name_or_id> # 用来引用别人的volumes,注意是volumes复数===将指定容器的卷挂载到当前运行的容器中
    • --privileged=true # 表示的是,让container对ubuntu具有操作特权,在使用数据卷的时候使用
  • 例子

  • docker run -it ubuntu [/bin/bash] # 启动ubuntu镜像,并且进入终端,即为bash

docker ps [options] # ps -> process status 列出所有正在运行的容器

  • options
    • -a 历史+现在的所有所有
    • -q 静默模式,仅仅显示ID
    • -l 显示最近创建的容器
    • -n 3 仅仅罗列 3 个

docker start container_id|container_name # 启动容器
docker restart/stop/kill/rm container_id|container_name

  • docker kill是强制停止容器,立即终止容器的运行。
  • docker stop是优雅地停止容器,请求容器进行优雅地退出,并给予容器一段时间来清理和保存状态。
  • 例子
  • docker rm -f $(docker ps -aq) === docker ps -aq | xargs docker rm -f # 移除所有的容器(进程)

docker logs container_name # 打印相应容器的日志
docker top container_name # 和linux的top命令一样,显示对应正在运行容器的相关信息
docker exec [options] container_name|container_id args # 用于在alive的container上面执行命令

  • options : -i -t -it -d
    • 例子
      • docker exec -it container_name bash
        docker attach [options] container_name|container_id # 连接已经alive的

docker exec 和 docker attach 总结

  • docker exec在容器中启动新的进程或运行额外的命令,不会中断容器的运行。
  • docker attach连接到容器的STDIN/STDOUT/STDERR,连接到容器的初始进程,如果该进程退出,连接将自动断开。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

  • docker inspect命令的输出是一个JSON格式的结果,可以根据需要进行解析和处理。

docker cp container_id:容器内路径 主机路径 # 将文件从docker容器里面复制到承载docker的linux系统上面,也可以从linux复制到容器
docker export/import

  • export 导出容器的内容最为一个rar归档文件(该文件其实就是对应的整个container的打包)
    • docker export container_id > des_file_name.tar
  • import 将tar包变为之前的那个container(一模一样,除了import的时候需要自己定义镜像的用户、名字、版本号)
    • cat src_file_name_tar | docker import - repository/container_name:version # 注意 - 的两边不能直接连接除了空格之外的字符

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

DockerFile 和 commit push

  • 仓库分类

    • 本地(commit到本地)
    • private(一般为公司自己使用)
    • 远程仓库
  • docker commit

  • docker commit -m="提交的描述信息" -a="作者" container_id repository_name[:tag] # 和 git 的commit差不多(docker commit 之后这个镜像就会被提交到本地的镜像仓库)

  • docker [image] push [options] image_name[:tag] # 为 Docker 镜像打标签(tag),标签是为 Docker 镜像添加可读标识的方式,通常用于指定镜像的版本、名称或其他相关信息

  • 举例

    • docker push <你的用户名>/my-image:latest

命令总括

1. docker run:
2. docker ps:列出所有正在运行的容器;
3. docker images:列出所有镜像;
4. docker stop:停止一个正在运行的容器;
5. docker rm:删除一个容器;
6. docker rmi:删除一个镜像;
7. docker pull:拉取一个镜像;
8. docker push:推送一个镜像;
9. docker inspect:查看容器详细信息;
10. docker logs:查看容器日志;
11. docker exec:在容器内部执行命令;
12. docker commit:将容器保存为新的镜像;
13. docker build:根据 Dockerfile 构建一个新的镜像;
14. docker-compose:管理多个容器的工具。