Py学习  »  docker

对于kubernetes(k8s)入门需要了解的docker基础

gself • 4 年前 • 170 次点击  
阅读 67

对于kubernetes(k8s)入门需要了解的docker基础

前言

本文假设读者都是开发者,并熟悉 Linux 环境,所以就不介绍基础的技术概念了。命令行环境以 Linux 示例。

内容概要

本文包括以下内容:

  1. 在 CentOS7 下安装 Docker
  2. 制作 Docker 镜像
  3. 通过 Docker 部署服务

扩展阅读

对于已经熟悉的 Docker 的朋友,推荐阅读使用 Docker + Jenkins 构建 CI/CD 环境。 阅读完这篇文章,你将可以达到以下的效果:

| 只通过一个 commit(GitHub),将应用通过 Docker 容器部署出来。

这其中包括以下操作:

  • 检出代码
  • 运行测试
  • 编译代码
  • 对代码进行 SonarQube (代码质量管理工具)分析
  • 创建 Docker 镜像
  • 推送镜像到Docker Hub
  • 拉取并运行镜像

简单地说,就是大概是神兵结合平安CaaS后台所做的事情。

正文

通过 Docker 启动一个简单的 web 应用

在 CentOS7 下安装 Docker

Docker 现在有2个版本,分别是 Docker CE 和 Docker EE。这2个版本都是由官方维护的,EE 是商业版,由官方提供认证了的OS、云平台层的技术支持,并提供 LDAP、Active Directory之类的认证(鉴权)系统技术支持以及镜像认证等安全方面的支持。 本文以 Docker CE(社区版)为例。

  1. OS 前提条件

    要安装 Docker CE,你需要一个正在维护版本的 CentOS 7。归档版本没有得到测试以及支持。

    centos-extras 仓库需要被启用。默认情况下是启用的。

    overlay2 存储驱动是推荐使用的。

  2. 删除旧版本

    旧版本的 Docker 被称为 dockerdocker-engine。如果它们有被安装,先删除它们,包括相关联的依赖组建。

    (sudo) yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
    复制代码

    如果 yum报告说没有安装这些,也是OK的。

    /var/lib/docker当中的内容包括镜像、容器、卷、网络等默认内容。Docker CE 安装包现在被称为 docker-ce

  3. 安装 Docker CE

    安装 Docker CE 通常有3中方法:

    • 大多数人使用通过包管理工具仓库。由于步骤简单并易于管理版本,官方推荐使用这种方法。
    • 有些人下载 RPM 包并手动安装,并且完全手动管理版本。在与互联网隔绝的环境,这种方法比较有用。
    • 在测试以及开发环境,有些人通过自动化脚本来安装Docker。
  4. 通过包管理工具仓库安装

    4.1 配置软件源仓库

    • 需要预先安装依赖包。yum-utils提供yum-config-manager工具,然后device-mapper-persistent-datalvm2devicemapper存储驱动依赖。
    (sudo) yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    复制代码
    • 使用下列命令配置稳定仓库源。
    (sudo) yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    复制代码

    4.2 安装 Docker CE (sudo) yum install docker-ce docker-ce-cli containerd.io 如果命令行提示说需要接受GPG key,确认fingerprint与下列相同。 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,如果相同,接受它。

    4.3 (可选项)安装指定版本的Docker CE。

    • 排序列出仓库源中的可用版本 例如:
    $ yum list docker-ce --showduplicates | sort -r
    
    docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
    docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
    docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable
    复制代码
    • 通过有效的软件包全名来安装制定版本 包的全名由2部分组成。分别是 (1)包名 (docker-ce)加上从第1个冒号(:)后开头,直到第1个连字符(-)结束的 (2)版本字符串 (第2列),中间由连字符(-)相连。例如: docker-ce-18.09.1(sudo) yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io 完成以上步骤之后,Docker已经安装,系统中创建了一个docker组,但没有用户被添加到这个组。 4.4 启动 Docker (sudo) systemctl start docker 4.5 验证 Docker CE 安装正常,通过运行hello-world镜像。 (sudo) docker run hello-world

制作 Docker 镜像

