Docker介绍以及Docker常用命令(Docker入门)

什么是Docker

  • 基于Go语言
  • 开源
  • 容器项目
为什么使用Docker

举个栗子,假设用户试图基于常见的LAMP(Linux+Apache+MySQL+PHP)组合来构建网站。按照传统的做法,首先需要安装Apache 、MySQL 和PHP 以及它们各自运行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追踪,意味着更多的时间代价和不可控的风险。可以想象,如果应用数目变多,事情会变得更加难以处理。
更为可怕的是, 一旦需要服务器迁移(例如从亚马逊云迁移到其他云),往往需要对每个应用都进行重新部署和调试。这些琐碎而无趣的“体力活”,极大地降低了用户的工作效率。究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。
而Docker 提供了一种更为聪明的方式,通过容器来打包应用、解藕应用和运行平台。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台。这无疑将帮助我们节约大量的宝贵时间,并降低部署过程出现问题的风险。

Docker的优势
  1. 更快速的交付和部署
  2. 更高效的资源利用
  3. 更轻松的迁移和扩展
  4. 更简单的更新管理
  5. Docker容器很快,秒级启动停止
  6. DOcker容器对系统资源需求很少,一台机器可以运行数千个Docker容器
  7. 获取、分发、更新应用镜像方便
  8. Dockerfile支持灵活的自动化创建和部署机制
  9. 隔离性
核心概念
  1. Docker镜像
    类似于虚拟机镜像,可以理解为一个只读模版,一个镜像可以包含一个基本的操作系统等好多内容,镜像是创建Docker容器的基础

  2. Docker容器
    类似于一个轻量级沙箱,Docker利用容器来运行和隔离应用,容器从镜像创建的应用运行实例,容器可以启动、开始、停止、删除,容器之间互相隔离、互不可见

  3. Docker仓库
    类似于代码仓库,存放着镜像文件的场所

Docker常用命令

获取镜像
docker [image] pull NAME [ :TAG]

支持选项:

  • -a, --all-ags=true|alse: 是否获取仓库中的所有镜像,默认为否;
  • –disable-content-trust:取消镜像的内容校验,默认为真。
docker pull ubuntu: 18. 04

说明:对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择latest标签,这会下载仓库中最新版本的镜像。

查看镜像信息
docker images或docker image ls

支持选项:

  • -a, --all =true I false: 列出所有(包括临时文件)镜像文件,默认为否;
  • –digests=true | false: 列出镜像的数字摘要值,默认为否;
  • -f, --filter=[] : 过滤列出的镜像, 如dangling =true 只显示没有被使用的镜像;也可指定带有特定标注的镜像等;
  • –format=“TEMPLATE” : 控制输出格式,如. ID代表ID信息,.Repository代表仓库信息等;
  • –no-trunc=true I false: 对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是;
  • -q, --quiet=true I false: 仅输出ID信息, 默认为否。
docker iamges

说明:可以使用docker [image] inspect获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等
可以使用docker [image] history查看镜像的创建过程。

搜寻镜像
docker search [option] keyword

支持选项:

  • -f, --filter filter: 过滤输出内容;
  • –format string: 格式化输出内容;
  • –limit int:限制输出结果个数, 默认为25 个;
  • –no-trunc: 不截断输出结果。
docker search --filter=is-official=true nginx
删除和清理镜像
docker rmi或docker image rm

支持选项:

  • -f, -force: 强制删除镜像, 即使有容器依赖它;
  • -no-prune: 不要清理未带标签的父镜像。
docker rmi myubuntu:latest

说明:当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像的多个标签中的指定标签,并不影响镜像文件。当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,可以使用-f参数强行删除。正确的做法是先使用docker rm来删除容器,然后在删除镜像。
docker使用一段时间后,系统中会遗留一些临时文件,以及一些没有被使用的镜像,可以通过docker image prune来镜像清理。

创建镜像
  1. 基于已有容器创建
docker [container] commit [OPTIONS] CONTAINER [REPOSITORY] [:TAG]]

支持选项:

  • -a, --author="": 作者信息;
  • -c, - -change=[] : 提交的时候执行Dockerfile指令, 包括CMD | ENTRYPOINT | NV | EXPOSE | LABEL | ONBUILD | USER | VOLUME | WORKDIR等;
  • -m, - -message= " ": 提交消息;
  • -p, --pause=true: 提交时暂停容器运行。
docker [container] commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test:0.1

说明:顺利的话会返回新创建镜像的ID信息。

  1. 基于本地模板导入
docker [container] import [OPTIONS] file|URL|-[REPOSITORY] [:TAG]]
cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:lB.04

说明:要直接导入一个镜像,可以使用OpenVZ提供的模版来创建,或者用其他已导出的镜像模版来创建。

  1. 基于Dockerfile创建
docker build [选项] <上下文路径/URL/->

下面是Dockerfile文件

FROM tomcat:8.0-jre8

#作者
MAINTAINER AuthorName

#定义工作目录
ENV WORK_PATH /usr/local/tomcat/conf

#定义要替换的server.xml文件名
ENV SERVER_CONF_FILE_NAME server.xml

#删除原文件server.xml
RUN rm $WORK_PATH/$SERVER_CONF_FILE_NAME

