centos安装docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 yum install -y yum-utils device-mapper-persistent-data lvm2
 yum list docker-ce --showduplicates | sort -r
 yum install docker-ce-20.10.8-3.el7 -y
[root@ceshi ~]# systemctl daemon-reload
[root@ceshi ~]# systemctl start 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

namespace
namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个docker容器运行在同一个docker主进程并且共用同一个宿主机系统内核,各docker容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,目前主要通过以下技术实现容器运行空间的相互隔离:

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 ~]# docker run -d --name web1 -v /data/testapp:/usr/share/nginx/html/testapp -p 80:80 nginx:1.22.0

[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

[root@harbor ~]# docker exec -it cc3edaa50021 sh
# echo "asdfjkl" >> /usr/share/nginx/html/testapp/index.html

# 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

Docker服务安装完成之后,默认在每个宿主机会生成一个名称为docker0的网卡其IP地址都是172.17.0.1/16, 默认桥接网络 

[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规则

host网络,直接使用宿主机的网络( 不创建net namespace),性能最好,但是容器端口不能冲突 一个主机不能跑两个相同的服务 
 
空网络,容器不会分配有效的IP地址(只有一个回环网卡用于内部通信),用于离线数据处理等场景
 
Docker网络-bridge模式:
docker的默认模式即不指定任何模式就是bridge模式,也是目前使用比较多的网络模式,此模式创建的容器会为每一个容器分配自己的网络IP等信息,并将容器连接到一个虚拟网桥与外界通信。
 

[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

Docker网络-none模式:
none模式就是无IP模式,在使用none 模式后,docker 容器不会进行任何网络配置,其没有网卡、没有IP也没有路由,因此默认无法与外界通信,需要手动添加网卡配置IP等,所以极少使用.
 

[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

Docker网络-container模式:
得有两个或两个以上的容器才行,第一个容器在创建时可以指定是桥接,第二个容器创建时不用指定网络了,可以直接使用第一个网络信息 ,两个容器公用一个namespace,
 
Container模式即容器模式,使用参数 --net=container:目标容器名称/ID 指定,使用此模式创建的容器需指定和一个已经存在的容器共享一个网
络namespace,而不会创建独立的namespace,即新创建的容器不会创建自己的网卡也不会配置自己的IP,而是和一个已经存在的被指定的
目标容器共享对方的IP和端口范围,因此这个容器的端口不能和被指定的目标容器端口冲突,除了网络之外的文件系统、用户信息、进程信息
等仍然保持相互隔离,两个容器的进程可以通过lo网卡及容器IP进行通信。
 
[root@vm-4-14-centos ~]# docker  run -it -d --name nginx-container -p 80:80 --net=bridge nginx:1.22.0-alpine
[root@vm-4-14-centos ~]# docker run -it -d --name php-container --net=container:nginx-container php:7.4.30-fpm-alpine
第二个容器  网络模式是container 名称是第一个容器  两个容器可以共用一个net-namespace 好处:节省网络开销
 
 

[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 第一课的更多相关文章

  1. docker 第一课 —— 从容器到 docker

    1. 容器的概念 一种虚拟化的解决方案 与虚拟机所不同的是,虚拟机通过中间层,将一台或多台独立的机器虚拟运行于物理硬件之上: 而容器是直接运行于操作系统内核之上的用户空间: 基于上述,容器虚拟化也被称 ...

  2. vue.js学习(第一课)

    学习资料 来自台湾小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...

  3. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  4. <-0基础学python.第一课->

    初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...

  5. 留念 C语言第一课简单的计算器制作

    留念 C语言第一课简单的计算器制作 学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */   #include<stdio.h>  #include<stdlib.h ...

  6. MFC学习-第一课 MFC运行机制

    最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...

  7. OpenCV 第一课(安装与配置)

    OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然 ...

  8. 【第一课】神奇的Context

    初学Android的困惑 初学Android跳转页面的时候,往往教程里是这么写的: Intent intent = new Intent(); //MyActivity就是当前的Activity,It ...

  9. CodeIgniter框架入门教程——第一课 Hello World!

    本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...

  10. ruby代码重构第一课

    (文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 新手写代码的时候往往会出现很多重复的代码没有提取出来,大师高瞻远瞩总能提点很多有意义的改进,今天重 ...

随机推荐

  1. Debian+Wine For Termux,兼容Windows on arm的安卓手机子系统!

    如果已经安装了termux,先删掉. 安装方法 下载安装我提供的termux 链接: https://pan.baidu.com/s/13hbp6igps18V2RJcOxgQIg 提取码: 1irn ...

  2. Sun 的 BASE64Encoder替代

    可以使用 org.apache.commons.codec.binary.Base64替代 Maven依赖如下 <dependency> <groupId>commons-co ...

  3. 关于for循环当中发生强制类型转换的问题

    Map map1 = new HashMap(); Map map2 = new HashMap(); Map map3 = new HashMap(); List<Map> list = ...

  4. IOC常用的创建对象方式

    通过无参构造方法来创建 1.User.java public class User { private String name; public User() { System.out.println( ...

  5. Java注解(4):一个真实的Elasticsearch案例

    昨天把拼了一半的注解+Elasticsearch积木放下了,因为东西太多了拼不好,还容易乱.休息了一晚上接着来. 接着昨天,创建elasticsearch文档注解(相当于数据表的注解): /** * ...

  6. cudaMemcpy cudaMalloc

    cudaMemcpy有四种类型:HostToHost, DeviceToHost, HostToDevice, DeviceToDevices 现在我有两个指针:h_ptr, d_ptr,分别指向ho ...

  7. Vue学习之--------组件在Vue脚手架中的使用(代码实现)(2022/7/24)

    文章目录 1.第一步编写组件 1.1 编写一个 展示学校的组件 1.2 定义一个展示学生的信息组件 2.第二步引入组件 3.制作一个容器 4.使用Vue接管 容器 5.实际效果 6.友情提示: 7.项 ...

  8. Python数据分析:实用向

    文件处理 导包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns ...

  9. 驱动开发:内核LDE64引擎计算汇编长度

    本章开始LyShark将介绍如何在内核中实现InlineHook挂钩这门技术,内核挂钩的第一步需要实现一个动态计算汇编指令长度的功能,该功能可以使用LDE64这个反汇编引擎,该引擎小巧简单可以直接在驱 ...

  10. Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待

    为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...