docker 容器管理
1、安装docker
1、关闭防火墙和selinux https://www.cnblogs.com/gaohq/p/15582966.html 2、yum update yum update 命令 然后重启下服务 3、配置yum的仓库
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
4、安装docker yum install docker-ce 默认装的是最新的 systemctl start docker systemctl enable docker 设置成开机启动 docker info 看docker 的信息
2、创建容器常用的命令
一个镜像run起来后是宿主机上的一个进程,如下图是创建nginx容器后的进程信息
-it 的作用:1、给正在创建的容器分配一个伪终端的进程在容器里面,让容器一直运行者,避免容器起来了立马终止掉 2、进入容器时需要
-d 是后台运行的意思
-name 给容器设置名称,默认是随机生成的
-e 给容器设置环境变量
-restart 重启的策略 always 当容器挂掉后容器会重启的,当重启docker 服务后 容器也会自动的启动
-m 当前容器可以使用宿主机最大的内存
--cpus 当前容器可以使用宿主机最大的cpu
docker run -m="500m" --cpus= "1" -d -e env = prod -p 80:80 --name mynginx --restart=always nginx
3、管理容器常见的命令
docker top 容器
看容器负载情况
docker top 容器名称
4、docker 数据持久化
docker run -m="500m" --cpus= "1" -d -e env = prod -p 80:80 -v /opt/wwwroot:/usr/share/nginx/html --name mynginx --restart=always nginx
5、docker 容器网络
5.1 网络设备
veth pair 我们访问宿主机上的网络都需要 经过宿主机,宿主机上的网络命名空间和容器的网络命名空间是隔离的,默认是不能相互访问的
那就需要一个虚拟的网络设备把两个命名空间连接起来,这个网络设备就是veth,每次创建一个容器就会有一个veth与之一一对应
就相当于是挖路的
docker0:网桥也是一个虚拟设备相当于交换机,用于和容器内的网卡建立连接。
这样宿主机的网络命名空间就能在veth 挖好的路上通过docker0和容器的网卡建立了通信,相当于是路上的一个收费站来接受请求的
以上是容器的网络通信的涉及到的两个虚拟网络设备的作用
5.2 浏览器到容器内部的网络请求过程
那么宿主机怎么访问到容器内呢,以及容器内怎么访问外部信息呢
Docker 使用iptables 实现网络通信。
我们浏览器上访问 192.168.1.10:88 时 怎么会转发到我们刚创建的nginx 容器里面呢
先找到宿主机的网卡,然后可以看下 88 这个端口被谁监听的(ss -antp|grep 88)发现是docker (docker0)来监听的
为什么会监听呢是因为 我们设置了-p 做了一个端口映射,实际上是通过iptables实现了一个DNAT(目标网络地址转换)的机制
这个转换的地址也可以通过命令来看转换规则
iptables -t nat -vnL DOCKER
192.168.1.10 是宿主机的地址,docker 监听 88 端口,根据iptables 创建的DNAT 机制把这个请求 转换到容器内部的网卡(172.17.0.2)上.
宿主机会维护一个ip route 路由规则 (ip route)
会发现会路由到docker0 这个网络设备上,docker0 进行网络广播寻址,寻找到 具体的某个容器。这样实现了从浏览器到宿主机容器内的网络通信
关键的是 DNAT和路由表比较关键
6、harbor 安装
6.1 docker-compose 安装
1、mv /usr/local/src/dockercompose/docker-compose-Linux-x86_64 /usr/bin/docker-compose 2、chmod +x /usr/bin/docker-compose 3、docker-compose 可以看到命令的帮助就可以了
6.2 harbor 安装
1、tar zxvf harbor-offline-installer-v2.0.0.tgz 2、cd harbor 3、cp harbor.yml.tmpl harbor.yml 4、vi harbor.yml hostname: reg.ctnrs.com 改成当前宿主机的ip https: # 先注释https相关配置 harbor_admin_password: Harbor12345 5、./prepare 6、./install.sh 5和6都是在harbor目录中 可能要花 2分钟 7、访问harbor http://192.168.1.11:80 admin / Harbor12345 8、推送仓库 vi /etc/docker/daemon.json {"insecure-registries":["reg.ctnrs.com"]} 仅用于http的请求,如果是https就不用了 systemctl restart docker docker-compose up -d harbor目录下 docker tag nginx:latest 192.168.1.11/library/nginx:v1 docker login 192.168.1.11
7、容器里面安装常见的Linux命令
更新包管理 apt-get update 安装 vim命令 apt-get install vim -y 安装netstat 命令 apt-get install net-tools 容器内安装ps命令 apt-get install procps