--- docker 一些指令的汇总 ---

物理机:对虚拟机而言的实体计算机的称呼,提供了硬件环境的支持

虚拟机: 通过虚拟化技术将一台计算机虚拟化为多台计算机,这些虚拟计算机完全隔离,可以运行不同的操作系统,互相不会干扰

容器:也是一种虚拟化技术,不过虚拟机是在物理层面,而容器是在操作系统层面

,他们共享一个操作系统内核,以应用视角运行在容器中是运行在一个完整的操作系统中的,而从虚拟机的角度看,应用是运行在一个经过特殊隔离的进程中的,他们调用的是同一个内核,但是文件,网络,进程被隔离了

容器虚拟化基础技术 namespace

Linux namespace是对全局资源进行封装,将进程,文件,网络等资源统一封装到相同的namespace中,使得拥有不同的namespace的进程拥有独立的系统资源,且不同的namespace之间不会相互影响,甚至不会知道其他容器的存在

namespace使用

dd

-if=xx 读取那个文件

-of=xx 输出到那个文件中

Ibs=xx 一次读入多少个字节,设定一次读取块的大小xx

obs=xx 一次输出多少个字节

bs=xx 同时读入和输出xx个字节

count=xx 读取多少个块

skip=xx 从输入文件中跳过xx个块后开始读取

seek=xx 从输出文件跳过多少个块后开始复制

conv=xx 可以设置一些其他的选项 lcase 把大写改小写 ucase 小写改大写 sync 将每个输入块填充到ibs个字节,不足的用null填充

mkfs

在linux上创建文件系统,并格式化,这样就可以通将文件挂载到操作系统中像平常使用文件系统一样在这个文件中使用相同的操作

mkfs [-v] [-t fstype] [fs-option] filesys [blocks]

-t fstype 建立哪种格式的文件系统 ext3 ext4

filesys 格式化哪个文件

blocks 指定文件磁盘数

df

查看磁盘的使用情况

df [option] ...[file]

option:

-h 以我看的懂的方式显示

-th 输出磁盘的类型

mount 将文件系统加载到指定的地方,这样就可以使用使用mkfs格式化的文件系统了

为磁盘文件添加一个入口 类似于 C:/ 的作用

mount [-l] 显示所有支持的系统文件格式

mount [-t vfstype] [-o option] device dir

-t 表示device的格式 不写也可以自己识别

-o loop 把一个文件当作设备挂接系统中

ro 只读方式挂接设备

rw 读写方式挂接设备

device 要挂接的设备 之前写的镜像文件也属于设备

dir 挂接的位置

删除挂载点

umount filesystem 挂载点

unshare

命名空间的隔离,使用于父程序不共享的命名空间运行程序

unshare [options] program [arguments]

options选择的参数

-i --ipc 不共享IPC

-n --net 不共享Net

-u --uts 不共享UTS

-I --pid 不共享PID

-u --use 不共享用户

-m --mount 不共享Mount

--fork 创建一个新的进程,在这个进程中执行unshare参数

--mount-proc 执行子进程之前,把proc先挂载过去

program是不共享的程序

使用unshare -p /bin/bash 运行一个隔离pid的bash程序时 会报出

bash: fork: Cannot allocate memory 错误

是因为在新的PID空间中,bash作为pid 1 进程会有特殊的作用

他需要当人init 进程的角色,处理僵尸进程的回收,孤儿进程的托管

而bash并不支持,所以在他之前fork 一个进程来完成这些工作

unshare -p --fork /bin/bash

这样能先创建一个进程,在这个进程中执行bash,但是执行ps -ef查看pid时,还会发现,其实和父进程和pid时相同的并没有完成隔离看起来,那么就子fork进程时把proc给挂载过去

unshare -p --fork --mount-proc /bin/bash

这样在执行ps -ef 会发现更加干净了

mount隔离

unshare -m --fork /bin/bash

这时就创建了一个mount磁盘隔离,那么这时我再在这里面挂载一个磁盘,就会发现再外面使用df -h都看不到这个磁盘,而只有再当前这个隔离的进程中才能看到

docker的安装

uname -a 查看cpu

