概述
起源
2013 年由 DotCloud 公司开源出来的容器管理工具
DotCloud 公司是一家 PAAS 服务提供商,从 docker 的出身也可以看出它的主要功能和方向
技术原理
开始时是基于 LXC 容器技术
cgroup: 将任意进程进行分组化管理,同时还可以控制进程的资源占用(CPU, 内存等等)情况
namespace: 让每个进程组有独立的 PID, IPC 和网络空间
解决的痛点
打包部署
运行环境标准化
更加高效的利用物理机
docker 基本命令
容器的一个标准的生命周期包括:创建,启动,停止,终止和移除
docker pull busybox # 远程下载 images
docker run -it –rm –name busybox busybox # 创建容器,名称为 busybox
docker stop/kill busybox # 停止/强行停止 容器
docker start/restart busybox # 启动/重新启动 容器
docker rm busybox # 移除容器
常用命令
docker exec 可以运行 容器中的命令
docker cp 可以在主机和容器之间复制文件
docker inspect 查看容器的详细信息,也可以查看镜像详细信息
docker stats 容器的资源占用信息
docker events 返回 docker 主机上发生的所有 docker 事件流
docker logs 监控容器的日志
docker top 查看容器内运行的进程
docker 使用示例(busybox)
docker 容器是完全隔离的运行环境,但实际使用中,难免需要和外部或者 docker 容器进行交互。
比较常用的交互主要有 环境变量,磁盘,网络
环境变量
docker run -it --rm -e MY_NAME=wangyubin busybox env
外部的环境变量可以在容器启动的时候注入到容器中
磁盘
容器会共享镜像中的内容,容器自己的状态才会保存在磁盘上。
docker volume ls # 查看所有容器占用的磁盘名称 docker volume inspect VOL_NAME # 查看具体的磁盘信息
容器中的文件,不会改变 image
在一个容器中创建文件(test.txt)
$ docker run -it --rm busybox / # touch test.txt / # ls bin etc proc sys tmp var dev home root test.txt usr
重新启动的容器中是不包含这个文件的
$ docker run -it --rm busybox / # ls bin dev etc home proc root sys tmp usr var
容器挂载外部的文件系统
如果希望容器之间共享文件,或者将文件放在容器之外来管理,可采用如下方式 容器启动时挂载外部文件夹
docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox cd share-dir touch test.txt
另一个容器也挂载这个文件夹
docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox / # ls share-dir test.txt
网络
容器中的服务默认只有当前容器可以访问,容器的宿主和其他容器都是无法访问的。
通过暴露端口,让宿主可以访问容器内服务
通过 nc 命令模拟一个服务
$ docker run -it -p 1234:1234 --rm busybox / # nc -l -p 1234
在宿主机上可以通过 docker ps 命令看到暴露的端口
docker ps nc localhost 1234 # 连接上本地的 1234 端口,就可以和 docker 容器互发消息
容器创建在同一网络上
创建容器运行的网络,然后将 2 个容器启动到同一个网络上
$ docker network create test a85b5589234b701b1237a364f7796b47e2d1ba4506740767c581a3d62d9e8f48 $ docker network ls NETWORK ID NAME DRIVER SCOPE a85b5589234b test bridge local ... ...
启动第一个 docker,name 为 test01,并在容器中用 nc 命令模拟一个服务
$ docker run -it --rm --name test01 --network test busybox / # nc -l -p 1234
启动第二个 docker,name 为 test02,和 test01 在同一个网络上
$ docker run -it --rm --name test02 --network test busybox / # nc test01 1234 hello
由于在同一个网络上,可以通过 test01 这个名称直接连接另一个容器
启动第三个 docker,name 为 test03,使用默认的网络
$ docker run -it --rm --name test03 busybox / # nc test01 1234 nc: bad address 'test01'
由于 test03 和 test01 不在一个网络上,所以无法互通
链接:https://www.cnblogs.com/wang_yb/p/8625003.html
-
内存
+关注
关注
8文章
3034浏览量
74130 -
容器
+关注
关注
0文章
496浏览量
22074 -
Docker
+关注
关注
0文章
477浏览量
11871
原文标题:docker 使用示例(busybox)
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论