## 介绍docker:
6大隔离,命名空间
文件系统 主机名 ,进程 ,信号向量, 用户 ,网络
docker 底层就是 6 大命名空间实现的,是 docker 的底层技术
-m, --mount unshare mounts namespace
-u, --uts unshare UTS namespace (hostname etc)
-i, --ipc unshare System V IPC namespace
-n, --net unshare network namespace
-p, --pid unshare pid namespace
-U, --user unshare user namespace
## 自定义网卡
基于底层创建添加网卡,手动在命名空间里面,创建,不使用docker
添加容器网卡
docker run -itd myos:latest 首先启动一个容器
docker ps 获取容器id
docker exec -it 容器id /bin/bash 进入容器,查看网卡
cid=$(docker inspect 0eacfd8dab2a -f '{{ .State.Pid }}') 获取容器命名空间id
mkdir -p /var/run/netns 创建目录存放命名空间链接
ln -s /proc/${cid}/ns/net /var/run/netns/${cid} 把容器的命名空间链接到目录
ip netns list 查看命名空间
ip netns exec ${cid} ip link show 查看命名空间中网卡设备
ip link add lnic0 type veth peer name rnic0 创建虚拟设备,lnic0 和 rnic0
ip link set rnic0 netns ${cid} name eth1 把rnic0放到命名空间中去,并命名为eth1
ip exec netns ${cid} ip link set dev eth1 up 启动命名空间中的设备
ip netns exec ${cid} ip addr add dev eth1 10.10.10.2/24 brd 10.10.10.254 给eth1配置ip地址
ip netns exec ${cid} ip link show 查看命名空间中网卡设备
docker network create --subnet=10.10.10.0/24 docker1 创建 docker1 网桥
ip link show 查看网桥名称
ip link set dev lnic0 up 启动 lnic0 设备
ip link set dev lnic0 master 网桥名称 把lnic0 加入新创建的网桥
docker exec -it 容器id /bin/bash 进入容器查看,添加网卡完毕
```
## DocKer 的安装和部署
(2cpu, 2G以上内存,10G以上硬盘)
使用yum 源直接安装,如果拉取默认的地址,下载不了,网上搜国内镜像,清华源,阿里源
- 安装 docker
yum -y install docker
- 启动
systemctl start docker
## docker 镜像常用的命令
docker images #查看本地的镜像信息
docker pull # 下载镜像
docker push #上传镜像
docker history 镜像名称:标签 # 查看镜像制作历史
docker inspect 镜像名称:标签 #查看镜像底层信息
docker search # 搜索镜像,包含“xx”的包的资源
docker rmi #删除本地镜像 (先删除容器,才能删除镜像)
docker save 镜像名 -o xx.tar #镜像另存为tar包
docker load -i xx.tar #使用tar包导入镜像
docker tag #修改镜像名和标签(创建出来新的,把旧的删了)
类似硬连接的模式
## 制作docker的tar包,备份
镜像的表示方法
镜像 == 名称 + 标签 == 唯一的镜像id
docker save docker.io/busybox:latest -o busybox.tar
恢复(有这个tar包的前提下)
docker load -i busybox.tar
docker inspect 镜像的名称 #查看镜像底层信息
docker history docker.io/centos:latest 查看镜像的制作的过程,制作历史
## 自定义镜像
docker commit 方式制作镜像
大体步骤:
制作镜像
1.docker run -it docker.io/centos //进入镜像
2.配yum原
3.装常用软件包
4.退出
5.docker commit 容器id 新镜像名称:标签 //制作镜像
6.启动新镜像测试有没有yum原等其他命令
docker history 新的容器名称 //查看新的容器历史结构,
Dockerfile 方式制作镜像
Dockerfile语法格式: 自动化创建镜像
– FROM:基础镜像
– MAINTAINER:镜像创建者信息(说明)
– EXPOSE:开放的端口
– ENV:设置环境变量
– ADD:复制文件到镜像
– RUN:制作镜像时执行的命令,可以有多个
– WORKDIR:定义容器默认工作目录
– CMD:容器启动时执行的命令,仅可以有一条CMD
----------------------------------------------------------
具体实现的步骤:
制作Dockerfile镜像的步骤
制作安装好的yum的centos的镜像
mkdir baseos
cd baseos
touch Dockerfile
vim Dockerfile
FROM docker.io/centos:latest
RUN rm -f /etc/yum.repos.d/*.repo
ADD local.repo /etc/yum.repos.d/local.repo
RUN yum install -y net-tools iproute psmisc vim-enhanced bash-completion && yum clean all
cp /etc/yum.repos.d/local.repo .
docker build -t newos:latest .
docker build -t 镜像的名称 .
案例
制作服务镜像,httpd
#] mkdir web
#] cd web
#] touch Dockerfile
#] vim Dockerfile
FROM myos:latest #用已经搭设好yum的作为底层镜像
RUN yum -y install httpd
ENV LANG=C
WORKDIR /var/www/html/
ADD index.html index.html
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
#] touch index.html
#] vim index.html
<pre>
echo aaaaa
echo bbbbb
echo ccccc
#] docker build -t myos:http . 创建镜像
#] docker run -itd myos:http #用创建好的镜像,开启容器
#] docker ps -a #查看容器是否正常启动
#] docker inspect f59 #查看http服务的ip地址
验证:
#] curl http://172.17.0.2 #访问一下
#] curl http://172.17.0.2
<pre>
echo aaaaa
echo bbbbb
echo ccccc
默认的启动,程序