## 介绍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 源直接安装,如果拉取默认的地址,下载不了,网上搜国内镜像,清华源,阿里源

  1. 安装 docker
yum -y install docker
  1. 启动
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
默认的启动,程序