day05(docker容器)

1、什么是容器?


容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。
隔离的环境拥有自己的系统文件、IP地址、主机名等
系统文件:kvm虚拟机、linux
程序:代码,命令
进程:正在运行的程序

2、容器和虚拟化的区别


容器:共用宿主机内核,轻量级,损耗少,启动快,性能高

kvm虚拟化:需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,需要走开机流程


3、容器技术的发展过程


1):chroot技术,新建一个子系统(拥有自己完整的系统文件)
参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
chang root

作业1:使用chroot监狱限制SSH用户访问指定目录和使用指定命令
https://linux.cn/article-8313-1.html
ls

2):linux容器(lxc)  linux container(namespaces 命名空间 隔离环境 及cgroups 资源限制)

cgroups  限制一个进程能够使用的资源。cpu,内存,硬盘io

kvm虚拟机:资源限制(1c 1G 20G)


##需要使用epel源
#安装epel源
yum install epel-release -y

#编译epel源配置文件
vi  /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

##安装lxc
yum install lxc-* -y
yum install libcgroup* -y
yum install bridge-utils.x86_64 -y


##桥接网卡
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
echo 'TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0


[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0 
echo 'TYPE=Bridge
BOOTPROTO=static
NAME=virbr0
DEVICE=virbr0
ONBOOT=yes
IPADDR=10.0.0.11
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=180.76.76.76' >/etc/sysconfig/network-scripts/ifcfg-virbr0

##启动cgroup
systemctl start cgconfig.service

##启动lxc
systemctl start lxc.service

##创建lxc容器
方法1:
lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64
方法2:
lxc-create -t centos -n test

#####为lxc容器设置root密码:
[root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd
Changing password for user root.
New password: 
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.



##为容器指定ip和网关
vi /var/lib/lxc/centos7/config
lxc.network.name = eth0
lxc.network.ipv4 = 10.0.0.111/24
lxc.network.ipv4.gateway = 10.0.0.254

##启动容器
lxc-start -n centos7

3):docker容器
centos7.4   2G   10.0.0.11  docker01    host解析
centos7.4   2G   10.0.0.12  docker02    host解析

Docker是通过进程虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。
namespace  资源隔离
cgroups    进程的资源限制
kvm       虚拟磁盘文件,资源隔离
kvm       资源限制,--cpus --memory

docker 初期把lxc二次开发,libcontainer

top
htop



docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行
部署服务,环境问题

一次构建,处处运行

docker是一种软件的打包技术


构建:做一个docker镜像
运输:docker pull
运行:启动一个容器
每一个容器,他都有自己的系统文件rootfs.

kvm解决了硬件和操作系统之间的依赖
kvm独立的虚拟磁盘,xml配置文件

docker解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
docker镜像有自己的文件系统。

docker容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行


4、docker的安装


10.0.0.11:修改主机名和host解析
rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y


5、docker的主要组成部分


docker是传统的CS架构分为docker client和docker server,向mysql一样    

命令:docker version 
docker info(如果要做监控)

docker主要组件有:镜像、容器、仓库, 网络,存储

启动容器必须需要一个镜像,仓库中只存储镜像
容器---镜像---仓库


6、启动第一个容器


##配置docker镜像加速 vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"] }


docker run -d -p 80:80 nginx
run 创建并运行有个容器
-d 放在后台
-p 端口映射
nginx docker镜像的名字

7、docker的镜像管理


docker search  搜索镜像(优先选择官方的,其次是评分高的)

官方镜像仓库地址:hub.docker.com

docker pull(push)  获取镜像
docker pull centos6.9(官方pull没有指定版本,默认下载最新版本)
docker pull  daocloud.io/huangzhichong/alpine-cn:latest   (私有仓库)



docker images 或 docker image ls   查看镜像列表
docker rmi 或  docker image rm 
     例子:docker image rm centos:latest 
docker image save centos >docker_centos7.6.tar.gz    导出镜像
docker image load -i docker_centos7.6.tar.gz    导入镜像

8、docker的容器管理


docker run -d -p 80:80 nginx:latest
run 创建并运行一个容器
-d   放在后台
-p  映射端口


docker run -it --name centos6.9 /bin/bash 
  -it  分配交互式的终端
--name  指定容器的名字
/bin/bash  覆盖容器的初始命令 



docker run image_name   启动容器

docker stop CONTAINER_ID   停止容器

docker kill CONTAINER_name   杀死容器

docker rm   -f CONTAINER_ID   删除容器

docker rm -f  `docker ps -a -q`  批量删除容器

docker ps (-a -l -q)    查看容器列表

docker exec   进入容器(调试、排错)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)   


9、docker容器的网络访问(端口映射)


-p hostPort:containerPort 
指定映射(docker 会自动添加一条iptables规则来实现端口映射)

-p  ip:hostPort:containerPort 
多个容器都想使用80端口

-p ip::containerPort   
随机端口

-p hostPort:containerPort:udp
-p 10.0.0.100::53:udp 使用宿主机的10.0.0.100的这个ip地址的随机端口的udp协议映射容器的udp53端口

-p 80:80 -p 443:443  可以指定多个p

docker run -P  随机端口

通过iptables 来实现端口映射

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342