cat /etc/*release* 查看服务器信息

卸载旧版本docker

sudo apt-get remove docker docker-engine

卸载docker软件

sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y

下载curl命令 用它来访问网址下载docker

sudo apt install curl -y

创建gpg key目录

sudo mkdir -m 0755 -p /etc/apt/keyrings

#下载 gpg key 用来验证软件包

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg

修改docker源

echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装docker

sudo apt-get update

安装docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin的指令

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

#配置加载

sudo systemctl daemon-reload

#启动服务

sudo systemctl start docker

#开启启动

sudo systemctl enable docker

#查看服务状态

sudo systemctl status docker

配置镜像源

/etc/docker/daemon.json 中添加镜像源配置

{

"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]

}

docker 指令

docker login [option] [server]

-u 用户名 -p 密码

场景 当需要从一个私人镜像仓库中拉取镜像,或推送一个镜像到私人仓库中

docker pull [option] name[:tag|@digest]

拉取docker镜像

docker pull nginx:1.23.4

卸载nigix

查看是否是通过apt下载的

dpkg -l nginx

干净的卸载nginx

apt --purge autoremove nginx

安装nginx

apt install nginx

ubuntu在下载的nginx吧默认打开的路径修改了 在include /etc/nginx/sites-enabled/*; 这这个文件中能找到/etc/nginx/sites-available/default在这里面是nginx服务的一些配置信息其中有一个 root /var/www/html; 表示了这个Ubuntu默认的html所在位置 而niginx本来的其实是在/usr/share/nginx/html中

从本地推送进行到仓库 需要先登录

docker push [option] name[:tag]

寻找镜像

docker search [option] term 被墙了,一般也不用,直接去网站上找

登出

docker logour

列出本地镜像

docker images [option] [responsitroy[:tag]]

docker images -a

docker images -ls

docker images -list

都是一样的列出全部

当然还有

--digests :显示镜像的摘要信息;

○ -f :显示满足条件的镜像;

○ --format :指定返回值的模板文件;

○ --no-trunc :显示完整的镜像信息;

○ -q :只显示镜像 ID。

创建一个容器并运行以一个镜像

docker run [option] imagin [comman] [arg]

option:

-d 后台运行容器

-P 随机映射段口,随机将宿主端口映射到容器端口

-p 宿主:容器 将宿主端口和容器端口映射

-i 一交互式打开一个容器,可以输入命令交互 但是不怎么好看

-t 为容器分配一个伪输入终端,类似于[root@mycentos /]# 但是不能使用命令交流,一般和i结合

-h 设置主机名

--rm 在容器退出时删除这个容器

--name=xx 为这容器命名

-m 设置容器的最大使用内存

--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2" 给容器设置使用cpu的数量

--volume -v 绑定一个卷

列出容器

docker ps [options]

-a 列出所以容器包括没有运行的

-n 返回最近创建的n个容器

-l 放回最近创建的容器

-- no-trunc 不中断输出 ,容器信息展示的最全面

lxc是一种系统层的虚拟化技术,

以前 docker使用的就是lxc 只不过后来就改为自家的libcontainer,用来打造更加通用的底层虚拟库

lxc 创建容器

lxc-create -t [容器类型] -n [容器名称]

查看lxc支持的模板类型

ls /usr/share/lxc/template/

创建一个ubuntu的名字为lxchost1容器 并且设置了启动传输 --r Ubuntu的release版本和cpu架构

lxc-create -t ubuntu --name lxchost1 -- -r xenial -a amd64

查看容器

lxc-ls -f

运行容器

lxc-attach -n [容器名称]

lxc-attach -n mylxc --clear-env

删除容器

lxc-destroy -n [name]

查看容器信息

lxc-info -n [name]

相关推荐
好奇的菜鸟1 小时前
WSL 2 安装 Ubuntu 24.04 及系统迁移到非系统盘
linux·运维·ubuntu
好奇的菜鸟1 小时前
在WSL Ubuntu 24中设置root密码并默认使用root登录
linux·运维·ubuntu
车传新1 小时前
Docker
docker·容器
礼拜天没时间.1 小时前
《Grafana 企业级可视化监控实战指南:从安装、配置到智能告警》:Grafana 简介
linux·运维·信息可视化·zabbix·grafana·监控
意疏1 小时前
怕剧透?SyncTV+cpolar 让异地闺蜜追剧进度分秒不差
docker
V***u4531 小时前
SQL2000在win10上安装的方法
运维·服务器
礼拜天没时间.1 小时前
《Grafana 企业级可视化监控实战指南:从安装、配置到智能告警》:Grafana 环境搭建
linux·运维·信息可视化·zabbix·grafana·监控
清风25561 小时前
文件下载图片下载
运维·后端