docker简介


        虚拟化可以更高效的利用资源,更方便的管理服务,虚拟化技术重有主机级虚拟化,主机级别的虚拟化中有两种,有Type-I 和 Type-II 的虚拟化。

        Type-I 的虚拟化是在硬件之上安装一个虚拟机管理器hypervisor,然后在hypervisor之上安装虚拟机。

        Type-II 的虚拟化最常见的实际应用就是VMware workstation,Vitual box,还有kvm和zen。实现方法是在物理机器上安装一个主机操作系统,也叫宿主机,然后在宿主机上安装一个虚拟机管理器 Virtual Machine Monitor 简称VMM,然后在上面安装虚拟机。

        计算机有内核空间和用户空间,真正产生价值的是用户空间的应用进程,而不是资源管理平台,但是没有内核没有库文件是没有办法运行程序。如一个虚拟机只需要运行一个nginx,但是却需要同时运行系统内核,在Type-II的虚拟化中要运行两个内核,这样的代价有点大,减少中间环节是提高效率的方式。

        内核有一个功能提供环境隔离,如果抽调虚拟机内核的话就会使程序达不到隔离的效果;所以需要一个虚拟的环境隔离管理器来创建一个一个隔离的环境,隔离的就是用户空间,让需要隔离出来的进程跑在隔离的环境内,一个隔离出来的空间只跑一个或部分进程;其中有一个隔离出来的空间是有特权的,用来管理其他空间。这些被隔离出来的空间是被一个内核来统一管理的,进程所看到的边界是被隔离出来的边界。这个被隔离出来的空间就是容器,docker就是一种容器技术。


15386597776627_catch.jpeg


        Docker有三部分组成:docker daemon,docker client,docker registries。

        OCF开放容器格式,docker的官方容器站点:hub.docker.com ,docker是C/S架构的,服务端监听在套接字上,支持三种套接字,ipv4、ipv6、unix sockfile,阿里云有加速镜像,需要在阿里云开发者平台上注册账号。docker有社区版和企业版,docker-ce是社区版,docker-ee是企业版。


安装docker


        安装docker的主机最好使用linux 3.1及以上版本的内核,CentOS7刚好符合要求。docker文档地址:http://docs.docker-cn.com/ 。


阿里云repo文件:

        阿里镜像仓库:https://cr.console.aliyun.com

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

        默认情况下extras仓库有docker,使用默认的docker使用 yum install docker 命令安装,但如果要使用如上下载的镜像则使用下面的命令。

yum install docker-ce

创建镜像加速:配置文件为 /etc/docker/daemon.json 这个文件默认不存在,需要手工创建。

mkdir /etc/docker
vim /etc/docker/daemon.json
{
    "registry-mirrors":["https://regisrty.docker-cn.com"]
}
或
{
    "insecure-registries":["http://myharbor.com"]
}

insecure-registries:非https的镜像地址

registry-mirrors:加速镜像地址

        阿里云有镜像加速,需要注册账号,每个人都有属于自己的镜像加速地址。登陆后到 https://cr.console.aliyun.com 这个地址点击“镜像加速器”即可看到加速地址。


清华大学repo文件:

        清华大学镜像加速:https://mirror.tuna.tsinghua.edu.cn

wget https://mirror.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
cd /etc/pki/rpm-gpg
wget https://mirror.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg    #下载gpg文件

修改镜像地址:清华的镜像默认不是清华的地址,需要手工修改。

vim /etc/yum.repo/docker-ce.repo
:%s@https://download.docker.com/linux@https://mirror.tuna.tsinghua.edu.cn/docker-ce/linux@


使用docker


启动docker:

systemctl start docker.service

新命令归类:

        config      

        container   容器的操作

        image        镜像的操作

        network     网络的操作

        node        

        plugin      

        secret      

        service     

        stack       

        swarm       

        system      

        trust       

        volume     


常用docker命令:

        docker version

        docker info

        docker search myname 

        docker inspect myname        查看某个docker容器信息


docker container:

        docker container create --name myname nginx:latest

        docker container ls 

        docker container ls -a

        docker container ls --no-trunc

        docker container logs myname


docker image:

        docker image ls

        docker image rm


docker network:

        docker network ls

        docker network rm network_name

        docker network inspect network_name


启动进入或关闭容器:

        docker run --name myname -it busybox:latest        启动并进入bash

        docker run --name myname -d nginx:latest    启动容器

        docker start myname 

        docker stop myname 

        docker kill myname 

        docker exec -it myname bash        容器运行时进入bash

        docker exec -it myname /bin/sh

        docker diff myname     查看修改后的镜像与之前的文件


制作镜像:

        docker commit --author "qiyang" --message "say something" webtest nginx:v2

        docker history nginx:v2        查看镜像的历史操作

        docker build -t myname:1.1 ./          创建自定义镜像      -t  名称:版本号


端口:

        docker run --name web1 -d -p <宿主IP>:<宿主端口>:<容器端口> nginx:latest

        docker run --name web1 -d -p <宿主端口>:<容器端口> nginx:latest

        docker run --name web1 -d -p <容器端口> nginx:latest

        docker run --name web1 -d -P nginx:latest

        docker port web1


资源限制:

        docker run --name nginx -d -m 100m --cpus=0.3 nginx:latest

        --cpus=0.3  小数位百分比,整数为核心数,如--cpus=2 代表两核


挂载卷:

        docker run --name db1 -d -v <宿主目录>:<容器目录> mysql:latest

        docker run --name db1 -d -v <容器目录> mysql:latest


环境变量:

        docker run --rm --name tomcat1 -e MYSQL_PASSWORD=123456 -d tomcat:v1


docker开机启动:

--restart=always

--restart=on-failure:10

--restart=no

--restart=unless-stopped

docker run --restart=always --name php7.2 -d -p 80:80 php7.2:0.2

如果服务已经启动且不能停止,可以更新命令使其开机启动服务:

docker update --restart=always <container_name>


以特权模式运行:

docker run --privileged=true php7.2:0.2


docker代理


方法一:文件名任意 xxx.conf,需要重启docker。

mkdir -p /etc/systemd/system/docker.service.d
cat >> /etc/systemd/system/docker.service.d/proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.1.22:8118"
Environment="HTTPS_PROXY=http://192.168.1.22:8118"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.1.0/24"
EOF

# 或者
sed -i '/ExecStart=/a\ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT' /usr/lib/systemd/system/docker.service
sed -i "/ExecStart=/iEnvironment=HTTPS_PROXY=http://192.168.0.26:8118" /usr/lib/systemd/system/docker.service
sed -i '/ExecStart=/i\Environment=NO_PROXY=127.0.0.0/8,192.168.0.0/24' /usr/lib/systemd/system/docker.service

方法二:重启容器即可。

vim ~/.docker/config.json
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.1.22:8118",
     "httpsProxy": "http://192.168.1.22:8118",
     "noProxy": "localhost,127.0.0.1,192.168.1.0/24"
   }
 }
}

方法三:在构建镜像时使用。这种方法如果代理是localhost这样的地址需要加--network host 而且代理本身要开启 Gateway 模式。

docker build . \
    --build-arg "HTTP_PROXY=http://192.168.1.22:8118" \
    --build-arg "HTTPS_PROXY=http://192.168.1.22:8118" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,192.168.1.0/24" \
    -t your/image:tag