docker的简单学习

在介绍之前我先提几个问题:
什么是docker?docker和vm有什么区别?docker的的运作方式?Docker的特点?

如何开启dockret转发?如何杀死一个docker实例?如何查看容器和容器日志?如何制作一个docker image?如何发布docker image?

如何删除镜像?如何进行端口、数据等映射?如何进入容器?

创建两个容器实例docker10和docker20,让docker10和docker只运行在cpu0和cpu1上,将docker10分配512配额,分配内存只能用128m,docker20分配1024配额,io指定进行1m;最终测试一下docker10和docker20使用cpu的百分比。

如何创建docker静态ip。如何创建docker仓库?

也许有很多问题你并不知道,接下来就看我这篇文章能不能为你解惑了。在再说之前先提一点,docker安装和使用应当是在linux内核3.1以上的版本。
docker是一款开源容器引擎,让开发者可以将自己的应用程序和依赖包打包到可移植容器中,发布到任何linux上面甚至window上面,也可以实现虚拟化,容器完全使用沙盒机制,相互之间不会有任何接口,几乎没有任何性能开销,可以很容易的在机器和数据中心运行,不依赖于任何语言、框架和操作系统。

docker和VMware比较像,但是docker比vmware少了一个操作系统,更小更快,但是不适合存储大量数据,存储可以通过外部挂载的方式使用如nfs,ipscan,只适合用于计算,数据,日志跟踪和数据库不适合。

docker实例的开启:服务器 A 上运行 docker Engine 服务,在 docker Engine 上启动多容器 container ,从外网 Docker Hub 上把 image 操作系统镜像下载来,放到 container 容器运行。这样一个容器的实例就运行起来了。最后,通过 Docker client 对 docker 容器虚拟化平台进行控制。

docker实例的特点:文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像 CPU 和内存等可以分配到不同的容器中,使用 cgroup。
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和 IP 地址。
日志记彔:Docker 将会收集和记彔每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手工配置。
交互式 shell:Docker 可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互 shell。

网络转发(默认开启):/erc/sysctl.conf 加入以下内容,net.ipv4.ip_forward=1
Sysctl –p 生效

杀死一个docker实例的方法和杀死进程类似:docker kill +容器id或容器名,
删除镜像:docker rmi+容器id或容器名
查看容器实例的方法docker exec -it 容器id /bin/bash
查看容器:docker ps
查看容器日志:docker logs +容器id

查看镜像的方法:docker images

Docker Image 的制作两种方法
方法 1:docker commit #保存 container 的当前状态到 image 后,然后生成对应的 image
方法 2:docker build #使用 Dockerfile 文件自动化制作 image
方法一
docker commit + id +自己命名:标签。
方法二:
1、创建工作目录
[root@xuegod63 ~]# mkdir /docker-build
[root@xuegod63 ~]# cd /docker-build
[root@xuegod63 docker-build]# touch Dockerfile
注: make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile
2、编辑 Dockerfile
Dockerfile 用来创建一个自定义的 image,包含了用户指定的软件依赖等。
[root@xuegod63 docker-build]# vim Dockerfile
FROM docker.io/centos:latest
MAINTAINER mk@xuegod.cn
RUN yum -y install httpd
ADD start.sh /usr/local/bin/start.shADD index.html /var/www/html/index.html
注释:
FROM docker.io/centos:latest # FROM 基于哪个镜像
MAINTAINER mk@xuegod.cn # MAINTAINER 镜像创建者
RUN yum -y install httpd #RUN 安装软件
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html

ADD 将文件拷贝到新产生的镜像的文件系统对应的路径。 所有拷贝到新镜像中的文件和文件夹权限为 0755,uid 和 gid 为 0

CMD echo hello world #container 启动时执行的命令或启动服务,但是一个 Dockerfile 中只
能有一条 CMD 命令,多条则只执行最后一条 CMD.

3、创建 start.sh 脚本启动 httpd 服务和 apache 默认首页 index.html 文件
[root@xuegod63 docker-build]# echo “/usr/sbin/httpd -DFOREGROUND” > start.sh
注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd
[root@xuegod63 docker-build]# chmod a+x start.sh
创建 index.html
[root@xuegod63 docker-build]# echo “docker image build test” > index.html
4、 使用命令 build 来创建新的 image
语法:docker build -t 父镜像名镜像的 tag Dockerfile 文件所在路径
-t :表示 tage,镜像名
例:使用命令 docker build 来创建新的 image,并命名为 docker.io/centos:httpd
[root@xuegod63 docker-build]# docker build -t docker.io/centos:httpd ./
注: ./ 表示当前目录。另外你的当前目录下要包含 Dockerfile

发布docker images
方法 1:Save Image To TarBall
保存 Image 到 tar 包
语法:docker save -o 导出的镜像名.tar 本地镜像名:镜像标签
[root@xuegod63 ~]# docker save -o docker.io-centos-httpd-docker-image.tar
docker.io/centos:http
方法 2:Push Image To Docker Hub 发布到外网
1、 Signup on docker hub & create repo 注册一个帐号
https://hub.docker.com/
2、 Login to docker hub

docker login -u userabc -p abc123 -e userab@gmail.com

3、 Push image to docker hub #上传镜像

docker push centos:httpd

4、 Pull image from docker hub #下载镜像

docker pull userabc/centos:httpd # 用户名/镜像名

Container端口映射:docker run -d -p 80:80 docker.io/centos:httpd /bin/bash -c /usr/local/bin/start.sh

数据映射:
Docker run –itd –v /src:/dst centos bash –v指定映射目录,/src是物理机目录,/dst是

