【k8s学习笔记一】容器及Docker基础

2023-07-12 14:12:07 浏览数 (1)

1 概述

Go语言实现,基于linux内核的cgroup/namespace/AUFS类的Union FS等技术,

对进程进行隔离封装,属于操作系统层面的虚拟化技术

2 容器 VS虚拟机

和传统虚拟化不同,传统虚拟化是虚拟出一整套硬件,在其上运营一个完成的OS,

在该OS上再运行应用进程;而容器的应用进程直接运行在宿主的内核,没有自己的内核,也没有硬件虚拟,比传统虚拟机更轻便。

3 基本概念

  • 镜像 Image
  • 容器 Containe
  • 仓库 Repository
3.1 镜像

Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库资源配置及一些运行时

需要的参数(环境变量、用户、匿名卷等)。镜像不包含动态数据,构建后不会改变。

3.1.1 分层存储
代码语言:txt复制
镜像会分层构建,每一层构建完就固定不变了,需要变更时需在当前层基础上要新建一层。
3.2 容器

容器container时镜像运行时的实体,可以被创建、启动、停机、删除、暂停。容器的实质是进程。传统进程直接在宿主执行,容器运行在自己独立的命名空间。

3.3 仓库

docker registry 是一个集中存储、分发镜像的服务,一个registry中包含多个仓库repository;每个repository包含多个标签tag,一个tag对应一个镜像。

一个仓库一般包含同一个软件不同版本的镜像,使用<仓库命>:<标签>来指定某个版本,如ubuntu:14.4

registry 注册服务器,是管理仓库的具体服务器

repository 仓库

4 安装

代码语言:txt复制
yum install -y yum-utils 

           device-mapper-persistent-data 

           lvm2

yum-config-manager 

               --add-repo 

               https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

yum install docker-ce



systemctl enable docke

systemctl start docke

groupadd docke

usermod -aG docker $USER

参考 https://yeasy.gitbooks.io/docker_practice/content/install/centos.html

5 使用镜像

5.1 拉取

docker pull [option] [docer registry add[:port]/repository name[:tag]

如 docker pull ubuntu:18.04

5.2 运行
代码语言:javascript复制
  docker run -it --rm 
   ubuntu:18.04 
   bash

说明

代码语言:javascript复制
  -it   -i 交互式操作
    -t 终端
  --rm 容器退出后删除
  ubuntu:18.08  指定镜像
  bash  镜像后的命令
5.3 ls镜像

docker image ls

5.4 删除本地镜像

docker image rm option <镜像1><镜像2>...

5.5 commit镜像
代码语言:txt复制
  先建立一个nginx测试镜像

  docker run --name websvr -d -p 80:80 nginx

  启动bash修改文件

  docer exec -it websvr bash

  修改index.html启动页内容

   cat /usr/share/nginx/html/index.html (先查看后覆盖))

   echo '<h1>hello fank docker</h1>' > /usr/share/nginx/html/index.html

   exit

   刷新localhost查看index发生了变化,此时容器的文件已被修改



  执行commit 保存镜像

    docker commit --author 'fank' --message 'modify index.html' websvr nginx:v2

  查看

    docker image ls

  diff 检查镜像变动情况

    docker  diff websv

  关闭

    docker container ls -a

    docker container rm -f websv

5.6 查看帮助

代码语言:javascript复制
docker COMMAND --help
如 docker run --help

注意 实际环境中应该慎用 docker commit,频繁使用commit会使镜像越来越臃肿,而应该使用dockerfile定制镜像。

6 Dockerfile

dockerfile是一个脚本,用来构建镜像,将构建镜像需要的修改、安装、构建、操作命令记录在一个文件中。

6.1 建一个dockerfile

注意 在空目录中建立

代码语言:javascript复制
   mddir mynignx
   cd myninx && touch Dockerfile
   vi dockerfile
   FROM nginx
   RUN echo "<h1>hello docker</h1>" > /usr/share/nginx/html/index.html
   COPY ./package.sjon /app/
   其中, FROM用于指定基础镜像,RUN执行命令
#执行多个命令的正确写法
   FROM ubuntu:18:08
   RUN  echo "hahah">/tmp/echo
  && cd /pacakage/ningx
  && make
  && make install

6.2 构建镜像

代码语言:javascript复制
docker build -t nginx:v3 .
-t 指定名称
. 指定上下文路径为.

6.3 Dockerfile指令介绍

代码语言:javascript复制
#COPY
   COPY <原路径> <目标路径>
#ADD
 ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
 ADD和copy功能类似,当需要进行自动解压缩时再使用ADD
代码语言:javascript复制
#CMD 两种格式
 shell格式 CMD echo $HOME
 exec格式  CMD ["sh","-c","echo $HOME"]
 注: docker不是虚拟机,所有在容器内执行的命令都是前台执行
