前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【k8s学习笔记一】容器及Docker基础

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

原创
作者头像
fankhu
修改2023-07-12 14:12:07
9770
修改2023-07-12 14:12:07
举报

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测试

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 概述
  • 2 容器 VS虚拟机
  • 3 基本概念
    • 3.1 镜像
      • 3.2 容器
        • 3.3 仓库
        • 4 安装
        • 5 使用镜像
          • 5.1 拉取
            • 5.2 运行
              • 5.3 ls镜像
                • 5.4 删除本地镜像
                  • 5.5 commit镜像
                  • 6 Dockerfile
                    • 6.1 建一个dockerfile
                    • 6.2 构建镜像
                    • 6.3 Dockerfile指令介绍
                    • 7 操作容器
                    • 八 访问仓库
                      • 九 数据管理
                      • 十 使用网络
                      相关产品与服务
                      容器服务
                      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档