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
下面是 >
的两种常见用法:
- 将命令输出写入文件:使用
>
可以将命令的标准输出重定向到一个文件中。例如,ls > file.txt
将当前目录的文件列表输出到file.txt
文件中。如果file.txt
文件不存在,则会创建该文件;如果存在,则会将文件内容清空,并将新的输出写入其中。 - 清空文件内容:使用
>
也可以将一个空内容的内容写入文件中,从而清空文件的内容。例如,> file.txt
将清空file.txt
文件的内容。 需要注意的是,>
操作符会覆盖目标文件的原有内容。 - 如果您想要将命令输出追加到文件末尾而不是覆盖内容,可以使用
>>
操作符,例如,ls >> file.txt
将输出追加到file.txt
文件的末尾。
ls / stat
- ls
- 在
ls -l [file_name]
命令中,ls
是 "list" 的缩写,表示列出目录内容。 -l
是ls
命令的一个选项/参数,表示以长格式(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 的构成
- repository 可以类比git的仓库
- image 相当于class
- 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:管理多个容器的工具。