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 来实现端口映射

你可能感兴趣的:(day05(docker容器))