#复制文件server.xml
COPY  ./$SERVER_CONF_FILE_NAME $WORK_PATH/
docker build -t w2gtomcat:0.0.1 .     注意后面的点不能少了

说明:Dockerfile语法详情

存出和载人镜像
docker [image] save 
docker [image] load

支持参数:

  • -o、导出镜像到本地文件中
docker save -o ubuntu 18 04 tar ubuntu:18 .04
docker load -i ubuntu_ 18 04 tar

说明:save导出镜像到本地文件中,load将导出的tar文件再导入到本地镜像库。

上传镜像
docker [image] push NAME [:TAG]  |  [REGISTRY_HOST [ :REGISTRY_PORT] / ]NAME [:TAG ]
docker tag test:latest user/test : latest             //添加新的标签user/test:latest
docker push user/test:latest

说明:用户在DockerHub网站上注册后可以上传自制的镜像。

创建容器但不启动
docker [container] create

支持选项:参数太多就不一一展示了
参数列表

docker create -t -i fedora bash
docker create -it ubuntu:latest

说明:注意创建的容器为停止状态,如果要启动需要使用start命令。
或者使用docker run命令

docker run ubuntu / bin/ echo ’ Hello world'
停止容器
docker [container] pause CONTAINER [CONTAINER ... ]

例如,启动一个容器然后将其暂停:

$ docker run --name test --rm -it ubuntu bash
$ docker pause test
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
893c8llcf845 ubuntu "bash” 2 seconds ago Up 12 seconds (Paused) test

说明:处于paused状态的容器,可以使用unpause命令来恢复到运行状态

终止容器
docker [container] stop
docker stop ce5

说明:处于终止状态的容器,可以通过start命令来重新启动,
docker restart 命令会将一个运行的容器先终止,然后再重新启动。

进入容器
  1. attach命令
docker [container] attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER

支持参数:

  • -- detach-keys [=[]]:指定退出attach 模式的快捷键序列, 默认是CTRL-p CTRL-q;
  • -- no-stdin=trueifalse :是否关闭标准输入,默认是保持打开;
  • -- sig-proxy=truelfalse :是否代理收到的系统信号给应用进程,默认为true 。
docker attach nginx

说明:使用attach命令有时候并不方便,当多个窗口同时attach到同一个容器的时候,所有窗口会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

  1. exec命令
docker [container] exec [-d| --detach] [ detach-keys[=[]]] [-i|--interactive] [ - -privileged][-t|--tty] [- u | --user [=USER]] CONTAINER COMMAND [ARG . . . ]

支持参数:

  • -d, --detach : 在容器中后台执行命令;
  • -- detach-keys ="":指定将容器切回后台的按键;
  • - e, - - env= []:指定环境变量列表;
  • - i, --int eractive=true I false :打开标准输入接受用户输入命令, 默认值为false;
  • -- privileged=true | false : 是否给执行命令以高权限,默认值为false;
  • - t, --tty=true | false : 分配伪终端,默认值为false;
  • - u, --user ="":执行命令的用户名或ID 。
docker exec -it 24 3 c32535da7 / bin/ bash

说明:通过指定-it参数来保持标准输入打开,并且分配一个伪终端,通过exec命令对容器执行操作是最为推荐的方式

容器的其他命令
  1. 复制文件
docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH |-

支持选项:

  • - a, -archive :打包模式,复制文件会带有原始的uid/gid 信息;
  • - L, -follow-link :跟随软连接。当原路径为软连接时,默认只复制链接信息,使用该选项会复制链接的目标内容。
docker [container] cp data test : / tmp/

说明:如果要将容器中的文件复制到宿主机中,将参数对调即可。

  1. 查看变更
docker [container] diff CONTAINER
docker container diff test

说明:查看容器内文件系统的变更。

  1. 查看端口映射
docker container port CONTAINER [PRIVATE_PORT[/PROTO ]]
docker container port test

说明:查看该容器的端口映射信息,输出为端口映射信息。

  1. 更新配置
docker [container] update [OPTIONS] CONTAINER [CONTAINER .. . ]

支持选项:

  • –blkio-weight 更新块IO 限制, 10 ~ 1000 ,默认值为0 ,代表着无限制;
  • –cpu-period 限制CPU 调度器CFS (Completely Fair Scheduler )使用时间,单位为微秒,最小1000;
  • –cpu-quota 限制CPU 调度器CFS 配额,单位为微秒,最小1000;
  • –cpu-rt-period 限制CPU 调度器的实时周期,单位为微秒;
  • –cpu-rt-runtime 限制CPU 调度器的实时运行时,单位为微秒;
  • –cpu-shares , -c 限制CPU 使用份额;
  • –cpus decimal 限制CPU 个数;
  • –cpuset-cpus 允许使用的CPU 核,如0-3, 0,1;
  • –cpuset-mems 允许使用的内存块,如0-3’ 0, 1;
  • –kernel-memory 限制使用的内核内存;
  • –memory , -m 限制使用的内存;
  • –memory-reservation 内存软限制;
  • –memory-swap 内存加上缓存区的限制, - 1 表示为对缓冲区无限制;
  • –restart 容器退出后的重启策略。

例如:限制总配额为1秒,容器teset所占用时间为10%:

docker update --cpu-quota 1000000 test

说明:可以更新容器的一些运行时配置,只要是一些资源限制份额。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丸子呢

致力于源码分析,期待您的激励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值