关于docker命令可以参考网友分享的docker cheat sheet(有中文版)。

  1. 搜索可用的docker镜像

    使用docker最简单的方式莫过于从现有的容器镜像开始。Docker官方网站专门有一个页面来存储所有可用的镜像,网址是: index.docker.io。你可以通过浏览这个网页来查找你想要使用的镜像,或者使用命令行的工具来检索。

    搜索镜像

  2. 拉取镜像 (sudo) docker pull <IMAGE_NAME/IMAGE_ID>

    $ docker images
    REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
    hello-world                                latest              fce289e99eb9        3 months ago        1.84kB
    kindest/node                               v1.12.2             58eadc0ca522        5 months ago        1.5GB
    k8s.gcr.io/kube-proxy-amd64                v1.11.3             be5a6e1ecfa6        7 months ago        97.8MB
    k8s.gcr.io/kube-controller-manager-amd64   v1.11.3             a710d6a92519        7 months ago        155MB
    k8s.gcr.io/kube-apiserver-amd64            v1.11.3             3de571b6587b        7 months ago        187MB
    k8s.gcr.io/kube-scheduler-amd64            v1.11.3             ca1f38854f74        7 months ago        56.8MB
    k8s.gcr.io/coredns                         1.1.3               b3b94275d97c        10 months ago       45.6MB
    k8s.gcr.io/etcd-amd64                      3.2.18              b8df3b177be2        12 months ago       219MB
    k8s.gcr.io/pause                           3.1                 da86e6ba6ca1        15 months ago       742kB
    $ docker pull busybox
    Using default tag: latest
    latest: Pulling from library/busybox
    fc1a6b909f82: Pull complete
    Digest: sha256:954e1f01e80ce09d0887ff6ea10b13a812cb01932a0781d6b0cc23f743a874fd
    Status: Downloaded newer image for
    
    
        
     busybox:latest
    $ docker images
    REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
    busybox                                    latest              af2f74c517aa        5 days ago          1.2MB
    hello-world                                latest              fce289e99eb9        3 months ago        1.84kB
    kindest/node                               v1.12.2             58eadc0ca522        5 months ago        1.5GB
    k8s.gcr.io/kube-proxy-amd64                v1.11.3             be5a6e1ecfa6        7 months ago        97.8MB
    k8s.gcr.io/kube-scheduler-amd64            v1.11.3             ca1f38854f74        7 months ago        56.8MB
    k8s.gcr.io/kube-apiserver-amd64            v1.11.3             3de571b6587b        7 months ago        187MB
    k8s.gcr.io/kube-controller-manager-amd64   v1.11.3             a710d6a92519        7 months ago        155MB
    k8s.gcr.io/coredns                         1.1.3               b3b94275d97c        10 months ago       45.6MB
    k8s.gcr.io/etcd-amd64                      3.2.18              b8df3b177be2        12 months ago       219MB
    k8s.gcr.io/pause                           3.1                 da86e6ba6ca1        15 months ago       742kB
    复制代码
  3. 制作 Docker 镜像

    语法: docker build [OPTIONS] PATH | URL | -

    docker build命令从Dockerfile和一个"上下文"制作镜像。一个build的上下文是一个特定位置下的文件的集合,这个位置可以通过PATHURL来指定。 换句话说,你可以通过git仓库指定"上下文"。

    3.1 编写 Dockerfile

    我用go语言写了一个简单的web应用。 现在我基于基础镜像busybox来制作我自己的web应用镜像,取名为"go-server-9860"。

    • 编写 Dockerfile Dockerfile可以参照此处

    3.2 创建镜像

    使用docker build命令通过指定URL来创建镜像。

    例子: docker build -t go-server-9860 https://github.com/aruruka/hello-world.git#master:docker_basis

    3.3 运行镜像

    以后台方式启动一个容器:

    docker run -d --name go-server-9860 -p 127.0.0.1:9860:9860/tcp --rm go-server

    进入一个容器并分配一个终端:

    docker exec -it go-server-9860 sh

    给一个容器发送SIGKILL信号:

    docker kill go-server-9860

访问刚刚部署的web服务

# 查看正在云从的容器:
docker ps | sed -n '1p;/go-server/Ip
# 测试端口是否在宿主机上监听
telnet 127.0.0.1 9860
# 访问服务
curl http://127.0.0.1:9860/world
复制代码
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31294
 
170 次点击