Docker学习笔记

Docker

简介

容器:最新的容器技术引入了OpenVZ,Solaris Zones以及Linux容器。使用这些新技术,容器不再仅仅是一个单纯的运行环境。更像一个完整的宿主机。

Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。由Docker公司(www.docker.com),前dotCloud公司,PaaS市场老牌提供商的团队编写,基于Apache 2.0开源授权协议发行

Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎。目的是提供一个轻量级、快速的环境,能够运行开发者的程序,并方便高效的部署。

Docker所需的全部环境只是一台仅仅安装了兼容版本的Linux内核和二进制最小限的宿主机。

特点

提供简单轻量的建模方式:上手快,依赖于写时复制模型,使修改应用程序很迅速。同一台宿主机中可以运行更多的容器

职责的逻辑分离:开发人员只关心容器中运行的应用程序,运维只关心如何管理容器

快速、高效的开发生命周期:缩短代码从开发、测试、部署、上线的周期,具备可移植性,易于构建,并易于协作

鼓励使用面向服务的架构:Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型。

Docker组件

Docker客户端和服务器

Docker客户端只需向Docker服务器或守护进程发送请求,服务器或守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具docker以及一整套RESTful API。可以在同一台宿主机上运行Docker守护进出城和客户端,也可以从本地连接到另外一台宿主机

Docker镜像

用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的构建部分。镜像是基于联合(Union)文件系统的一种层式结构,由一系列指令一步一步构建出来。

也可以把镜像当做容器源码。镜像体积小、便携、易于分析、存储、更新

Registry

Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。

公共的Registry叫做Docker Hub,可以注册账号,分享保存自己的镜像

容器

Docker可以帮你构建和部署容器,只需要把自己的应用程序或服务打包放进容器即可。

容器是基于镜像启动的,可以运行一个或多个进程。

集装箱概念 

标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计哲学中,唯一不同的是:集装箱运输货物,而Docker运输软件。

每个容器都包含一个软件镜像,也就是容器的货物,而且与真正的货物一样,容器里的软件镜像可以进行一些操作。例如,镜像可以被 :创建、启动、关闭、销毁

Docker并不关心容器中是什么,也不关心把容器运到何处

Docker能做什么

沙盒:一种安全机制,为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。

容器可以为各种测试提供很好的沙盒环境。容器本身就具有标准型的特征,非常适合为服务创建构建块。Docker的一些应用场景如下

  1. 加速本地开发和构建,使其更加高效、更加轻量化
  2. 能够让独立服务或应用程序在不同的环境中,得到相同的运行结果
  3. 用Docker创建隔离的环境来进行测试。例如Jenkins CI
  4. Docker可以让开发者先在本机上构建一个复杂的程序或架构来进行测试
  5. 构建一个多用户的平台即服务PaaS基础设施
  6. 为开发、测试提供一个轻量级的独立沙盒环境
  7. 提供软件即服务SaaS应用程序
  8. 高性能,超大规模的宿主机部署

Docker安装

https://docs.docker.com/install/

Docker守护进程

安装完Docker后,需要确认Docker的守护进程是否运行。Docker以root权限运行它的守护进程,来处理普通用户无法完成的操作。docker程序是Docker守护进程的客户端程序,也需要以root身份运行

当安装完毕后,会立即启动Docker守护进程,来监听Docker请求。

配置守护进程 

export DOCKER_ HOST=" tcp:// 0.0.0.0:2375"

Docker图形界面

Docker安装完成后,可以用图形界面来管理

DockerUI:是一个可以与Docker Remote API交互的Web界面

https://github.com/kevana/ui-for-docker

Docker入门

启动第一个容器:docker run -it ubuntu /bin/bash

 

 

 

 

 

 

 

#

Docker速查

测试是否正常安装:docker run hello-world

docker info:查看全部信息

docker version:查看版本信息

docker run:创建一个新的容器并运行一个命令

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -P: 随机端口映射,容器内部端口随机映射到主机的高端口

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb": 为容器指定一个名称;

  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • -h "mars": 指定容器的hostname;

  • -e username="ritchie": 设置环境变量;

  • --env-file=[]: 从指定文件读入环境变量;

  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

  • -m :设置容器使用内存最大值;

  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;

  • --link=[]: 添加链接到另一个容器;

  • --expose=[]: 开放一个端口或一组端口;

  • --volume , -v: 绑定一个卷

  • --rm:容器退出时就能够自动清理容器内部的文件系统

实例:

使用docker镜像nginx以后台模式启动一个容器,并将其命名mynginx

docker run --name mynginx -d nginx:latest

