暂无图片
暂无图片
5
暂无图片
暂无图片
2
暂无图片

K8S:基础篇之Docker(Docker 基础篇)

原创 清酒和歌 2020-08-12
1964

概述

这是一个Kubernetes系列文章,主要将我所学过,所使用过的经验、使用方法等记录在此。将会持续更新。
K8S全称为Kubernetes,因k和s中间有8个字母得名k8s。k8s的基石是Docker,一切都是以Docker来完成编排工作。
本篇,讲的是Docker相关的基础操作和概念。

什么是Docker

Docker的翻译是“码头工人”的意思。意思是一艘大货轮上,有一个一个的集装箱,集装箱里装着一类或多类的货物。这里把OS比喻为大货轮,那么Docker就类比集装箱,集装箱中的货物就类比运行的服务。当然,一个Docker里可以运行一个或多个服务。一般来说,一个Docker运行一个服务。
docker.jpeg
Docker概念上与传统的虚拟化比较相似,但是更轻量级,更方便使用,也更方便安装。
Docker和虚拟化主要区别有几点:
1、传统的虚拟化技术可以虚拟宿主机的CPU和内存,是最底层的虚拟技术。Docker是构建在系统层面之上的容器,依托于操作系统。
2、传统的虚拟化技术需要在主机上先安装好虚拟化系统,然后才能虚拟出多个虚拟机。Docker只需要yum安装后,直接docker run即可。
3、传统的虚拟化技术在构建系统时非常复杂且耗时,但是Docker在构建时,只需要写好Docker File即可构建整个容器,且编写简单,编译耗时短。
4、Docker解决了依赖问题,传统OS在内网环境下,要解决依赖问题是非常耗时耗力的,但是Docker只需要预先在有网络的情况下把依赖打包进镜像里,就可以随便在哪个环境运行起来,跨平台无阻碍

为什么用Docker

平时的上线:把包往服务器上一丢,直接进到bin目录,运行起来,OK。
使用Docker:docker run service
这里存在一个问题:
如果服务挂掉了,跑在物理机上的服务,除非做了高可用或者使用了其他守护程序,那么服务挂掉,就永久的挂掉了。
但是如果跑在了Docker上,那么只需要在docker run的时候加一个参数就可以在docker挂掉的时候自动让它重启,甚至可以在docker里再运行一个supervisor来监控进程,失败了拉起。
如果要更换环境,比如从Linux环境要迁移到windows环境,在这里Docker的功效就显现出来了,可以将Docker打成一个包后,直接放到windows服务器上,直接执行docker run即可。

Docker架构

image.png
Docker是典型的C/S架构。
客户端与服务端进行通信,Docker daemon守护进程负责构建,执行客户端的命令。
Docker daemon:Docker守护进程,用来监听Docker API 的请求和管理Docker对象。
Docker Client:Docker的客户端,是与Docker进行交互的主要方法,发送命令到docker daemon上来真正执行。
Docker Registry:Docker的镜像仓库,有官方提供的Docker Hub、也有第三方的Harbor。主要作用是用来存储Docker镜像,可以在本地搭建,更方便发布应用。
Images:镜像,镜像是一个只读模板,是构建容器的最基础组件。
Containers:容器,容器是一个可运行的实例,实质上就是一个进程,里面运行着各种各样的服务,如Nginx、Tomcat、MySQL等。容器有独属于自己的命名空间和pid。因此也拥有自己的文件系统,网络配置等。底层使用Namespace做隔离,CGroups做资源控制,UnionFS做镜像和容器的分层管理。

安装

这里系统版本为Centos7.4

[root@localhost opt]# yum install -y yum-utils [root@localhost opt]# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo [root@localhost opt]# yum install docker-ce
复制

安装完成后,启动Docker:

[root@localhost opt]# systemctl enable docker [root@localhost opt]# systemctl start docker
复制

使用

获取镜像

在之前我们提到过,镜像仓库有Docker官方的Docker Hub,可以直接在这里获取到镜像,获取方式也非常简单,如要获取一个CentOS镜像:

[root@localhost opt]# docker pull centos Using default tag: latest latest: Pulling from library/centos 3c72a8ed6814: Pull complete Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd Status: Downloaded newer image for centos:latest docker.io/library/centos:latest
复制

具体格式为:

$ docker pull <参数> <仓库地址<:端口>/>仓库名<:标签> 仓库地址:默认为Docker Hub仓库,可以不写,如果是自己搭建,那么需要按照格式,写上IP(域名):端口。 仓库名:对于Docker Hub,如果不给出用户名,那么默认为library,也就是官方镜像。如果是自己搭建的环境,或者拉取官方仓库中指定的镜像,那么需要填写<用户名>/<软件名>。如: [root@localhost opt]# docker pull centos Using default tag: latest latest: Pulling from library/centos 3c72a8ed6814: Pull complete Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd Status: Downloaded newer image for centos:latest docker.io/library/centos:latest
复制

