Docker架构、常用命令和示例

文章内容参考了《Docker容器实战:原理、架构与应用》。

镜像和容器

  1. 容器:运行在操作系统上的一个进程,只不过加入了对资源的隔离和限制。在Docker中,其容器技术的三大核心功能:CGroups(限定进程资源使用)、Namespace(划分不同命名空间)、UnionFS(处理分层镜像功能)。
  2. 镜像:容器中的文件系统,有Layered FS组成,并且它是只读。当容器运行时,会在镜像上加一个可读可写层。

tips:Docker的镜像最初是从官方的仓库拉去获得的,之后通过docker run即可启动一个容器运行。当需要将容器转化为镜像时,可以通过docker commit进行转化。

常用命令

docker info   # 查看基本信息
docker pull ubuntu   # 拉取镜像
docker run -i -t ubuntu /bin/bash    # -i 表示可交互容器, -t 关联到容器的stdin和stdout
docker ps -a # 查看所有容器
docker images  # 列出所有镜像
docker logs  # 日志
docker stop/start/restart/kill  

架构

采用C/S架构,Client与Daemon进行交互,Daemon负责拉取镜像、编译镜像、运行和发布容器。二者可以运行在同一个系统上,也可以通过远程方式进行访问,它们是在Socket上通过RESTful API进行交互。

  1. Daemon
  2. Client
    用户访问docker的渠道,通过它对Daemon进行访问控制。
  3. Image
    只读的模板,它用来创建容器。每个Image包含多个层,使用Union File System来将这些层组合层一个Image。其可以将文件和目录进行透明的层叠组装,然后形成一个单独的文件系统。它是一种增量式修改(执行一条命令、添加文件或文件夹、创建环境变量、指定启动时运行参数等),如更新程序救护新建一个层。
  4. Registry
    存放Image的仓库,可以使用公有或私有的Registry来进行上传和下载。公共的位于Docker Hub。
  5. Container
    包含应用程序运行所需要的所有环境,源于一个Image,其可以启动和停止等,每个容器都是完全隔离和安全的。一个容器有操作系统、用户文件和元数据构成,当容器运行时会在Union FS的顶层增加文件层。

主要技术

  1. Namespaces
    • PID Nam espace:进程的隔离
    • NET Namespace:网络接口
    • IPC Namespace:进程间通信
    • MNT Namespace:Mount点
    • UTS Namespace:隔离内核和版本信息
  2. Control Groups:限制容器使用的硬件资源,如内存、CPU等
  3. Union File Sytsem:对文件系统进行分层,包括AUFS、Btrfs、VFS、DevicemapperFS等

在容器中运行web应用

docker pull tplatform/apache-php:latest   # 拉取镜像
docker run -d -p 80:80 tplatform/apache-php:latest  # -d 表示后台运行, -p 指定主机和容器和端口映射
docker ps # 查看当前运行容器
# 修改页面内容
docker exec -it 618756bf2040 /bin/bash   # 在指定的容器内运行命令
# 持久化容器
docker commit 618756bf2040 my-apache-php   # 提交容器的更改

搜索和Push

docker search mysql  # 搜索
# 需要先tag镜像,然后在push
docker tag --help
Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

根据dockerfile编译镜像

vim ~/myimage/Dockerfile
FROM ubuntu:latest 
MAINTAINER XXX XX
CMD echo "hello, world"  
# 编译
docker build .
docker run <image id>
docker rmi -f <image id>  # -f表示强制删除 

docker run格式

docker run --help
Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  1. 前后台运行-d和-it
  2. 容器的标识:–name属性在创建容器时指定名字
  3. PID设置
    docker run -it --pid=host ubuntu /bin/bash   # 共享主机的PID Namespace,否则pid从1开始
        PID TTY          TIME CMD   # ps -ef 查看
      11776 pts/0    00:00:00 sudo
      11777 pts/0    00:00:00 docker
      11826 pts/0    00:00:00 bash
      11877 pts/0    00:00:00 ps
    
  4. UTS设置
    --uts # 可以使容器与主机使用相同的hostname和domain
    
  5. IPC设置
    --ipc # 进程间通信的支持,可以和主机共享
    
  6. 网络设置
    --dns=[]   # 设置dns
    --net="bridge"  # 默认,容器通过veth连接到主机的桥接上
    none  # 不使用网络
    host #与主机相同的网络
    container:<name:id> # 使用其他容器的网络
    network # 用户自定义的网络,使用docker network create创建
    --net-alias=[] # 网络别名
    --add-host="" # 添加ip到host的解析规则
    --mac-address=""
    --ip==""
    --ip6=""
    
  7. 重启策略
    --restart # 指定容器退出后的行为,当重启时可以使用docker ps或docker events查看相关信息
    No # 没有任何重启操作,默认
    On-failure # 有错重启
    Always # 无论处于什么状态都重启,回在deamon启动时,附带自启动
    Unless-stoopped  # 不会随daemon启动
    

    CGroups控制

    1. 用户态内存控制
    2. 内核态内存控制
    3. CPU控制
    4. 磁盘IO控制
    5. 设备读写速率控制
    6. 内存耗尽时的行为

特权模式和Capabilities

--privileged
--cap-add
--cap-drop
--device # 希望使用某个设备

日志驱动

--log-driver=VALUE

Image默认参数

  1. CMD:默认命令或属性
  2. ENTRYPOINT:默认执行的命令
  3. EXPOSE:导出的端口
  4. ENV:环境变量
  5. VOLUME:卷挂载
  6. USER
  7. WORKDIR
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值