什么是容器
- 应用程序封装和交付的核心技术
- 容器三个内核技术组成
-
1.Cgroups(Control Groups) --资源管理
-
2.NameSpace-进程隔离
-
3.SELinux安全
- 由于是在物理机上实施隔离,启动一个容器,可以像启动一个程序一样快速(真的很快)
什么是Docker
- 完整的一套容器管理系统
- Docker提供一组命令,让用户更加方便直接地使用容器技术,而不需要过关心底层内核技术
Docker特点
优点
- 相比传统虚拟化,容器更加简洁
- 相比于传统虚拟机,不用安装给每个容器安装操作系统,容器使用的共享公共库和程序
缺点
- 容器隔离性没有虚拟化强
- 共用Linux内核,安全性先天不足
- SELinux难以驾驭
- 监控容器和容器排错是挑战
安装部署
因为现在容器技术确实是跟这夏天一样的热,所以镜像什么不是问题。
各大镜像站点都温馨的提供了镜像,各位各取所需
简单的举个栗子:
清华大学站点有相应的说明,
点击进入 清华大学Docker Community Edition 镜像使用帮助
yum install docker-ce
什么是镜像
- Docker中容器是基于镜像启动的
- 镜像是启动容器的核心
- 镜像采用分层设计
- 使用快照COW,确保底层数据不丢失
自定义镜像
命令:docker commit
简单的栗子
docker run -it docker.io/centos
#首先运行一个镜像
然后你在里面一顿增删改之后
docker ps
docker commit 原镜像id 新镜像:标签
Dockerfile
就是以名为Dockerfile文件形式创建你自己的镜像,通俗点就是写个药方,照方抓药。
***文件名开头一个字母要大写哦
Dockerfile语法格式:
– FROM:基础镜像
– MAINTAINER:镜像创建者信息(说明)
– EXPOSE:开放的端口
– ENV:设置环境变量
– ADD:复制文件到镜像
– RUN:制作镜像时执行的命令,可以有多个
– WORKDIR:定义容器默认工作目录
– CMD:容器启动时执行的命令,仅可以有一条CMD
[root@docker1 bulid]# vi Dockerfile
FROM docker.io/myos:latest
RUN yum -y install httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html/ //定义容器默认工作目录
ADD index.html index.html
EXPOSE 80 //设置开放端口号
EXPOST 443
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
#然后执行创建命令
#格式:docker build -t 新的镜像名字 Dockerfile所在文件目录
举个栗子
[root@docker1 bulid]# docker build -t docker.io/myos:http .
创建私有镜像仓库
大家都知道wifi放在隔壁房间,信号就是差一点。同样的官方镜像仓库hub.docker。也是这样的。国内是由有其他的公有镜像仓库,像是阿里啊,有兴趣大家去看看,速度肯定是ok的。既然有公的,那肯定也有私的,个人就是可以创建的。
网上教程都是有的,大多是直接拿私有仓库镜像当仓库。这里给大家弄一个别的款式的。
[root@docker1 bulid]# yum install docker-distribution
[root@docker1 bulid]# systemctl start docker-distribution
[root@docker1 bulid]# systemctl enable docker-distribution
装包,起服务。
然后,在另外的客户端就可以配置使用
[root@docker2 ~]# vim /etc/sysconfig/docker
INSECURE_REGISTRY='--insecure-registry docker1:5000'
ADD_REGISTRY='--add-registry docker1:5000'
[root@docker2 ~]# systemctl restart docker
[root@docker2 ~]# docker run -it myos:http /bin/bash
#你想看看还有什么镜像可以直接使用
[root@docker1 bulid]# curl http://私有仓库地址:5000/v2/_catalog
#查看某个镜像标签
[root@docker1 bulid]# curl http://私有仓库地址:5000/v2/docker.io/busybox/tags/list
自定义网桥
既然镜像上面是跑程序,当然是离不开网络。
- 查看默认Docker给大伙准备的网络模型
[root@docker1 ~]# docker network list
996943486faa bridge bridge local
63c88dcc3523 host host local
5e5ab3d45e27 none null local
#虚拟机网络三件套 一桥接二主机三无网络
[root@docker1 ~]# ip a s
#默认情况下你装了docker之后你查看你所有的网卡信息里面是会多出来一个dockerXX这样的网卡
你可以动手做一个新的网桥
[root@docker1 ~]# docker network create --subnet=新的ip/子网掩码 新的网桥名称
[root@docker1 ~]# docker network list #查看所有网络模型
[root@docker1 ~]# ip a s #查看所有网卡信息
[root@docker1 ~]# docker network inspect 新网桥名字 #你可以检查下网桥的基础详情
自定义网桥启动容器食用方法
[root@docker1 ~]# docker run --network=你的网桥名字 -itd 镜像/标签
[root@docker1 ~]# docker inspect 已启动容器id
#你可以看到.NetworkSettings.IPAddress 就是容器ip
[root@ae1500292be8 /]# ping 172.17.0.3 #一般ping容器自己的id肯定能通
删除网桥
[root@docker1 ~]# docker network rm 网桥名字
题外话
关于docker网络对宿主机网络的影响
有人是已经有做过相关实验
总结起来就是docker会在你心爱的自己上自立门户,影响貌似没有影响,因为这里涉及到iptables。本人愚钝,不是很熟。有心人可以,循着下面链接过去,走上一遭。文章里面相关的信息挺全的。就这样子了。友情连接
不要觉得中间少了一个一块docker的基础操作,因为基础这么多年烂大街,我补的是自己那些不常用的。
祝君工作顺利。