ubuntu里的仓库文件使用不了的解决方法:
1.进入仓库文件的目录
cd /etc/apt/sources.list.d/
2.删除 archive开头的文件
sudo rm -rf archive*
3.重新下载仓库文件
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ $(lsb_release -cs) stable"
4.安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
apt
apt-get 软件管理的命令 = centos里的yum
feng@sc:~$ cd /etc/apt
feng@sc:/etc/apt$ ls
apt.conf.d keyrings preferences.d.save sources.list.d trusted.gpg.d
auth.conf.d preferences.d sources.list trusted.gpg
feng@sc:/etc/apt$
/etc/apt/sources.list.d 等同于 /etc/yum.repos.d 都是用来存放仓库文件
[root@docker ~]# docker exec -it sc-nginx-2 bash 进入一个容器内部
root@6f864a3ab3e3:/# exit
启动一个nginx容器,修改nginxd网站的首页
[root@docker ~]# docker run -d -p 8080:80 --name sc-caojie-1 nginx
6193c1726aefd5929d46da7bdf668d9ed7069d5587ccc289e81aae0ec0739224
将文件从容器里拷贝出来到宿主机
[root@docker ~]# docker cp sc-caojie-1:/usr/share/nginx/html/index.html .
Successfully copied 2.56kB to /root/.
[root@docker ~]# ls
anaconda-ks.cfg index.html mysql-5-7-41.tar nginx.tar
修改首页文件index.html
[root@docker ~]# vim index.html
拷贝宿主机的文件到容器里
[root@docker ~]# docker cp index.html sc-caojie-1:/usr/share/nginx/html/index.html
Successfully copied 2.56kB to sc-caojie-1:/usr/share/nginx/html/index.html
1.docker logs 排错
只要重启docker服务,会导致所有正在运行的容器停止运行,进入exited状态
2.挂起虚拟机,关闭了真实笔记本电脑,第2天开机,恢复虚拟机到访问不了容器里的网站
service docker restart
docker start sc-nginx-1
[root@docker ~]# docker stats 查看容器资源消耗
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
6193c1726aef sc-caojie-1 0.00% 2.43MiB / 3.682GiB 0.06% 9.02kB / 8.2kB 1.3MB / 22.5kB 3
6f864a3ab3e3 sc-nginx-2 0.00% 3.402MiB / 3.682GiB 0.09% 764B / 0B 3.44MB / 0B 3
[root@docker ~]# free -m 以MB为单位显示
total used free shared buff/cache available
Mem: 3770 365 2771 11 633 3178
Swap: 3967 0 3967
Mem 开头的行,显示的真实的内存的信息---》内存条的大小
shared 表示共享内存消耗的空间---》已经使用的
buffer: 数据 内存---》磁盘
cache: 数据 磁盘 ---》内存
buffer和cache 都是临时存放数据的地方,消耗的是内存的空间
available : 可以使用的空间,内核给后面的进程分配内存空间的时候,可以继续使用的内存空间
total = used + free + shared + buff/cache
available = free + buff/cache还没有使用完的或者释放了的空间
如果一个容器里的进程消耗的cpu或者内存超过限制 会被docker软件重启
当容器里进程运行达到限制时 容器里运行的进程会被kill掉 防止容器被kill掉
启动一个nginx容器,限制容器使用cpu资源 20% 内存只能使用200M
--cpu-shares 可以使用的cpu算力的份额
--cpus 可以使用的cpu核心的数量
--cpuset-cpus 指定在哪些cpu里运行
-m 指定使用的内存的大小,默认是字节为单位
[root@docker ~]# docker run -d -p 8090:80 --name sc-pansl-1 --cpu-shares 200 --cpus 2 --cpuset-cpus 0,1 -m 200000000 nginx
daedbb9c7ce5d99ef5019d49ec8c8134fc51e4ef4009c48cd6faf0dbd0ff606d
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
daedbb9c7ce5 nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:8090->80/tcp, :::8090->80/tcp sc-pansl-1
docker 和虚拟机的区别
有共同点: 都是虚拟化技术
区别:
1.架构:隔离性
2.资源消耗: cpu、内存、磁盘等
3.启动速度
4.扩展性
5.层次:虚拟机多封装一层hy
docker缺点: app隔离没有虚拟机彻底 安全性低
docker优点: 启动速度快 资源消耗小 扩展方便
每个容器里都有一个微型的操作系统,但是操作系统里的内核是使用宿主机的内核
操作系统组成:
1.内核: 内部最核心的软件
2.库 应用程序 .shell 系统调用
docker 2个非常重要的技术是linux内核提供的:
namespace: 命名空间: 将容器隔离 资源隔离 是内核对进程进行隔离
有多少种命名空间: network、pid、IPC、user、mount、UTS 6种
cgroup: control group--》控制资源组合,限制容器可以使用多少cpu、内存、磁盘IO、网络IO等资源的 限制进程可以使用的cpu、内存、磁盘IO、网络IO资源
四种网络设置
[root@docker sanchuang]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e250fbc2b802 bridge bridge local
2d7e5f5faf77 host host local
81b54e63a61c none null local
bridge 是默认的容器网络类型,可以和宿主机的docker0接口相连,通信
docker network create sc 创建一个sc的网络,类型为桥接bridge
121626761e6ff8ac52d4e47d3a1785c44c1d8a273715aa74586777b27a36ee72
[root@docker sanchuang]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e250fbc2b802 bridge bridge local
2d7e5f5faf77 host host local
81b54e63a61c none null local
121626761e6f sc bridge local
新建一个容器使用sc网络
[root@docker]# docker run -d -p 8082:80 --name fanzl-1 --network sc nginx
009a177040011bbe8a21ecdf7a1dfe0f2a43eaefd796027ae1f37fadd56e2600
[root@docker sanchuang]# docker inspect fanzl-1
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.2",
"DriverOpts": null,
"DNSNames": [
"fanzl-1",
总结:
1.网络类型: bridge(默认)、host(网络性能好)、null(禁用所有网络)、container(很多容器共享一个ip)、overlay(连接不同机器上的docker容器 允许不同机器上容器相互通信 跨主机通信)
2.docker底层技术
namespace: 隔离
cgroup: 限制资源(cpu、内存、磁盘IO、网络IO)
概念: 子系统---》进程
1.创建一个bridge类型的网络叫changsha
docker network create changsha
2.启动一个mysql容器,限制它只能使用50%的cpu,能使用2G的内存,使用changsha网络,宿主机端口是3309 容器是3306 ,名字可以自己定义,密码自己定义
docker run -d -p 3309:3306 --name cs --network changsha --cpu-shares 500 --cpus 2 --cpuset-cpus 0,1 -m 200000000 -e MYSQL_ROOT_PASSWORD='sc@123456' mysql:5.7.41
3.去了解cgroup的v1版本和v2版本的差异
Cgroups v1 在 Linux 内核 2.6.24 版本中引入,其设计目的是为了提供对系统资源的分层次管理。在 v1 中,各种资源控制器(如 CPU、memory、blkio 等)被单独管理,每个控制器都有自己的层级树,这意味着对于每个资源类型,你都需要分别设置和管理 cgroup。例如,你可以有一个用于限制 CPU 使用率的 cgroup,另一个用于限制内存使用的 cgroup。
Cgroups v1 的主要特点包括:
- 多个层级树:每个资源控制器有自己的层级树。
- 独立管理:每个控制器必须单独配置,不能全局统一设置。
- 复杂性:管理多个控制器可能会导致配置复杂度增加。
Cgroups v2
Cgroups v2 在 Linux 内核 4.5 版本中首次出现,旨在解决 v1 的一些限制,提供一个统一的层次结构来管理所有资源控制器。在 v2 中,所有资源控制器都被整合进一个单一的层级树,这简化了资源管理和隔离的过程。
Cgroups v2 的主要改进包括:
单一的层级树:所有资源控制器共享同一棵树,简化了配置和管理。
统一的接口:提供了一个统一的接口来管理所有的资源控制器,减少了复杂性。
- 扩展性:支持更多的资源控制器和特性,如命名空间、设备访问控制等。
- 默认启用:在较新的 Linux 发行版中,Cgroups v2 通常是默认启用的。
5.如何容器启动不成功,如何去排查问题出在哪里? - 检查 Docker 日志 docker logs
- 看容器状态 docker inspect
- 检查镜像是否正确 docke images
- 看系统资源是否足够供容器使用
- 尝试重启