最近在学习kubernetes, 阅读了《Kubernetes 实战》,本文主要介绍docker的简单使用,如果本文对您有帮助,请不要吝啬您的点赞,谢谢~
Docker hello world
- 首先安装docker
- 然后运行
docker run busybox echo "Hello world"
会出现:
- 背后原理
- Docker支持同一个镜像多个版本,每一个版本必须有唯一的tag名,当引用镜像没有显示地制定tag时,默认为latest,如果想要运行别的版本的镜像:
docker run <image>:<tag>
docker 创建一个简单的node.js应用
- 新建文件夹
firstTest
,在里面创建app.js 文件:
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);
- 创建Dockerfile
- 指定使用node镜像的tag 7版本
- 把本地的app.js文件添加到镜像的根目录,
- 最后指定当镜像背运行时需要被执行的命令
node app.js
FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]
- 构建容器镜像
docker build -t kubia .
- 基于当前目录,构建一个叫做kubia的镜像
- 基于当前目录,构建一个叫做kubia的镜像
- docker镜像是分层的
- 构建镜像时,Dockerfile中每一条单独的指令都会创建一个新层
- 查看本地的镜像
docker images
- 运行容器镜像
docker run --name kubia-container -p 8080:8080 -d kubia
- 基于kubia镜像创建一个叫kubia-container的新容器,-d意味着在后台运行,本机的8080端口和容器内的8080端口映射,所以可以通过http:localhost:8080可以访问容器内的应用
- 访问:
curl localhost:8080
, 可以看见这是容器的id - 利用
docker ps
可以查看正在运行中的容器, - 利用
docker inspect kubia-container
可以看见容器的底层信息
探索运行容器的内部
docker exec -it kubia-container bash
- 会在容器内部运行bash,bash进行会和主容器进程拥有相同的命名空间
- -it
- -i 确保标准输入流保持开放,需要在shell中输入命令
- -t 分配一个伪终端 TTY
- 开始探索
ps aux
查看容器内运行的进程exit
退出容器
停止和删除容器
docker stop kubia-container
停止容器docker ps -a
打印所有的容器docker rm kubia-container
真正删除一个容器
向镜像仓库推送镜像
- 先去
https://hub.docker.com/
注册一个账号,需要自己的邮箱 - 然后本地运行
docker login
, 需要输入用户名密码,然后登陆成功 - 给同一个镜像创建一个额外的标签
docker tag kubia xj/kubia
- 向docker hub推送镜像
docker push xj/kubia
- 如果出现denied,请重命名一个名称,可能被占用