恶补Docker

什么是容器

  • 应用程序封装和交付的核心技术
  • 容器三个内核技术组成
  •  1.Cgroups(Control Groups) --资源管理
    
  •  2.NameSpace-进程隔离
    
  •  3.SELinux安全
    
  • 由于是在物理机上实施隔离,启动一个容器,可以像启动一个程序一样快速(真的很快)

什么是Docker

  • 完整的一套容器管理系统
  • Docker提供一组命令,让用户更加方便直接地使用容器技术,而不需要过关心底层内核技术

Docker特点

优点

  1. 相比传统虚拟化,容器更加简洁
  2. 相比于传统虚拟机,不用安装给每个容器安装操作系统,容器使用的共享公共库和程序

缺点

  1. 容器隔离性没有虚拟化强
  2. 共用Linux内核,安全性先天不足
  3. SELinux难以驾驭
  4. 监控容器和容器排错是挑战

安装部署

因为现在容器技术确实是跟这夏天一样的热,所以镜像什么不是问题。
各大镜像站点都温馨的提供了镜像,各位各取所需
简单的举个栗子:
清华大学站点有相应的说明,
点击进入 清华大学Docker Community Edition 镜像使用帮助

yum install docker-ce

什么是镜像

  1. Docker中容器是基于镜像启动的
  2. 镜像是启动容器的核心
  3. 镜像采用分层设计
  4. 使用快照COW,确保底层数据不丢失
    恶补Docker_第1张图片

自定义镜像

命令: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的基础操作,因为基础这么多年烂大街,我补的是自己那些不常用的。
祝君工作顺利。

你可能感兴趣的:(新手坑)