docker基础使用和原理

一、隔离机制

1、docker的隔离原理是基于linux底层机制进行的隔离。

namespace资源隔离

namesapce系统调用参数隔离内容
UTSCLONE_NEWUTS主机名
IPCCLONE_NEWIPC信号量、消息队列
PIDCLONE_NEWIPC进程号
NetworkCLONE_NEWNET网络设备、端口
Mount        CLONE_NEWNS挂载点
UserCLONE_NEWUSER用户和用户组

2、cgroups资源限制

资源限制:限制任务使用的资源总额;并在超过这个配额发出提示

优先级分配:分配cpu时间片数量及磁盘IO带宽大小、控制任务运行的优先级

资源统计:统计系统资源使用量。如CPU使用时长、内存用量等

任务控制:对任务执行挂起、恢复等操作

子系统描述
cpu对cpu的使用
CPU Accounting自动生成对cpu资源使用情况的报告
cpuset分配独立的cpu和内存
devices开启或关闭cgroup任务对设备的访问
freezer挂起或恢复cgroup中的任务
memory设定cgroup中任务对内存使用量的限定;并生成对内存资源使用情况的报告
perf_event使cgroup的任务可以进行统一的性能测试
net_cls通过登记识别标记网络数据包;从而允许linux流量监控程序识别从具体cgroup中生成的数据包

二、docker的安装

在线安装方式

1、卸载docker

yum remove -y docker*

2、安装docker;

参考官方文档

Install Docker Engine on CentOS | Docker Documentation

参考阿里云文档

docker-ce镜像-docker-ce下载地址-docker-ce安装教程-阿里巴巴开源镜像站

离线安装方式

官方文档:

Install Docker Engine from binaries | Docker Documentation

三、镜像加速器

1、阿里云镜像加速器

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

配置如下:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://lqpaclk7.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

常用加速地址:

官方地址:https://registry.docker-cn.com

腾讯云:https://mirror.ccs.tencentyun.com

中科大:https://docker.mirrors.ustc.edu.cn

网易云:https://hub-mirror.c.163.com

多个加速器配置方法:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ]
}

四、常用命令

参考官方文档具体命令说明:Reference documentation | Docker Documentation

1、docker命令图

2、查看命令

docker info
# 版本查看
docker version
# 帮助
docker --help

3、镜像命令

# 查看本地镜像
docker images
# 搜索镜像
docker search imagename
# 下载镜像
docker pull imagename
# 上传镜像
docker push imagename
#  导出镜像
docker image save imagename > image.tar.gz
# 导入镜像
docker load -i  image.tar.gz
# 删除镜像
docker rm image inamename
# 镜像详细信息查看
docker image inspect imagename
# 镜像历史制作
docker image history imagename

4、容器命令

# 查看所有容器
docker ps -a
# 删除容器
docker container rm -f ccontainername
# 删除所有容器
docker container rm -f `docker ls -a -q`
# 进入到容器
docker exec -it   containername  /bin/bash
# 查看容器详细信息
docker container inspect containername
# 运行并启动容器
docker run -it  imagename 
# 启动容器
docker start containername
# 停止容器
docker stop containername
# 查看容器日志
docker log containername

# 启动守护进程容器并指定端口
docker run -d -p 宿主机端口:容器端口 imagename
# 启动守护进程容器并挂载目录
docker run -d -v 宿主机目录:容器目录 imagename

# 启动守护进程容器并限制资源
docker run -it --name alpine-test -m=4g #限制内存为4G
docker run -dit --cpus=2 nginx:1.19.2-alpine #限制cpu核心数

# 注意对于docker而言;如果启动容器不限制资源;默认是和宿主机共用的资源,会无限制的使用宿主机的资源

四、docker网络

网络模式配置说明
bridge模式--net=bridge
默认值,在 Docker 网桥 docker0 上为容器创建新的网络
none模式--net=none不配置网络
container模式--net=container:name/id
容器和另外一个容器共享 Network namespace
kubernetes 中的 pod 就是多个容器共享一个 Network
namespace
host模式--net=host容器和宿主机共享networknamespace
自定义模式--net=自定义模式用户自定义网关、子网掩码网络

1、创建bridge:

root@baiducloud-01:~# docker network create -d bridge mybridge
29fd1c868fda5c07bc8c7bc9ae00cc00e8160f1ac753394d75bbfc896adbe9aa
root@baiducloud-01:~# docker network ls | grep mybridge
29fd1c868fda   mybridge   bridge    local
root@baiducloud-01:~# docker  network inspect mybridge
[
    {
        "Name": "mybridge",
        "Id": "29fd1c868fda5c07bc8c7bc9ae00cc00e8160f1ac753394d75bbfc896adbe9aa",
        "Created": "2022-05-18T22:47:17.061294261+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

# 创建mybridge的网络容器
root@baiducloud-01:~# docker run --rm -dit --network=mybridge nginx_alpine:v1.6 /bin/bash

root@baiducloud-01:~# docker exec -it  010330ddbdb2   /bin/bash
bash-5.1# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:12:00:02  
          inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1172 (1.1 KiB)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


2、创建none模式

root@baiducloud-01:~# docker run -it --network=none  nginx_alpine:v1.6  /bin/bash
bash-5.1# ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

3、创建自定义网络模式

# 1、创建自定义网络
root@baiducloud-01:~# docker network create --driver bridge --subnet 192.168.1.0/24 --gateway 192.168.1.1 mynet
7b6a20311a1ab963d37c17ec6c237fa767acd6c620981cb2b2f387fa43f4a8c0
# 2、查询自定义网络
root@baiducloud-01:~# docker network ls|grep mynet
7b6a20311a1a   mynet      bridge    local
# 3、创建容器并指定网络ip地址
root@baiducloud-01:~# docker run -it  --ip 192.168.1.2 --net=mynet nginx_alpine:v1.6 /bin/bash
bash-5.1# ipconfig
bash: ipconfig: command not found
bash-5.1# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:C0:A8:01:02  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1032 (1.0 KiB)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值