Docker云计算详解(一)

7 篇文章 0 订阅
3 篇文章 0 订阅

1. Docker介绍

1.1 什么是容器?

1.2 容器的前世

FreeBASE jail ------> Linux vserver
chroot -----> 完整的根文件系统(FHS)标准的
namespaces —> UTS Mount IPC PID user network
cgroup —> 资源的分配和监控

通过比较复杂的代码开发的过程,调用以上三项技术
实现容器的创建 ----> 管理 ---->销毁

1.3 传统虚拟化技术和容器对比

在这里插入图片描述全虚拟化很耗资源!!!

1.4 容器的今生?

实现隔离能力!
LXC (LinuXContainer)
对于原有的常用功能进行了封装,方便我们做容器的生命周期
-----> Docker (dotcloud)

在这里插入图片描述早期的容器全要自己手动对上述的东西进行创建管理销毁,而且是用c的代码,很麻烦,容器只是对自己想要的资源做了隔离。

2. Docker的安装

2.0、yum源准备

curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.1 安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r

yum install -y docker-ce

2.2 安装docker-ce

yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

2.3 启动Docker服务

systemctl daemon-reload
systemctl restart docker
docker version
docker  info

2.4 配置镜像加速

阿里云Docker-hub
https://cr.console.aliyun.com/cn-hangzhou/mirrors

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker
	  	  
或者:
vim   /etc/docker/daemon.json

	{
		 "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
	}	

3. Doocker体系结构

image.png根据上述安装步骤,我们就安装好了client和docker_host,注册中心以后都要整一个本地的,不然每次都要远程拉取。
docker pull将centos拉取到本地image,然后启动该image,就变成了一个容器,就可以提供相应的功能了。image和container可以单独管理。

4. Docker的镜像基础管理

4.1 获取镜像

基础镜像拉取
docker search centos
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx

4.2 镜像基本查看