代码语言:javascript复制
ENTRYPOINT
  入口点,让镜像变成像命令一样使用
  示例:定义一个dockerfile
  FROM ubuntu:18.04
  RUN apt-get update 
    && apt-get install -y curl 
    && rm -rf /var/lib/apt/lists/*
  ENTRYPOINT ["culr","-s","https://ip.cn"]
  使用ENTRYPOINT后,
  docker build -t myip .
  docker run myip -i  则-i 可作为参数传给 ENTRYPOINT后的命令
代码语言:javascript复制
#ENV  设置环境变量
定义变量 ENB VERSION=1.0 NAME="happy tom"
使用该变量
  RUN grep "$NAME" test.txt
ARG 设置构建参数,将来容器运行时不保存,而ENV在容器运行时仍存在
WORKDIR 指定工作目录
USER 指定当前用户
HEALTHCHECK
ONBUILD
 ONBUILD <其他指令> 只有当前镜像作为基础镜像构建新镜像时才会执行
 

7 操作容器

启动

代码语言:javascript复制
  docker run -it ubuntu:18.04 /bin/sh
  -d 后台运行 ,通过 docker container logs [ container ID or names] 查看后台运行的输出

终止

代码语言:javascript复制
docker container stop  ID
先查看容器,
docker container ls -a ,选择对应的container ID终止
docker container stop a87313f6956b
启动终止的容器:docker container start

进入容器

代码语言:txt复制
 exec 或attach
 docker run -dit 如ubuntu
 docker container ls
 docker exec -i 69d1 bash
 docker exec -it 69d1 bash 会有命令提示符

导出导入容器 export import

代码语言:txt复制
docker export [container id] >ubuntu.tar  导出快照
cat ubuntun.tar|docker import -test/ubuntu:v1.0
docker import http://xxx  从指定url导入为镜像
从容器快照中导入为镜像

删除容器

代码语言:javascript复制
   先stop后才能删除
   docker container rm container name
   docker container prune  批量删掉所有终止状态的容器

八 访问仓库

代码语言:txt复制
https://hub.docker.com  注册登陆
#搜索镜像
docker search centos
#推送镜像
打标签
docker tag ubuntu:18.04 username/ubuntu:18.04
docker push username/ubuntu:18.04
# 创建私有仓库,上传的镜像会存到本地
docker run -d -p 5000:5000 --restart=always --name registry registry
如要使用内网其他机器作为registry,可以在/etc/docker/daemon.json中增加:
insecure-registries": [
"10.168.189.10:5000"
 ]
九 数据管理
9.1 数据卷

数据卷是一个可供一个多个容器使用的特殊目录,可在容器见共享,对数据卷的修改会立即生效,且数据卷 的更新不影响ijngx,容器与数据卷独立,删除了容器数据卷仍在。

创建数据卷

代码语言:javascript复制
  docker volume create my-vol

查看数据卷

代码语言:javascript复制
  docker volume ls

查看指定数据卷信息

代码语言:javascript复制
  docker volume inspect my-vol

启动一个挂载数据卷的容器 --mount

代码语言:javascript复制
  docker run -it -d --name ubt_test 
 --mount source=/data/home/docker/voltest/,target=/data/home/vtest
 ubuntu:18.04

source为宿主机的绝对路径,target为容器内的路径

验证:

docker exec -it ubt_test bash

进入/data/home/vtest可以查到挂载的目录文件

十 使用网络

10.1 端口映射

#外部访问容器

绑定地址的端口

docker run --name websvr -d -p 80:80 nginx 第一个80是宿主机的端口,第二个80是容器端口

绑定指定地址的端口

代码语言:javascript复制
  docker run -d -p 127.0.0.1:5000:5000
  docker run -d -p 8080:8080  可使用多个-p
            -p 80:80

10.2端口互联

通过docker网络来连接

新建网络

docker network create -d bridge my-net

连接容器,让2个容器加入一个网络

代码语言:javascript复制
docker run -it --rm --name t1 --network my-net busybox sh
docker run -it --rm --name t2 --netword my-net busybox sh

Compose是官方编排(Orchestration)项目之一,负责快速部署分布式应用。

11.1 术语

代码语言:txt复制
服务 service :一个应用容器,可以运行多个相同镜像的实例
代码语言:txt复制
项目 project :一组关联的应用容器组成的一个完整业务单元
代码语言:javascript复制
安装
curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod  x /usr/local/bin/docker-compose
bash命令补全
curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
命令
 dokcer-compose [-f=<arg>] [options] [COMMAND] [ARGS ...]
 -f ,--file File  指定模板文件
 -p ,--project-name NAME 指定项目名称

摘录自 https://yeasy.gitbooks.io/docker_practice/content/basic_concept/image.html

centos安装virtualbox的办法:https://wiki.centos.org/zh/HowTos/Virtualization/VirtualBox

k8s学习笔记合集:

【k8s学习笔记一】容器及Docker基础

【k8s学习笔记二】腾讯云harbor私有仓库部署实践

【k8s学习笔记三】kubernetes本地环境部署测试

【k8s学习笔记四】kubernetes ingress测试

0 人点赞