MaxCloud User Docs
演示登录
  • Welcome
    • 介绍
    • 快速开始
  • 使用说明
    • 集群管理
      • 导入集群
      • 创建集群
      • 关联授权
      • 集群功能
    • 项目管理
      • 事件订阅
    • 应用管理
      • 创建应用
      • 灰度发布
      • 持续集成
  • 客户端工具
    • kubemax
    • kubectl
    • 自定义客户端
  • MrMax
    • MrMax客户端使用指南
    • Cybercore
    • SDK Release Version
  • 开发者指南
    • MaxLang语言基础
    • MaxLang内置方法
    • MaxLang操作资源示例
  • 社区活动
    • 技术交流
      • 2023/05/28 亚马逊云科技 Community Day 深圳站
    • 技术文章
      • 2023.5 记一次EKS 1.22->1.26 升级
      • 2023.8 创建EKS后要关注的几个事情
    • Kubernetes Workshop
      • 基础篇
        • Docker学习环境
        • 开始使用Docker
        • 开始使用Kubernetes
      • 实战篇
        • Pod:运行于Kubernetes中的容器
        • ReplicationController:部署托管的pods
        • Service:让客户端发现pod并与之通信
        • Volumes:给containers挂载磁盘
        • ConfigMap和Secret:配置应用程序
        • Deployment: 声明式地升级应用
        • StatefulSet:部署有状态的多副本应用
      • 实践篇
        • Helm Charts(上)
          • 什么是Helm和Chart?
          • 使用Helm
        • Helm Charts(中)
          • 创建自己的chart
          • Chart模版构造和语法
          • 使用仓库管理chart
        • Helm Charts(下)
          • 一个实际的项目
          • 最后,Helm不是必须的
        • 持续集成(Gitops)
由 GitBook 提供支持
在本页
  • 运行Hello World容器
  • 创建一个简单应用
  • 构建与运行你的第一个应用
  • 探索运行容器的内部
  • 练习常用的操作
  • 规范镜像和仓库的管理
  • 思考题

这有帮助吗?

  1. 社区活动
  2. Kubernetes Workshop
  3. 基础篇

开始使用Docker

上一页Docker学习环境下一页开始使用Kubernetes

最后更新于2年前

这有帮助吗?

运行Hello World容器

在学习环境的终端中,运行现成的hello world容器

docker run --rm busybox echo "Hello world" 

--rm 可以让容器随着我们使用完毕会自动删除

# docker方式运行容器最简单语法
docker run <image>:<tag>

第一次运行时,会自动拉取最新的镜像,后面会解释更多

本小节都是在终端环境中操作的

创建一个简单应用

一个简单的http服务代码,nodejs语法

const http = require('http');
const os = require('os');

console.log("Kubia server starting...");

var handler = function(request, response) {
  console.log("Received request from " + request.connection.remoteAddress);
  response.writeHead(200);
  response.end("You've hit " + os.hostname() + "\n");
};

var www = http.createServer(handler);
www.listen(8080);

如果你本地有node环境,可以运行测试一下

# vi app.js 把代码保存
node app.js

上述的node命令在自己电脑里可以使用下面的脚本安装

(后面不会再用到了,跳过这个运行测试也是可以的,对node熟悉的同学可以尝试下)

# 安装node环境
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

nvm install node

在另外一个控制台 curl

$ curl http://localhost:8080/                                                                                                                                                130 ↵
You've hit *这里显示你的机器名*

构建与运行你的第一个应用

这个Dockerfile可以打包构建应用,用vi把这段脚本保存到文件Dockerfile

FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]

在同一目录运行,注意目录,其中kubia是应用名字

docker build -t <kubia可以起个名字> .

如图片所示准备好Dockerfile和app.js文件,并处于同一个目录中,就可以运行docker build了

很快就完成了,list一下做好的容器镜像看看

如果大家共用一个docker环境,需要避免名字冲突,如镜像名字、容器名字

运行一下刚做好的容器镜像

docker run --name kubia-container -p 8080:8080 -d kubia

如果不想制作可以使用课程已经制作好的镜像,对比一下

docker run --rm --name kubia-container -p 8080:8080 -d luksa/kubia

注意这里可以前面提到的 --rm ,临时做实验销毁比较方便,后面使用--rm时不再赘述了

访问一下8080试试吧

探索运行容器的内部

容器有他内部的环境,进去看看

$ docker exec -it kubia-container bash
root@0eac0abefd5a:/#

登陆进了容器的bash环境,当然我们的node环境集成了bash环境,挨个运行以下日志,看看进程和目录

ps aux
ps aux | grep app.js
ls /

可以知道容器就是把应用完整的环境封装起来运行了,和外部环境是独立的

control + d 可以从容器shell里退出来

练习常用的操作

临时停止容器

docker stop kubia-container

不用了销毁容器

docker rm kubia-container

规范镜像和仓库的管理

可以为我们的镜像打tag,并推送到仓库,如代码一样

docker tag kubia luksa/kubia
docker push luksa/kubia

这里课件已经推送好了,后续大家可以直接使用,不用二遍事了:)

最后,我们可以清理下docker环境了,课上不再用到了

思考题

  • 请问docker构建镜像时那个文件叫什么名字?(扩展,可以换名字么?)

  • busybox这个镜像是做什么用的?

  • 临时测试一个容器,用完自动销毁使用什么参数?