文章

docker及k8s入门

docker三个概念

1、镜像:打包项目带上环境,即镜像

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。

Dockerfile(自动化脚本)

被用来创建镜像文件

2、容器:镜像创建的运行实例,Docker利用容器来运行应用

容器是镜像运行时的实体;每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。(运行容器就类似于使用镜像文件安装操作系统)

3、仓库:存放镜像(文件)的地方,分为共有仓库和私有仓库

Docker Hub:国外的 阿里云:配置镜像加速

docker遵循一个服务一个容器

当一个容器搭载多个服务的时候,当有一个服务挂了,docker侦测不到,你必须自己做健康状态检查;一个服务一个容器不存在这些问题,docker能感知到服务状态,死了自己会重启。

K8s集群概念

所有节点连同控制平面(Control Plane)一起被称作一个Cluster/集群

  • node:一个节点包含多个Pod
  • Pod:一组容器集合,可以把一个Pod理解为一台主机;Pod中的容器共享相同的数据和网络地址空间

一个pod下的所有容器共享相同的主机名和网络接口

同一pod下的容器需要注意不能绑定到相同的端口号,否则会导致端口冲突。

每个pod都有自己的IP,每个pod都可以通过其他pod的IP地址实现相互访问。

镜像操作

  • docker hub 官方镜像仓库
  • registry 官方镜像

下载镜像

1
docker pull <your-hub-url>/<image-name>:<版本号>

例:从官方镜下载镜像到本地

1
dcoker pull ubuntu:20.4   //没有给出完整地址

注:没有给出Docker镜像仓库地址,则会从Docker Hub(docker.io)中下载镜像

列出镜像

1
docker image ls

列表包含 仓库名(镜像名)、标签、镜像ID(唯一标识)、创建时间、所占用空间

删除镜像

1
docker image rm <镜像ID前三位数字>

Dockerfile

注:Dockerfile 中每一个指令都会建立一层。

特殊镜像

scratch

这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。

如果以 scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。

制作镜像

1
2
FROM   nginx    //指定基础镜像;必须
RUN  echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html  //用来执行命令行命令

构建镜像

Dockerfile 文件所在目录执行:

1
docker build [选项] ./<上下文路径/URL/->

例:

1
docker build -t nginx:v3 .
  • -t:为构建的镜像起一个名字

指定了最终镜像的名称 -t nginx:v3,构建成功后,我们可以像之前运行 nginx:v2

会看到 docker build 命令最后有一个 .. 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为这个路径是在指定 Dockerfile 所在路径,这么理解其实是不准确的。如果对应上面的命令格式,你可能会发现,这是在指定 上下文路径。那么什么是上下文呢?

容器操作

运行镜像(容器)

1
docker run -it ubuntu:20.4 bash  //运行并进入容器
  • i:交互式操作
  • t:终端
  • bash:启动一个 bash 终端,允许用户进行交互
  • -d:让容器在后台运行
  • -p:将容器内部使用的网络端口随机映射到我们使用的主机上

例如运行一个nginx镜像(容器)、并命名、映射端口

1
docker run  --name webserver -d -p 80:80 nginx

顯示所有容器{包括未運行的容器}

1
docker ps -a 

进入容器

1
docker exec -it [NAMES]/[CONTAINER ID前三位數字] bash 

結束容器進程

1
docker kill [CONTAINER ID前三位數字]

刪除容器

1
docker rm  [NAMES]/[CONTAINER ID前三位數字]

啓動容器

1
docker start [CONTAINER ID前三位數字]
本文由作者按照 CC BY 4.0 进行授权