docker 第一课
docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
scan: Docker Scan (Docker Inc., v0.17.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.8
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.934GiB
Name: ceshi
ID: GILH:FAOU:WBPL:TQIX:TJ2R:JEDT:4675:Z3OG:E5XM:ZOCD:EUK2:7E3B
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
ubuntu安装docker
apt -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt-cache madison docker-ce
apt install docker-ce=5:20.10.16~3-0~ubuntu-jammy docker-ce-cli=5:20.10.16~3-0~ubuntu-jammy containerd.io
systemctl daemon-reload
systemctl start docker
root@ubuntu:~# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
scan: Docker Scan (Docker Inc., v0.17.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.16
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: default
cgroupns
Kernel Version: 5.15.0-52-generic
Operating System: Ubuntu 22.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.896GiB
Name: ubuntu
ID: 5Y7K:FM25:BPFS:BF7I:5G46:A6C6:5HQB:YPDE:WLMC:4I6X:ZPIC:75PF
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
MNT Namespace 提供磁盘过载点和文件系统的隔离能力
IPC Namespace 提供进程间通信的隔离能力
Net Namespace 提供网络隔离能力
UTS Namespace 提供主机名隔离能力
PID Namespace 提供进程隔离能力
User Namespace 提供用户隔离能力
Time Namespace 提供时间隔离能力
Syslog Namespace 提供syslog隔离能力
Control group Namespace 提供进程所属的控制组的身份隔离
容器数据券:如果要将写入容器中的数据永久保存,需要将主机上的目录挂在到容器中,容器往挂载点写数据,随着容器的删除,数据不会丢失。
创建数据卷:
docker volume --help 查看创建券的帮助
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
举个栗子
[root@awen ~]# docker volume create data
data
[root@awen ~]# docker volume ls
DRIVER VOLUME NAME
local data
docker run -it -d -p 80:80 -v data:/data nginx:alpine
挂载点容器本身会自动创建

主机数据券的位置
[root@awen ~]# ls /var/lib/docker/volumes
backingFsBlockDev data metadata.db

[root@harbor ~]# echo "222" >> /data/testapp/index.html
这里可以加载到重定向的文件 是因为是一个静态文件

[root@harbor ~]# docker run -d --name web2 -v /data/testapp:/usr/share/nginx/html/testapp:ro -p 81:80 nginx:1.22.0
# cat /usr/share/nginx/html/testapp/index.html
awen12345
222
asdfjkl

进入目录设置权限的容器
[root@harbor ~]# docker exec -it 27ac4e775a1d sh
# echo "asdfjkl" >> /usr/share/nginx/html/testapp/index.html
sh: 3: cannot create /usr/share/nginx/html/testapp/index.html: Read-only file system
这里不能写入
可以自定义多个数据券, 数据券可以加权限
[root@vm-4-14-centos ~]# docker network --help
Usage: docker network COMMAND
Manage networks
Options:
--help Print usage
Commands:
connect Connect a container to a network 链接一个网络
create Create a network 创建一个网络
disconnect Disconnect a container from a network 容器和网络断开
inspect Display detailed information on one or more networks 查看网络信息
ls List networks 列出网络信息
prune Remove all unused networks 删除未使用的网络
rm Remove one or more networks 删除一个或者多个网络
Run 'docker network COMMAND --help' for more information on a command.
[root@vm-4-14-centos ~]# docker network ls 默认会有三个网络
NETWORK ID NAME DRIVER SCOPE
e64bc9b2777e bridge bridge local
f7f0936c5484 host host local
b94fe17e0635 none null local
[root@vm-4-14-centos ~]# docker exec -it ba23ffb9c8 sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:656 (656.0 B) TX bytes:656 (656.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
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)
通过地址为伪装 容器出去的时候伪装成宿主机
进来的时候 访问宿主机的某个端口是转发到目的容器, 这个端口是创建容器时的端口指定 docker调用内核控制iptablees规则
[root@vm-4-14-centos ~]# docker run -d -p 80:80 --net=bridge nginx:1.23.1-alpine
7892859718e22a1fc236ceefa5d66c321a1d421838f97438b7dedfd0f923c51c
[root@vm-4-14-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7892859718e2 nginx:1.23.1-alpine "/docker-entrypoin..." 6 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp goofy_goldwasser
[root@vm-4-14-centos ~]# docker exec -it 7892859718e2 sh
/ # ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
99: eth0@if100: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
/ #
容器之间通信 是同一个主机 同一个 docker0 里 报文会发给虚拟网卡 由docker0 下一个容器的vethxxy 在装发给容器
跨主机 容器会发给网关 docker0 网关检查目的地址 发现不是目的地址 就发给eth0 由eth0出去 中间是由内核做源地址转换
查看网桥对应关系
[root@vm-4-14-centos ~]# yum -y install bridge-utils
再次启动一个容器
[root@vm-4-14-centos ~]# docker run -it -d -p 83:80 nginx:1.23.1-alpine
f9ec0ff55df70c3bcac7a0d00600212229acde9f9c68e341b119cbe8c83d3813
docker0
[root@vm-4-14-centos ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.024266e717fd no veth903f498
vethb38466f
[root@vm-4-14-centos ~]# docker run -it --net=none nginx:1.23.1-alpine sh
/ # ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
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)
/ # ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100): 56 data bytes
ping: sendto: Network unreachable
[root@vm-4-14-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a65afb28b2c php:7.4.30-fpm-alpine "docker-php-entryp..." 11 minutes ago Up 11 minutes php-container
16ef4dadcdbe nginx:1.22.0-alpine "/docker-entrypoin..." 13 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp nginx-container
[root@vm-4-14-centos ~]# docker exec -it 5a65afb28b2c sh
/var/www/html #
/var/www/html # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:656 (656.0 B) TX bytes:656 (656.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
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)
/var/www/html # cat /etc/issue
Welcome to Alpine Linux 3.16
Kernel \r on an \m (\l)
/var/www/html # exit
[root@vm-4-14-centos ~]# docker exec -it 16ef4dadcdbe sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:656 (656.0 B) TX bytes:656 (656.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
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)
/ # cat /etc/issue
Welcome to Alpine Linux 3.16
Kernel \r on an \m (\l)
[root@vm-4-14-centos ~]# ln -s /var/run/docker/netns/* /var/run/netns/
[root@vm-4-14-centos ~]# ip netns list
a620021e2bce (id: 1)
[root@vm-4-14-centos ~]# ll /var/run/netns/
total 0
lrwxrwxrwx 1 root root 34 Oct 20 15:03 a620021e2bce -> /var/run/docker/netns/a620021e2bce
[root@vm-4-14-centos ~]# ip netns exec a620021e2bce ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
103: eth0@if104: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever
172.17.0.2 是这个namespace的IP
cat /etc/sysctl.conf
net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
vm.max_map_count=524288
fs.file-max=131072
lsmod |grep conntrack
modprobe ip_conntrack
modprobe br_netfilter
docker 第一课的更多相关文章
- docker 第一课 —— 从容器到 docker
1. 容器的概念 一种虚拟化的解决方案 与虚拟机所不同的是,虚拟机通过中间层,将一台或多台独立的机器虚拟运行于物理硬件之上: 而容器是直接运行于操作系统内核之上的用户空间: 基于上述,容器虚拟化也被称 ...
- vue.js学习(第一课)
学习资料 来自台湾小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- <-0基础学python.第一课->
初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...
- 留念 C语言第一课简单的计算器制作
留念 C语言第一课简单的计算器制作 学C语言这么久了. /* 留念 C语言第一课简单的计算器制作 */ #include<stdio.h> #include<stdlib.h ...
- MFC学习-第一课 MFC运行机制
最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...
- OpenCV 第一课(安装与配置)
OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然 ...
- 【第一课】神奇的Context
初学Android的困惑 初学Android跳转页面的时候,往往教程里是这么写的: Intent intent = new Intent(); //MyActivity就是当前的Activity,It ...
- CodeIgniter框架入门教程——第一课 Hello World!
本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...
- ruby代码重构第一课
(文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 新手写代码的时候往往会出现很多重复的代码没有提取出来,大师高瞻远瞩总能提点很多有意义的改进,今天重 ...
随机推荐
- 2022.3.12 提高A组总结&反思
今天有点上头了 T1:开场秒,大水题,一眼莫队了,最后没打 T2:开场以为是费用流,后来发现费用流做不了,在做T3的时候突然发现可以状压,也没打 T3:这道题给我极大的亲切感,导致我一个上午硬钢这道题 ...
- 测试杂谈——一条SQL引发的思考(二)
在前段时间,曾写过一篇关于SQL问题的文章,测试杂谈--一条SQL引发的思考(一). 今天这篇,算是个问题记录吧,问题并不复杂,但对于测试同学而言,确实是个需要关注的点. 问题分析 最近在日常工作中, ...
- SQL中的转义字符和通配符
一.通配符 如果想查找"_cs"结尾的的账户 select * from [user] where loginname like '%_cs'是不行的, _ 被认为是任意的字 ...
- Windows7下驱动开发与调试体系构建——0.概述
本文集内容为windows7x64下驱动开发与调试体系构建,内容目录如下: 1.驱动开发的环境准备 2.R3与R0的通信示例 3.自建调试体系概述 4.在x64下使用汇编代码 5.实战反调试标记位(N ...
- KNN算法之集美大学
在本篇文章中,我即将以在集美大学收集到的一些数据集为基础,使用KNN算法进行一系列的操作 一.KNN算法 首先,什么是KNN算法呢,这得用到老祖宗说的一句话"近朱者赤近墨者黑", ...
- Spring boot pom 配置文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- 【Java复健指南09】项目练习全解--房屋出租系统
一个基于文本界面的综合练习,主要用于串联和回忆知识点,比较简单 各个界面的设计样式 主菜单 =============房屋出租系统菜单============ 1 新 增 房 源 2 查 找 房 屋 ...
- Golang 实现时间戳和时间的转化
何为时间戳: 时间戳是使用数字签名技术产生的数据,签名的对象包括了原始文件信息.签名参数.签名时间等信息.时间戳系统用来产生和管理时间戳,对签名对象进行数字签名产生时间戳,以证明原始文件在签名时间之前 ...
- vulnhub靶场之DRIPPING BLUES: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:DRIPPING BLUES: 1,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhu ...
- C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)
命名空间 概述 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...