Docker基础

Docker是完整的一套容器管理系统(工具)前台:提供容器的一些命令后台:起到隔离的功能区别:docker:运行的进程在真机看的到,共享真机的系统,必须是64位的操作系统,内核3.0以上虚拟机:运行的进程在真机看不到应用层基本一样创建一个虚拟机:2cpu ,2G以上内存,20G以上硬盘,1网卡(vbr)[root@docker02 ~]# docker images[root@d...
摘要由CSDN通过智能技术生成

Docker是完整的一套容器管理系统(工具)
前台:提供容器的一些命令
后台:起到隔离的功能
容器三大核心:资源管理/进程隔离/selinux安全
Docker 架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
镜像和容器的关系
容器和docker的关系

Docker面向对象
容器对象
镜像

扩展:面向对象编程语言有java、Python、C++等。
类:是抽象的
对象:是具体的
面向对象是软件开发方法,三个基本特征是:封装、继承、多态。
对象是类的实例,类是对象的模板

docker的三大组件:容器和镜像和仓库的关系
这三个组件是docker的原理核心:Docker架构图
在这里插入图片描述
Docker架构图(续1)Docker架构图Docker架构图(续2)在这里插入图片描述
docker的典型场景
1 使应用的打包与部署自动化
Automating the packaging and deployment of applications
2 创建轻量、私密的PAAS环境
Creation of lightweight, private PAAS environments
3 实现自动化测试和持续的集成/部署
Automated testing and continuous integration/deployment
4 部署与扩展webapp、数据库和后台服务
Deploying and scaling web apps, databases and backend services

原理
Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。
Docker可以粗糙类比理解为轻量级的虚拟机
在这里插入图片描述
区别:
docker:运行的进程在真机看的到,共享真机的系统,必须是64位的操作系统,内核3.0以上
虚拟机:运行的进程在真机看不到
应用层基本一样

Control Groups 缩写为 cgroups ,实现了对资源的配额和度量

容器与外部的六大隔离:
1 pid namespace:所有的LXC进程在docker中的父进程为docker进程,每个lxc进程具有不同的namespace
2 net namespace:每个net namespace有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。这样每个container的网络就能隔离开来。
3 ipc namespace:container中进程交互还是采用linux常见的进程间交互方法(interprocess communication - IPC), 包括常见的信号量、消息队列和共享内存
4 mnt namespace:将一个进程放到一个特定的目录执行
5 uts namespace:UNIX Time-sharing System(Unix分时系统)namespace允许每个container拥有独立的hostname和domain name, 使其在网络上可以被视作一个独立的节点而非Host上的一个进程
6 user namespace:可以以container内部的用户在container内部执行程序而非Host上的用户。

有了以上6种namespace从进程、网络、IPC、文件系统、UTS和用户角度的隔离,一个container就可以对外展现出一个独立计算机的能力,并且不同container从OS层面实现了隔离。
  然而不同namespace之间资源还是相互竞争的,仍然需要类似ulimit来管理每个container所能使用的资源 - LXC 采用的是cgroup。

创建一个虚拟机:2cpu ,2G以上内存,20G以上硬盘,1网卡(vbr)
部署Docker
安装前准备:64位操作系统,RHEL6.5以上,关闭防火墙
安装Docker:

[root@docker01 ~]# yum -y install docker-engine
[root@docker01 ~]#systemctl start docker 
[root@docker01 ~]#systemctl enable docker 

[root@docker02 ~]# docker images  //查看镜像
[root@docker02 ~]# docker search busybox //从Docker Hub查找镜像busybox
[root@docker02 ~]#docker search -f is-official=true  //下载官方的

创建一个新的容器:

docker run  
docker run -it

-i:交互式
-t:分配一个伪tty
-d:后台运行

https://www.centos.bz/2018/06/如何在docker容器里创建apache-web服务/

下载镜像,新建一个httpd容器