io控制需要先进行数据映射,
容器对硬盘的最高写入速度设定为1M/s
–device将主机设备添加到容器。
Docker run –it –v /var/www/html/:/var/www/html —device /dev/sda:/dev/sda –device-write-bps /dev/sda:1mb centos /bin/bash
time dd if=/dev/sda of=/var/www/html/test.out bs=1M count=50 oflag=direct,nonblock
注:dd 参数:
direct:读写数据采用直接 IO 方式;
nonblock:读写数据采用非阻塞 IO 方式

docker run -it -name docker10 -cpu-shares 512 -cpuset-cpus 0-1 centos /bin/bash
docker run -it -name docker20 -cpu-shares 1024 -cpuset-cpus 0-1 centos /bin/bash
docker exec -it docker10 /bin/bash 进入docker

docker资源内存控制
docker run –it –m 128m centos 分配内存只能用128m

创建 docker 静态化 IP
1、创建一个 br0 桥接设备
2、下载 pipework 包并安装
3、安装并运行 docker
4、导入 centos docker 镜像
5、启动一个 docker 实例 注意加参数: –net=none –privileged=true
6、使用 pipework 给 docker 实例配置
1.创建桥设备:
安装包:
[root@xuegod63 ~]# rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm
把 eth0 绑到 br0 桥设备上:
[root@xuegod63 ~]# cd /etc/sysconfig/network-scripts/
[root@xuegod63 network-scripts]# vim ifcfg-ens33#编辑配置文件为以下内容
TYPE=”Ethernet”
BOOTPROTO=”none”
DEFROUTE=”yes”
IPV4_FAILURE_FATAL=”no”
IPV6INIT=”yes”
IPV6_AUTOCONF=”yes”
IPV6_DEFROUTE=”yes”
IPV6_FAILURE_FATAL=”no”
NAME=”eno16777736”
UUID=”7a556ff6-f865-4549-b08f-9e526c9bb638”
DEVICE=”eno16777736”
ONBOOT=”yes”
IPADDR=”192.168.1.63” #删除和 IP 地址相关内容,红体字
PREFIX=”24”
GATEWAY=”192.168.1.1”
DNS1=”8.8.8.8”
IPV6_PEERDNS=”yes”
IPV6_PEERROUTES=”yes”
IPV6_PRIVACY=”no”
BRIDGE=”br0” #在文件最后插入这一行
生成桥设备 br0 的配置文件:
[root@xuegod63 network-scripts]# vim ifcfg-br0 #创建 ifcfg-br0 文件,并写入以下内容
DEVICE=”br0”
NM_CONTROLLED=”yes”
ONBOOT=”yes”
TYPE=”Bridge”
BOOTPROTO=none
IPADDR=192.168.1.63
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
重启网络服务

2.下载 pipework 包
以 none 模式,使用–net=none 启动一个容器,并且开启docker 特权模式。
扩展:–privileged=true #允许开启特权功能
大约在 docker 0.6 版以后,privileged 被引入 docker。使用该参数,container 内的 root 拥有真正的 root 权限。否则,container 内的 root 只是外部的一个普通用户权限。
使用 privileged 开启的容器,可以看到更多 host 上的设备,并且可以执行 mount。甚至允许你在 docker容器中开启 docker 容器。 不开启用 privileged,容器中 root 用户不能执行 mount。

给此容器配置地址
pipework 语法:pipework 网桥名 容器实例 ID 分配给容器的 IP/掩码@网关,例子如下:
[root@xuegod63 ~]# pipework br0 c88c4c7f01f9 192.168.1.71/24@192.168.1.1

yum install -y net-tools #安装 ifconfig 命令
启动服务不能直接用systemctl start httpd可以直接httpd;

配置docker私有仓库:
Docker-registry(是一个镜像)来配置私有仓库,直接下载启用docker实例即可

  1. docker不能关闭防火墙,需要使用firewalld;
  2. 拉取registry镜像。
  3. 创建镜像链接,给docker镜像打标签
    Docker tag 镜像名:标签 私有仓库地址/镜像名:标签
    例子:docker tag docker.io/registry:latest 192.168.1.63:5000/busybox:latest
  4. 修改docker配置,指定私有仓库url。/etc/sysconfig/docker
    如果没有配置文件安装,需要安装 docker-common-1.12.6-11.el7.centos.x86_64,然后就有配置文件了。
    改:4 OPTIONS=’–selinux-enabled –log-driver=journald –signature-verification=false
    为:OPTIONS=’–selinux-enabled –log-driver=journald –signature-verification=false
    insecure-registry 192.168.1.63:5000’
    注:在原文件后,追加红色标记文字。 –insecure-registry 不安全的注册。 即通信使用 http 。如果使用安全的通信,就使用 https
    默认情况下,Registry 程序的存放镜像信息的目录是/var/lib/registry 目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会挃定本地物理机一个目录如/opt/registry挂载到容器的/var/lib/registry 下,这样两个目录下都有!注:registry 运行的实例的默认存储路径是/var/lib/registry,只是个临时目录,一段时间之后就
    失。 所以使用-v 参数,指定本地持久的路径。
    例如:docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry指定端口映射为5000
  5. 将刚新打好标签的 192.168.1.63:5000/busybox 镜像,push 到本地私有仓库中。
    docker push 192.168.1.63:5000/busybox
  6. 查看镜像的存储目录和文件。

测试私有库
1.安装docker
2.修改docker配置文件,指定docker镜像加速节点为:私有仓库的地址。
改:4 OPTIONS=’–selinux-enabled –log-driver=journald –signature-verification=false’
为:OPTIONS=’–selinux-enabled –log-driver=journald –signature-verification=false
–insecure-registry 192.168.1.63:5000
3.尝试下载镜像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值