使用镜像nginx:latest以后台模式启动一个容器,将80端口映射到主机随机端口

docker run -p -d nginx:latest

以后台模式启动一个容器,将80端口映射到主机的80端口,目录映射到容器的目录

docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的8080端口,并将其映射到本地主机的80端口上

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用镜像nginx以交互模式启动一个容器,在容器内执行/bin/bash命令

docuer run -it nginx:latest /bin/bash

docker start:启动一个或多个已被停止的容器

docker stop:停止一个运行中的容器

docker restart:重启容器

docker kill:杀掉一个运行中的容器

docker kill $(docker ps -a -q):杀死所有正在运行的容器

docker rm $(docker ps -a -q):删除所有已停止的容器

docker rmi $(docker images -q -f dangling=true):删除所有悬挂的镜像

docker rmi $(docker images -q):删除所有镜像

docker volume prune:清除所有无用的区卷

docker rm:删除一个或多个容器

  1. -f:通过SIGKILL信号强制删除一个运行中的容器
  2. -l:移出容器间的网络连接,而非容器本身
  3. -v:删除与容器关联的卷

docker pause:暂停容器中所有的进程

docker unpause:恢复容器中所有的进程

docker create:创建一个容器但不启动它。与docker run相用法同

docker exec:在运行的容器中执行命令

  1. -d:分离模式,在后台运行
  2. -i:即使没有附加也保持STDIN打开
  3. -t:分配一个终端

实例

以交互模式运行脚本runoob.sh

docker exec -it mynginx /bin/sh /root/runoob.sh

在容器mynginx中开启一个交互模式的终端

docker exec -it mynginx /bin/bash

docker ps:列出容器

  1. -a:显示所有容器,包括未运行的
  2. -f:根据条件过滤显示的内容
  3. --format:指定返回值的模板文件
  4. -l:显示最近创建的容器
  5. -n:列出最近创建的n个容器
  6. --no-trunc:不截断输出
  7. -q:静默模式,只显示容器编号
  8. -s:显示总的文件大小

实例

列出所有运行的容器

docker ps

列出最近创建的5个容器

docker ps -n 5

列出所有创建的容器ID

docker ps -a -q

docker inspect:获取容器/镜像的元数据

  1. -f:指定返回值的模板文件
  2. -s:显示总的文件大小
  3. --type:为指定类型返回JSON

实例

获取正在运行的容器mymysql的IP

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql

docker top:查看容器中运行的进程信息,支持ps命令参数

实例

列出所有运行容器的进程信息

for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

docker attach:连接正在运行中的容器

docker events:从服务器获取实时事件

  1. -f:根据条件过滤事件
  2. --since:从指定的时间戳后显示所有事件
  3. --until:流水时间显示到指定的时间为止

docker logs:获取容器的日志

  1. -f:跟踪日志输出
  2. --since:显示某个开始时间的所有日志
  3. -t:显示时间戳
  4. --tail:仅列出最新N条容器日志

实例

跟踪查看容器mynginx的日志输出

docker logs -f mynginx

docker wait:阻塞运行直到容器停止,然后打印出它的退出代码

docker export:将文件系统作为一个tar归档文件导出到STDOUT

  1. -o:将输入内容写到文件

实例

将id为a404的容器按日期保存为tar文件

docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2

docker port:列出指定的容器的端口映射

实例

查看容器mynginx的端口映射情况

docker port mymysql

docker commit:从容器创建一个新的镜像

  1. -a:提交的镜像作者
  2. -c:使用Dockerfile指令来创建镜像
  3. -m:提交时的说明文字
  4. -p:commit时,将容器暂停

实例

将容器a404保存为新的镜像,并添加提交人信息和说明信息

docker commit -a "ruboob.com" -m "my apache" a404c6c174a2 mymysql:v1

docker cp:用于容器与主机之间的数据拷贝

  1. -L:保持源目标中的链接

实例

将主机/www/runoob目录拷贝到容器96f7的/www目录下

docker cp /www/runoob 96f7f14e99ab:/www/

将主机/www/ruboob目录拷贝到容器下,重命名为www

docker cp /www/runoob 96f7f14e99ab:/www

将容器86f7f14e99ab的www目录拷贝到主机的/tmp目录中

docker cp 96f714e99ab:/www /tmp

docker diff:检查容器里文件结构的更改

实例

查看容器mymysql的文件结构更改

docker diff mymysql

docker login:登录镜像仓库

docker logout:注销镜像仓库

  1. -u:登录用户名
  2. -p:登录密码 