[root@docker ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              6.8                 82f3b5f3c58f        4 months ago        195 MB
centos              6.9                 2199b8eb8390        4 months ago        195 MB
centos              7.5.1804            cf49811e3cdb        4 months ago        200 MB
centos              7.6.1810            f1cb7c7d58b7        4 months ago        202 MB
oldguo/centos_sshd  v1.0
oldguo/centos_sshd  v2.0
oldguo/centos_sshd  v3.0
标识镜像唯一性的方法:
1. REPOSITORY:TAG
centos:7.5.1804 
2. IMAGE ID (sha256:64位的号码,默认只截取12位)
82f3b5f3c58    
[root@docker /]# docker image ls --no-trunc 

4.3 镜像详细信息查看

[root@docker /]# docker image inspect ubuntu:latest
[root@docker /]# docker image inspect 82f3b5f3c58f

4.4 只查看镜像ID

[root@docker ~]# docker image ls -q

在这里插入图片描述

4.5 镜像的导入和导出

[root@docker ~]# docker image save 3556258649b2 >/tmp/ubu.tar
[root@docker ~]# docker image rm 3556258649b2
[root@docker ~]# docker image load -i /tmp/ubu.tar
设置标签:
[root@docker ~]# docker image tag 3556258649b2 oldguo/ubu:v1 

在这里插入图片描述在这里插入图片描述

4.6 镜像的删除

[root@docker ~]# docker image rm -f 3556258649b2
[root@docker ~]# docker image rm -f `docker image ls -q`

5. 容器的管理

5.1 运行第一个容器

5.1.1 交互式的容器:

在这里插入图片描述从上图看到,容器启动之后会进入容器,这里进入的是centos容器,秒级启动,并且很好的与外部环境隔离。

[root@docker ~]# docker container run -it  9f38484d220f
[root@docker /]# docker container ls
[root@docker /]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4d1ef5a6ecfc        9f38484d220f        "/bin/bash"         5 minutes ago       Up 5 minutes                            nervous_alle

CONTAINER ID : 容器的唯一号码(自动生成的)
NAMES		 : 容器的名字(可以自动,也可以手工指定)
例子: 手工指定容器名启动
[root@docker /]# docker container run -it --name="oldguo_cent76" 9f38484d220f
[root@docker /]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
ef45b19d8c7b        9f38484d220f        "/bin/bash"         About a minute ago   Exited (0) 5 seconds ago                       oldguo_cent76
4d1ef5a6ecfc        9f38484d220f        "/bin/bash"         9 minutes ago        Up 9 minutes                                   nervous_allen

STATUS	     : 容器的运行状态  ( Exited , Up)

在这里插入图片描述

5.1.2 守护式容器

-d就是指的守护式容器。

[root@docker /]# docker run -d --name="oldguo_nginx" nginx:1.14
查询容器的详细信息:
[root@docker /]# docker container inspect oldguo_nginx

在这里插入图片描述下图用宿主机访问nginx。
在这里插入图片描述

5.1.3 容器的应用场景

交互式的容器: 工具类: 开发,测试,临时性的任务()
[root@docker ~]# docker container run -it --name="oldguo_cent76"  --rm 9f38484d220f
守护式容器: 网络服务
[root@docker /]# docker run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14
8080对应着容器内部nginx的80端口,一种外部访问内部的映射关系。

在这里插入图片描述

5.1.4 容器的启动\关闭\连接

在这里插入图片描述上图式交互式启动的一种方式,–rm是指退出容器后自动删除容器,交互式主要针对临时任务。

守护式容器的关闭和启动
[root@docker /]# docker container stop oldguo_nginx_80
[root@docker /]# docker container start oldguo_nginx_80

交互式的容器的关闭和启动
[root@docker /]# docker container stop nervous_allen
[root@docker /]# docker container start -i  nervous_allen

 如果我启动交互式服务时,忘了加上-i,导致该服务后台运行,那么我又想进入该服务,比如centos,那么就执行下面这条命令。
容器的连接方法:
[root@docker /]# docker container attach nervous_allen
上面的这个方法只要有一个连接down掉,那所有连接都会退出该容器。

子进程的方式登录(在已有工作容器中生成子进程,做登录.可以用于进行容器的调试,退出时也不会影响到当前容器)
[root@docker ~]# docker container exec -it nervous_allen /bin/bash

容器的后台及前台运行:
1. ctrl +  P, Q   
attach 调用到前台
2. 死循环 
3. 让程序前台一直允许(夯在前台)
制作守护式容器时,常用的方法

在这里插入图片描述如上图所示,如果run的时候不加-it,那么就不是就无法长时间占用bash窗口。

5.2 docker容器的网络访问

如下图所示,宿主机会自动生成一个docker0网卡,然后与各个容器进行通信。
在这里插入图片描述我们启动的容器内部网络是可以互联的,只是无法对外进行服务,我们必须通过端口映射来对外访问。

指定映射(docker 会自动添加一条iptables规则来实现端口映射)
    -p hostPort:containerPort
    -p ip:hostPort:containerPort 
    -p ip::containerPort(随机端口:32768-60999)
    -p hostPort:containerPort/udp
    -p 81:80 –p 443:443
[root@docker ~]# docker container run -d -p 8080:80 --name='n2' nginx:1.14    *****
[root@docker ~]# docker container run -d -p 10.0.0.100:8081:80 --name='n3' nginx:1.14  *****
[root@docker ~]# docker container run -d -p 80 --name='n5' nginx:1.14
[root@docker ~]# docker container run -d -p 172.16.1.200::80 --name='n6' nginx:1.14

多服务映射
在这里插入图片描述

5.3容器的其他管理

docker ps -a  -q 
等价于:
docker container ls -a -q
[root@docker ~]# docker  top  ba9143bcaf74
等价于:
[root@docker ~]# docker  container top  ba9143bcaf74
查看日志:
[root@oldboy docker]# docker logs testxx
[root@oldboy docker]# docker logs -tf testxx

如下图一直监控日志。
在这里插入图片描述

[root@oldboy docker]# docker logs -t testxx
[root@oldboy docker]# docker logs -tf  --tail 10 testxx
[root@oldboy docker]# docker logs -tf  --tail 0 testxx
 容器太多的话对于日志分析就很难受了,后面我们有专门的技术来收集分析日志,比如ELK。

在这里插入图片描述

小结:

  1. 镜像类:
    docker image
    search
    pull
    ls *****
    inspect *****
    rm ****
    save
    load
  2. 容器类
    docker container
    run *****
    start ****
    stop ****
    restart
    kill
    attach
    exec *****
    ls *****
    top ****
    logs
    inspect ****

5.4 docker的数据卷实现持久化存储

例子:接下来要做的操作就是将nginx的欢迎页面改掉,由于容器里面没有过多的命令,于是可以在容器外面改完复制到容器里,那么问题来了,如果有1万个nginx容器,难道要拷贝1w份吗。所以我们要采取另一种方案,数据卷。

1. 手工交互数据:
[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/html/
[root@docker opt]# docker container cp n1:/usr/share/nginx/html/50x.html ./

2. Volume实现宿主机和容器的数据共享
[root@docker opt]# mkdir -p /opt/html
[root@docker ~]# docker run -d --name="nginx_3" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx

指定宿主机目录与容器目录映射关系。
在这里插入图片描述 ```
我们在容器里开启服务最好都要用数据卷做数据持久化,比如mysql的数据,日志等,都会找单独的目录进行挂载,不然容器挂了数据就没了。
作用: 数据持久化
3. 例子: 开启两个nginx容器(端口90,91),共同挂载一个数据卷,实现静态资源共享

在这里插入图片描述

  1. 数据卷容器:
    (1)宿主机模拟数据目录
    mkdir -p /opt/Volume/a
    mkdir -p /opt/Volume/b
    touch /opt/Volume/a/a.txt
    touch /opt/Volume/b/b.txt
    现在用容器来当作数据卷,之前是用的目录。
    (2)启动数据卷容器(将宿主机的目录映射到数据卷容器中)
    docker run -it --name “nginx_volumes” -v /opt/Volume/a:/opt/a -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash
    ctrl p q

(3)使用数据卷容器
docker run -d -p 8085:80 --volumes-from nginx_volumes --name “n8085” nginx
docker run -d -p 8086:80 --volumes-from nginx_volumes --name “n8086” nginx
作用: 在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数卷容器进行统一管理

制作本地局域网yum源
1. 安装vsftpd软件
[root@docker ~]# yum install -y vsftpd
2. 启动ftp 
[root@docker ~]# systemctl enable vsftpd
[root@docker ~]# systemctl start vsftpd
3. 上传系统进行到虚拟机
 就是将centos的iso镜像上传到linux里。


4. 配置yum仓库
mkdir -p /var/ftp/centos6.9 
mkdir -p /var/ftp/centos7.5
[root@docker mnt]# mount -o loop /mnt/CentOS-6.9-x86_64-bin-DVD1.iso  /var/ftp/centos6.9/

windows验证
ftp://10.0.0.100/centos6.9/


cat >/yum.repos.d/ftp_6.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.100/centos6.9
enabled=1
gpgcheck=0
EOF


cat >/yum.repos.d/ftp_7.repo <<EOF 
[ftp]
name=ftpbase
baseurl=ftp://10.0.0.100/centos7.5
enabled=1
gpgcheck=0
EOF

将镜像挂载到ftp目录下。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值