[root@docker01 docker_images]# mkdir -p /home/user/website 
[root@docker01 docker_images]# mkdir -p /usr/local/apache2/htdocs/
[root@docker01 docker_images]# docker pull httpd
[root@docker01 docker_images]# docker run -dit --name Rultr-web -p 8080:80 -v /home/user/website/:/usr/local/apache2/htdocs/ httpd:2.4
[root@docker01 docker_images]# docker ps
[root@docker01 docker_images]# vim /home/user/website/docker.html
[root@docker01 docker_images]# curl http://172.17.0.1:8080/docker.html

常用服务使用自定义镜像,通过一个容器制作一个带有yum源及常用工具的镜像,并且启动新容器。
1 创建一个容器:
配置yum 源(企业一般删除原有的yum源,自己配置)

[root@docker01 ~]# docker run -it centos
[root@c8b2705ac7e4 /]# rm -rf /etc/yum.repos.d/*.repo
[root@c8b2705ac7e4 /]# vi /etc/yum.repos.d/local.repo
[root@c8b2705ac7e4 /]# yum repolist

2 安装共性的工具:vim / net-tools / pstree

[root@c8b2705ac7e4 /]# yum -y install net-tools psmisc

3 记住容器id
退出容器

[root@c8b2705ac7e4 /]# exit

4 docker commit 容器id myos //commit 编排镜像的一种方式

[root@docker01 ~]# docker commit c8b2705ac7e4 myos 

删除容器 id

[root@docker01 ~]# docker rm c8b2705ac7e4
c8b2705ac7e4
[root@docker01 ~]# docker images

5 启动新的容器

[root@docker01 ~]# docker run -itd myos
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
dd61f4c368e0        myos                "/bin/bash"              23 seconds ago 

6 进入新容器

[root@docker01 ~]# docker attach dd61
[root@dd61f4c368e0 /]# yum repolist

显示镜像仓库的所有镜像

 curl http ip :5000/v2/_catalog

显示镜像的所有标签

http://ip:5000/v2/myos/tags/list

网桥:虚拟交换机
创建虚拟网卡:ifconfig eth0:1 ip/24

创建虚拟交换机:
修改:名字/类型/ip

docker 相当于虚拟化的virsh
k8s : 管理docker集群

Docker 命令大全
(具体使用查看man、help帮助或者官方文档)
上传,下载镜像

docker  pull  rhel7 下载镜像
docker  push  rhel7 上传镜像

导入、导出镜像

 docker load <busybox.tar //导入
 docker  save  busybox:latest >busybox.tar //导出

docker镜像常用命令

docker images 查看镜像列表
docker history 查看镜像制作历史
docker inspect 查看镜像底层信息
docker pull 下载镜像
docker push 上传镜像
docker rmi 删除本地镜像
docker save 镜像另存为tar包
docker load 使用tar包导入镜像
docker search 搜索镜像
docker tag 修改镜像名称和标签

docker容器常用命令

docker run [-itd]运行容器
docker ps [-qa]查看容器列表
docker stop 关闭容器
docker start 启动容器
docker restart 重启容器
docker attach 进入容器,退出后关闭 (退出按Ctrl+p,再按q)
docker exec -it command 进入容器,退出不关闭
docker inspect 查看容器底层信息
docker top 查看容器进程列表
docker rm 删除容器

docker logs命令

docker logs [options] 容器获取容器的日志。
–details		显示提供给日志的额外细节
–follow或-f		按日志输出
–since		从某个时间开始显示,例如2013-01-02T13:23:37
–tail	all	从日志末尾多少行开始显示
–timestamps或-t		显示时间戳
–until		打印某个时间以前的日志,例如 2013-01-02T13:23:37

链接容器
docker run --link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。

--link的格式:
--link <name or id>:alias

其中,name和id是源容器的name和id,alias是源容器在link下的别名。

docker inspect -f "{{.HostConfig.Links}}" zabbix-server //查看zabbix-server关联了哪些容器

file + 文件名 : 可以知道该文件是什么类型
nginx -T :查看配置文件内容

实战列子:使用Docker搭建zabbix(企业不用Docker部署zabbix)

Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值