美文网首页Javalinux&githubJavaWeb技术
Docker从安装部署到Hello World

Docker从安装部署到Hello World

作者: 问题_解决_分享_讨论_最优 | 来源:发表于2020-01-23 03:39 被阅读0次

    Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    认识Docker

    Docker自2013年以来非常火热,无论是从 github上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。

    1.0 Docker 架构

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

    Docker从安装部署到Hello World 1.PNG

    1.1 Docker 特性

    由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。

    • 构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为copy on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
    • PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础
    • 因为其标准化构建方法(buildfile)和良好的REST API,自动化测试和持续集成/部署能够很好的集成进来
    • 因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源

    1.2 Docker 应用场景

    • Automating the packaging and deployment of applications(使应用的打包与部署自动化)
    • Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
    • Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
    • Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

    1.3 Docker到底是什么?

    来举个简单的例子。docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后一个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。

    v安装Docker

    2.0 版本检测

    正如上文所说,Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

    通过 uname -r命令查看你当前的内核版本

    Docker从安装部署到Hello World

    2.1 安装docker

    Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令:yum -y install docker

    Docker从安装部署到Hello World

    2.2 启动docker服务

    通过 service docker startsystemctl start docker均无法启动docker。错误信息: Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.。如下图:

    Docker从安装部署到Hello World

    于是在网上找各种类似错误,试过关闭防火墙,关闭selinux,重装系统,等等网上能查到的方法都解决不了。

    在docker里禁用selinux( vim /etc/sysconfig/docker), –selinux-enabled=false,重启启动服务解决问题。

    Docker从安装部署到Hello World

    更新后的完整配置: OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'

    Docker从安装部署到Hello World

    2.3 测试运行 hello-world

    docker run hello-world

    但是在运行:docker run hello-world的时候报错:

    container_linux.go:235: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\""
    /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\"".
    

    解决:主要原因还是centos系统版本兼容性问题,如果将系统做更新升级,即可解决。

    yum update

    Docker从安装部署到Hello World

    此时重新运行 docker run hello-world,结果如下:

    Docker从安装部署到Hello World

    2.4 修改镜像源

    docker默认的源为国外官方源,下载速度较慢,可改为国内。

    # vi /etc/docker/daemon.json
    {
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
    service docker restart
    

    国内的阿里和网易等都可以,或者直接使用官方->国内的。

    2.5 设置docker开机自动启动

    systemctl enable docker

    Docker从安装部署到Hello World

    docker已经成功启动,至此,docker已经安装完毕。

    v探索Hello World

    3.0 docker hello world

    可以使用docker run 命令来在容器内运行一个应用程序,比如输出Hello World。

    docker run centos /bin/echo "Hello World"

    Docker从安装部署到Hello World

    参数解析:

    • docker: Docker 的二进制执行文件。
    • run:与前面的 docker 组合来运行一个容器。
    • centos:指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
    • /bin/echo "Hello world": 在启动的容器里执行的命令

    以上命令完整的意思可以解释为:Docker 以 centos镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

    3.1 运行交互式的容器

    我们通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力 docker run -i -t centos /bin/bash

    参数解析:

    • -t:在新容器内指定一个伪终端或终端。
    • -i:允许你对容器内的标准输入 (STDIN) 进行交互。

    此时我们已进入一个centos系统的容器.我们尝试在容器中运行命令cat /proc/versionls分别查看当前系统的版本信息和当前目录下的文件列表

    Docker从安装部署到Hello World

    我们可以通过运行exit命令或者使用CTRL+D来退出容器。

    3.2 启动容器(后台模式)

    使用 docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"命令创建一个以进程方式运行的容器

    Docker从安装部署到Hello World

    a2274d84c6e8025623a17d1262f1a65dfaa9ce982de94d2301f4c0fff049ed7e这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。

    我们需要确认容器有在运行,可以通过 docker ps来查看

    Docker从安装部署到Hello World

    CONTAINER ID:容器ID; NAMES:自动分配的容器名称

    在容器内使用docker logs命令,查看容器内的标准输出 docker logs a2274d84c6e8

    Docker从安装部署到Hello World

    3.3 停止容器

    我们使用 docker stop命令来停止容器

    Docker从安装部署到Hello World

    至此,docker hello world就完毕了。

    相关文章

      网友评论

        本文标题:Docker从安装部署到Hello World

        本文链接:https://www.haomeiwen.com/subject/heuvactx.html