找回密码
 注册
关于网站域名变更的通知
查看: 285|回复: 1
打印 上一主题 下一主题

docker 基础

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-8-17 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
概述起源
2013 年由 DotCloud 公司开源出来的容器管理工具
1 M* y! ?- n7 e- u" j* U% E7 Q7 _DotCloud 公司是一家 PAAS 服务提供商,从 docker 的出身也可以看出它的主要功能和方向
技术原理
开始时是基于 LXC 容器技术
  • cgroup: 将任意进程进行分组化管理,同时还可以控制进程的资源占用(CPU, 内存等等)情况
  • namespace: 让每个进程组有独立的 PID, IPC 和网络空间
    / N" u4 Y- D5 `  N! o2 i( T2 O$ J1 l# S
解决的痛点
  • 打包部署
  • 运行环境标准化
  • 更加高效的利用物理机+ E1 r* C0 s) g) _
docker 基本命令容器的一个标准的生命周期包括: 创建,启动,停止,终止和移除
  • docker pull busybox # 远程下载 images
  • docker run -it –rm –name busybox busybox # 创建容器,名称为 busybox
  • docker stop/kill busybox # 停止/强行停止 容器
  • docker start/restart busybox # 启动/重新启动 容器
  • docker rm busybox # 移除容器
    * P; A) N; I: I
常用命令
  • docker exec 可以运行 容器中的命令
  • docker cp 可以在主机和容器之间复制文件
  • docker inspect 查看容器的详细信息,也可以查看镜像详细信息
  • docker stats 容器的资源占用信息
  • docker events 返回 docker 主机上发生的所有 docker 事件流
  • docker logs 监控容器的日志
  • docker top 查看容器内运行的进程
    / _- K( Q* p' J/ ^' {$ I. L% b
docker 使用示例(busybox)
docker 容器是完全隔离的运行环境,但实际使用中,难免需要和外部或者 docker 容器进行交互。
7 g# y- R0 @1 T, Y8 y+ w+ p7 K比较常用的交互主要有 环境变量,磁盘,网络
环境变量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/ # lsbin       etc       proc      sys       tmp       vardev       home      root      test.txt  usr
重新启动的容器中是不包含这个文件的
$ docker run -it --rm busybox/ # lsbin   dev   etc   home  proc  root  sys   tmp   usr   var容器挂载外部的文件系统
如果希望容器之间共享文件,或者将文件放在容器之外来管理,可采用如下方式 容器启动时挂载外部文件夹
docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busyboxcd share-dirtouch test.txt
另一个容器也挂载这个文件夹
docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox/ # ls share-dirtest.txt网络
容器中的服务默认只有当前容器可以访问,容器的宿主和其他容器都是无法访问的。
通过暴露端口,让宿主可以访问容器内服务
通过 nc 命令模拟一个服务
$ docker run -it -p 1234:1234 --rm busybox/ # nc -l -p 1234
在宿主机上可以通过 docker ps 命令看到暴露的端口
docker psnc localhost 1234   # 连接上本地的 1234 端口,就可以和 docker 容器互发消息容器创建在同一网络上
创建容器运行的网络,然后将 2 个容器启动到同一个网络上
$ docker network create testa85b5589234b701b1237a364f7796b47e2d1ba4506740767c581a3d62d9e8f48$ docker network lsNETWORK ID          NAME                DRIVER              SCOPEa85b5589234b        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 1234hello
由于在同一个网络上,可以通过 test01 这个名称直接连接另一个容器
启动第三个 docker,name 为 test03,使用默认的网络
$ docker run -it --rm --name test03 busybox/ # nc test01 1234nc: bad address 'test01'
由于 test03 和 test01 不在一个网络上,所以无法互通

( C2 e/ S  o( G9 a8 w  e' s

该用户从未签到

2#
发表于 2020-8-17 15:39 | 只看该作者
docker 基础
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 00:37 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表