查看并运行

在有了镜像后,我们需要将这个镜像为基础启动并运行起来。以centos:latest为例,如果我们准备启动里面的bash并进行交互,切想要在这个容器在退出之后就自己删除的话,那么可以执行:

[root@localhost opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 0d120b6ccaa8 2 days ago 215MB [root@localhost opt]# docker run -it --rm centos:latest /bin/bash [root@8ce66f0ff098 /]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core)
复制

参数说明:

-i:以交互模式运行容器
-t:为容器分配一个伪终端,通常-it同时使用
--rm:在容器退出后,自动删除
centos:latest:启动的镜像的名称
/bin/bash:要执行的命令
复制

仔细观察,这里的镜像大小和Docker Hub上镜像大小不同,Docker Hub上的大小:
image.png

大小不同的原因,是因为Docker Hub中显示的是压缩后的体积,是为了网络传输更快和流量更少。docker images显示的是镜像下载到本地后解压后的大小,是解压后各层所占的空间总和。
另外,Docker使用了UnionFS,可以使得相同的层只保留一份,因此,镜像硬盘占用空间可能要比列表里的镜像大小要小很多,可以通过命令查看:
[root@localhost opt]# docker system df
复制

前面讲了很多基础,现在,我们要真正运行起来一个服务,先拉取一个nginx的镜像:

[root@localhost opt]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx bf5952930446: Pull complete ba755a256dfe: Pull complete c57dd87d0b93: Pull complete d7fbf29df889: Pull complete 1f1070938ccd: Pull complete Digest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest
复制
[root@localhost opt]# docker run -it --name nginxd -p 8080:80 -d nginx f37b99d469f679c8e22180de2d53a86cf3d396a149c5b5d5444c8505306bd846 [root@localhost opt]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:20019 0.0.0.0:* LISTEN 7107/mongod tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1006/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1430/master tcp6 0 0 :::3307 :::* LISTEN 3958/mysqld tcp6 0 0 :::8080 :::* LISTEN 29465/docker-proxy tcp6 0 0 :::22 :::* LISTEN 1006/sshd tcp6 0 0 ::1:25 :::* LISTEN 1430/master udp 0 0 0.0.0.0:68 0.0.0.0:* 26864/dhclient udp 0 0 127.0.0.1:323 0.0.0.0:* 659/chronyd udp6 0 0 ::1:323 :::* 659/chronyd [root@localhost opt]# curl http://127.0.0.1:8080 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> [root@localhost opt]#
复制

上面的内容主要是以后台模式启动了一个nginx的容器,映射容器内80端口到宿主机的8080端口,之后,我们可以直接通过本机的8080端口访问到容器内的nginx。参数说明:

--name:命名这个容器,也就是给这个容器一个名字,这里叫做nginxd
-d:以后台方式启动,这个参数主要是为了不让容器在启动后就退出
-p:端口映射,映射规则:<宿主机端口>:<容器内端口>
复制

容器的常规操作

那么,想要查看已经在运行,或者已经停止的容器,要通过什么方法看呢,可以使用以下命令:

[root@localhost opt]# docker ps -a 注:列出所有容器,包括正在运行的和已经停止的。-a参数就是显示全部,去掉则显示正在运行的。
复制

接下来,想要删除这个容器,可以使用:

[root@localhost opt]# docker rm -f <CONTAINER ID> 注:这里的CONTAINER ID是通过docker ps -a查找的,这代表容器的ID号,是一个唯一的ID号。 -f:强制删除。
复制

想要删除整个下载下来的镜像,可以使用:

[root@localhost opt]# docker rmi -f <IMAGE ID> 注:同样的,这里的IMAGE ID也是通过docker images来查看的。 -f:强制删除。 rmi:删除镜像,里面的i代表image这个单词。 删除报错的话,一般是因为有正在运行的容器,要先stop或rm掉,才可以删除对应的镜像。
复制

想要在Docker Hub里搜索镜像,可以使用:

[root@localhost opt]# docker search <镜像名>
复制

以上,就是Docker的基础使用,下一篇,将讲述DockerFile的编写方法以及如何减小打包的体积大小。

最后修改时间:2020-08-15 10:04:15
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

T
Ty3306
暂无图片
2年前
评论
暂无图片 0
6666666666666666666666666
2年前
暂无图片 点赞
评论
Peropt
暂无图片
2年前
评论
暂无图片 0
2年前
暂无图片 点赞
评论