docker Kubernetes关键知识点[整理中]

Docker

一些概念

docker本身并不是一个容器,而是一个管理容器的引擎工具。它包含一个服务端和客户端,服务端是一个管理着所有容器和文件系统的服务进程,客户端则是一个服务端的控制器,用来控制docker的服务端进程。

核心:仓储,镜像,容器
Dockerfile,DockerHub

优缺点

部署简单化、部署轻量快速、环境标准化(能实现流水线管理)、组件复用、
易移植、安全(隔离应用和系统)、增量修改、版本控制、共享性(公共的注册服务器)
只支持64位系统、系统内核版本3.8以上、内核需支持cgroups和命名空间

开发流程概览

我们开发完成之后,将应用打包成镜像,发布到自己的仓储服务器或者直接上传到服务器中,服务器拉取或者加载镜像,设置对应的端口映射并启动容器。

有很多持续集成方案,比如使用Jenkins可以实现代码提交后,自动测试、自动构建,并且可以持续集成到docker仓库,这样服务的更新、回滚都非常方便。

在这里插入图片描述

示例

docker文件(Dockerfile)内容如下

FROM microsoft/aspnetcore:1.0

WORKDIR /app
COPY . /app
EXPOSE 80

ENTRYPOINT ["dotnet", "websample.dll"]

分别含义

  a. 使用microsoft/aspnetcore 作为基础镜像

  b. 制定容器的工作目录

  c. 复制当前项目文件到容器的app目录下

  d. 设置容器对外暴露80端口

  e. 启动命令,执行websample.dll

预备工作:image 仓库的镜像网址

打开/etc/default/docker文件,在文件的底部加上一行。

DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"

然后重启Docker 服务

sudo service docker restart

具体步骤

构建镜像

进入文件目录,执行命令:
docker build -t websample:latest . #后边的点是需要的
docker image ls # 查看是否有刚刚构建好的镜像

运行当前镜像,8000是宿主端口,80是镜像暴露端口

镜像创建完成之后,我们就可以通过镜像创建对应的运行容器了, 执行如下命令:
docker run -it -d -p 8000:80 websample:latest # -d 以后台方式启动

查看镜像效果

访问 127.0.0.1:8000

常用命令汇总

1. docker pull: 从仓库中拖镜像
2. docker run:运行容器,如果当前要运行的容器对应镜像不存在,会自动拉取。例如:docker run hello-world
    docker run -it -p 5000:5000 [image-name][:tag] bash # 生成容器,-it 进入容器内,bash 表示进入后使用的命令 不加则无法使用命令行,-p 将宿主机的端口映射到容器内的端口
    docker run -d -p 5000:5000 [image-name] # -d 后台方式生成容器
3.docker stop:停止容器运行
4.docker start:开始容器运行
5.docker commit:提交容器到镜像
6.docker images: 查看当前有的镜像
    docker image ls # 列出所有镜像
7.docker ps:查看当前启动的容器
    docker  ps -a # 列出所有容器,包括停止的
8. docker build : 创建镜像
    docker build -t [image-name][:tag] . # 构建镜像,注意最后有个点表示Dockerfile所在的路径, -t 指定名称和标签
9. docker load : 加载镜像
10.docker exec -it [containerid] bash # 进入一个容器中,这种方式进入容器,输入exit可以安全退出
11.docker login -u username [registry] #登陆, 在命令行中输入密码
    docker login -u username -p password [registry] # 登陆
12.docker tag [image-name] [registry][image-name]:[version] # 打标签
13.docker push [registry][image-name]:[version] # 推送镜像的仓库

多个容器间的关联

多个容器间的关联,容器内访问外部的数据

$ docker container run \
  -p 127.0.0.2:8080:80 \
  --rm \
  --name wordpress \
  --volume "$PWD/wordpress":/var/www/html \
  --link wordpressdb:mysql \
  phpwithmysql
 # 上述参数--link wordpressdb:mysql,表示 WordPress 容器要连到wordpressdb容器,冒号表示该容器的别名是mysql
 # --volume "$PWD/wordpress":/var/www/html:将容器的/var/www/html目录映射到宿主当前目录的wordpress子目录。
 # -p 127.0.0.2:8080:80:将容器的 80 端口映射到127.0.0.2的8080端口。

多个容器间联动–Docker Compose

可以管理多个 Docker 容器组成一个应用。
定义一个 配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。

# 查看安装版本
$ docker-compose --version
docker-compose.yml 内容:
mysql:
    image: mysql:5.7
    environment:
     - MYSQL_ROOT_PASSWORD=123456
     - MYSQL_DATABASE=wordpress
web:
    image: wordpress
    links:
     - mysql
    environment:
     - WORDPRESS_DB_PASSWORD=123456
    ports:
     - "127.0.0.3:8080:80"
    working_dir: /var/www/html
    volumes:
     - wordpress:/var/www/html
# 启动所有服务
$ docker-compose up
# 关闭所有服务
$ docker-compose stop

浏览器访问 http://127.0.0.3:8080

应用场景

作为云主机使用(多租户资源隔离)
作为服务使用: Web应用服务、持续集成和持续部署、微服务架构使用

随便参考下

浅析Docker容器的应用场景

八个Docker的真实应用场景

https://www.cnblogs.com/osscoder/p/6553733.html

https://www.jianshu.com/p/80c027dccb0c

https://blog.csdn.net/aa1215018028/article/details/80709335

Kubernetes(k8s)

是什么能干什么

可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

自动化容器的部署和复制
随时扩展或收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易地升级应用程序容器的新版本
提供容器弹性,如果容器失效就替换它,等等…

真正的生产型应用会涉及多个容器。这些容器必须跨多个服务器主机进行部署。容器安全性需要多层部署,因此可能会比较复杂。但 Kubernetes 有助于解决这一问题。Kubernetes 可以提供所需的编排和管理功能,以便您针对这些工作负载大规模部署容器。借助 Kubernetes 编排功能,您可以构建跨多个容器的应用服务、跨集群调度、扩展这些容器,并长期持续管理这些容器的健康状况。有了 Kubernetes,您便可切实采取一些措施来提高 IT 安全性。

Kubernetes 还需要与联网、存储、安全性、遥测和其他服务整合,以提供全面的容器基础架构。

# 使用Kubernetes只需一个部署文件,使用一条命令就可以部署多层容器(前端,后台等)的完整集群;kubectl是和Kubernetes API交互的命令行程序
$ kubectl create -f single-config-file.yaml

一些概念

主机(Master): 用于控制 Kubernetes 节点的计算机。所有任务分配都来自于此。

节点(Node):负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。

容器集(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样,您就能更加轻松地在集群中移动容器。

复制控制器(Replication controller):用于控制应在集群某处运行的完全相同的容器集副本数量。

服务(Service):将工作内容与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集——无论这个容器集会移到集群中的哪个位置,甚至可以被替换掉。

Kubelet:运行在节点上的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。

kubectl: Kubernetes 的命令行配置工具。

参考

Kubernetes是什么?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值