docker pull:拉取镜像或更新指定镜像

  1. -a:拉取所有tagged镜像
  2. --disable-content-trust:忽略镜像的校验 

实例

下载java镜像

docker pull java

docker push:将本地的镜像上传到镜像仓库

实例

上传本地镜像到镜像仓库

docker push myapache:v1

docker search:从Docker Hub查找镜像

  1. --automated:只列出automated build类型的镜像
  2. --no-trunc:显示完整的镜像描述
  3. -s:列出收藏数不小于指定值的镜像

实例

查找所有包含java,并且收藏数大于10的镜像

docker search -s 10 java 

docker images:列出本地镜像

  1. -a:列出本地所有的镜像
  2. --digests:显示镜像的摘要信息
  3. -f:显示满足条件的镜像
  4. --format:指定返回值的模板文件
  5. --no-trunc:显示完整的镜像信息
  6. -q:只显示镜像ID

docker rmi:删除本地一个或多个镜像

  1. -f:强制删除
  2. --no-prune:不移除该镜像的过程镜像

实例

强制删除本地镜像

docker rmi -f runoob/ubuntu:v4

docker tag:标记本地镜像,将其归入某个仓库

实例

将镜像ubuntu标记为runoob/ubuntu

docker tag ubuntu:15.10 runoob/ubuntu:v3

docker build:命令用于使用Dockerfile创建镜像

  1. --build-arg=[]:设置镜像创建时的变量
  2. --cpu-shares:设置CPU使用权重
  3. --cpu-period:限制CPU CFS周期
  4. --cpu-quota:限制CPU CFS配额
  5. --cpuset-cpus:指定使用的CPU id
  6. --cpuset-mems:指定使用的内存id
  7. -f:指定要使用的Dockerfile路径
  8. --force-rm:设置镜像过程中删除中间容器
  9. --isolation:使用容器隔离技术
  10. --label=[]:设置镜像使用的元数据
  11. -m:设置内存最大值
  12. --memory-swap:设置Swap的最大值内存+swa
  13. --no-cache:创建镜像的过程不使用缓存
  14. --pull:尝试去更新镜像的新版本
  15. --quiet,-q:安静模式,成功后只输出镜像id
  16. --rm:设置镜像成功后删除中间容器
  17. --shm-size:设置dev/shm的大小
  18. --ulimit:Ulimit配置
  19. --tag,-t:镜像的名称及标签,通常name:tag或name
  20. --network:构建期间设置RUN指令的网络模式

实例

使用当前目录的Dockerfile创建镜像

docker build -t runoob/ubuntu:v1 .

使用URL的Dockerfile 创建镜像

docker build github.com/creack/docker-firefox

通过-f Dockerfile文件的位置

dockere build -f /path/to/a/Dockerfile .

docker history:查看指定镜像的创建历史

  1. -H:以可读的格式打印镜像大小和日期
  2. -q:仅列出提交记录ID

实例

查看本地镜像的创建历史

docker history runoob/ubuntu:v3

docker save:将指定镜像保存成tar归档文件

  1. -o:输出到文件

实例

将镜像生成tar文档

docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

docker import:从归档文件中创建镜像

  1. -c:应用docker指令创建镜像
  2. -m:提交时的说明文字

实例

从镜像归档文件.tar创建镜像

docker import my_ubuntu_v3.tar runoob/ubuntu:v4

docker info:显示Docker系统信息,镜像、容器数

docker version:显示Docker版本

#

Dockerfile

Dockerfile是一个文本文档,包含用户可以在命令行上调用以组合图像的所有命令。

docker buil用户可以创建一个连续执行多个命令指令的自动创建

docker build命令根据Dockerfile上下文构建镜像。构建上下文是指定位置PATH或文件集URL。PATH是本地文件系统上的目录。URL是一个Git存储库位置

docker build .

构建工作由Docker守护程序运行。第一件事是整个上下文发送到守护进程。最好是空目录作为上下文,并将Dockerfile保存在该目录中。仅添加构建Dockerfile所需的文件。

要在构建上下文中使用文件,需要引用指令中指定的文件,例如COPY。要提高性能可以通过.dockerignore来排除文件和目录

可以使用-f 标志来指向任何位置的Dockerfile

docker build -f /path/to/a/Dockerfile .

可以指定存储库和标记,保存新图像

docker build -t shykes/myapp .

构建后将镜像标记为多个存储库

docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

 

 

 

 

 

 

 

 

 

 

 

 

 

#https://docs.docker.com/engine/reference/builder/

转载于:https://www.cnblogs.com/chenxygx/p/8716524.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值