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前三位數字]