Docker 常用命令

基础入门
  • 运行我们第一个容器

    sudo docker run -i -t ubuntu /bin/bash
    

    -i 标志保证容器中STDIN是开启的。
    -t标志告诉Docker为要创建的容器分配一个伪tty终端。
    这样,新创建的容器才能提供一个交互式shell,若要在命令行下创建一个我们能与之进行交互的容器,而不是一个运行后台服务的容器,则这两个参数是最基本的参数。

    ubuntu告诉Docker基于什么镜像来创建容器,示例中使用的是ubuntu镜像。Docker 会检查本地是否存在ubuntu镜像,如果本地没有该镜像,那么Docker就会连接Docker官方维护的Docker Hub Registry,查看Docker Hub 中是否有该镜像,Docker一旦找到该镜像,就会下载该镜像并将其保存到本地宿主机中。

    随后,Docker在文件系统内部用这个镜像创建了一个新容器,该容器拥有自己的网络,IP地址,以及一个用来和宿主机进行通信的桥接网络接口。

    最后,/bin/bash命令告诉Docker在新容器中要运行什么命令,这里是启动一个Bash shell。

  • 列出docker容器

    docker ps       # 列出当前正在运行的容器
    docker ps -a    # 列出所有容器,包括正在运行和已经停止的
    docker ps -l    # 列出最后一个运行的容器
    docker ps -n x  # 列出最后x个容器,不管正在运行还是已经停止
    
    CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
    容器ID  创建容器的镜像  容器最后执行的命令  容器创建时间  容器退出状态  容器名称
    
  • 容器命名

    docker run --name xx -i -t ubuntu /bin/bash
    

    使用--name给容器命名,容器的命名必须是唯一的,如果要使用的容器已经存在,可以先用docker rm命令删除已有的同名容器后,再来创建新的容器。

  • 端口映射
    在网络模式下,使用-p指定端口映射,格式为:宿主端口:容器端口

    docker run -p 6379:6379 --name redis-master -d redis redis-server /etc/redis/redis.conf/conf 
    

    -d表示Docker会将容器放到后台运行,redis 表示使用的是redis 镜像,redis-server /etc/redis/redis.conf/conf 表示启动容器执行的命令。

  • 挂载物理机的目录到容器中
    使用-v 将物理机的目录挂载到容器中,格式为: <host path>:<container path>

    docker run -p 6379:6379 --name redis-master 
    -v /redis-master/redis-conf/redis.conf:/etc/redis/redis.conf \
    -v /redis-master/data:/data \
    -d redis \
    redis-server /etc/redis/redis.conf/conf 
    

    注意这里物理机的目录必须为绝对路径,如果需要使用当前目录,可使用pwd

    docker run -p 6379:6379 --name redis-master 
    -v `pwd`/redis-master/redis-conf/redis.conf:/etc/redis/redis.conf \
    -v `pwd`/redis-master/data:/data \
    -d redis \
    redis-server /etc/redis/redis.conf/conf
    

    也可以将物理机的文件挂载到到容器中

  • 拷贝文件到容器中
    将物理主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下:

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

    将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为xxx:

    docker cp /www/runoob 96f7f14e99ab:/xxx
    

    将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录下:

    docker cp 96f7f14e99ab:/www /tmp/
    
  • 停止/启动/重启容器

    • stop

      docker stop bob_the_container
      

      容器在docker host中实际上就是一个进程,docker stop命令本质上是向该进程发送一个SIGTERM信号,如果想快速停止容器,可使用docker kill命令,其作用是向容器进程发送SIGKILL信号。

      SIGTERMSIGKILL信号区别?

    • start

      docker start bob_the_container  # 通过容器名称启动
      docker start aa3f365f0f4e       # 通过ID启动已经停止运行的容器
      

      docker start会保留容器的第一次启动时的所有参数。

    • restart

      docker restart bob_the_container
      

      docker restart其作用是依次执行docker stopdocker start命令。
      容器可能会因为某种错误而停止运行,对于服务类容器,我们希望它能自动重启。

      docker run --restart=always -d httpd            # 总是自动重启
      docker run --restart=on-failure:3 -d httpd      # 尝试重启3次
      
  • 暂停容器
    有时希望可以让容器暂停工作一段时间,比如要给容器的文件系统打快照,这时可以执行docker pause

    docker pause daemon_dave
    

    处于暂停状态的容器不会占用CPU资源,直到通过docker unpause恢复运行

    docker unpause daemon_dave
    
  • 创建守护式容器
    上面创建的是交互式运行的容器,平常更适合的是创建守护式容器,它没有交互会话,非常适合来运行应用程序和服务。

    docker run --name daemon_dave -d ubuntu /bin/sh -c "while true;  do echo hello world; sleep 1; done"
    

    -d表示Docker会将容器放到后台运行。

  • 在容器内部运行进程
    在容器内运行的进程有2种类型:后台任务和交互式任务。后台任务在容器内运行且没有交互需求,而交互式任务则保持在前台运行。

    我我们可以通过docker exec命令可以在容器内部额外启动新进程。

    docker exec -d daemon_dave touch /etc/new_config_file  # -d表示后台任务
    docker exec -t -i daemon_dave /bin/bash
    

    -d标志之后,指定的是要在内部执行这个命令的容器以及要执行的命令。
    通过docker exec后台命令,可以在正在运行的容器中进行维护,监控及管理任务。

  • 跟踪容器内部
    在后台运行的守护型容器,我们可以通过docker logs命令来获取容器的控制台输出。

    docker logs daemon_dave    # 默认显示最后几行日志输出
    docker logs -f damon_dave  # 实时跟踪
    docker logs -ft daemon_dave    # -t 加上时间戳
    docker logs --tail 10 damon_dave    # 获取日志的最后10行内容
    
  • 查看容器内的进程

    docker top daemon_dave
    
  • 查看容器的统计信息

    docker stats daemon_dave
    
    CONTAINER      CPU %    MEM USAGE/LIMIT         MEM %      NET I/O        BLOCK I/O         PIDS
    3804b59f55f5   0.04%    457.9MiB / 1.797GiB     24.89%     7MB / 273 kB   3.04MB / 34.3MB   23
    .....
    

    可以监控容器的CPU,内存,网络I/O,存储I/O的性能和指标。

  • 删除容器

    docker rm 80430fd8d0921   
    docker rm -f 80430fd8d0921 # 强制删除正在运行的容器
    docker rm `docker ps -a -q`   # 删除所有容器
    
  • 获取所有容器的名称

    # docker ps -a --format {{.Names}}
      goofy_keller
      hardcore_mirzakhani
      reverent_boyd
      dbslave
      dbmaster
      ...
    

容器中的时间问题

如果在启动Docker]容器的过程中没有单独配置localtime,很可能造成Docker容器时间与主机时间不一致的情况,一般可以使用宿主机的时间配置文件来解决,直接在docker 启动时将宿主机的文件映射至容器内:

docker run -it -v /etc/localtime:/etc/localtime centos /bin/sh

获取容器详细信息
docker inspect daemon_dave
  • 获取容器的进程ID

    docker inspect -f '{{.State.Pid}}' daemon_dave
    
  • 获取容器的目录映射信息

  • 获取容器的网络信息


对容器进行资源限制
  • 内存限制
  • CPU限制
  • Block IO 带宽限制

容器外执行某个容器内的某个命令
docker exec [docker id] /bin/bash -c "cd /home  && pyhotn main.py"

或者执行shell命令

docker exec -ti obs1 /bin/bash -c "echo hello world"

在容器内部使用docker
docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker ubuntu

查看容器和镜像占用的存储空间大小
docker system df -v

清理多余的空间
docker system prune -a

可以清除如下资源:

  • 已停止的容器(container)
  • 未被任何容器所使用的卷(volume)
  • 未被任何容器所关联的网络(network)
  • 所有悬空镜像(image)

该命令需要谨慎使用,有可能破坏容器的存储层,造成容器启动失败。


使用runlike 查看容器启动参数

使用 docker run 启动容器,时间长了,就忘记当初启动是添加了什么参数。如果要查看当前添加了什么参数
使用前需要安装runlike插件

pip install runlike

然后使用runlike -p 容器名 or 容器ID

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • docker 常用命令 docker images 列出的docker中的所有镜像 docker ps 列出正在运...
    旋转马达阅读 224评论 0 1
  • # docker --helpUsage: docker [OPTIONS] COMMAND [arg...] ...
    dujh302阅读 370评论 0 0
  • 一、配置镜像加速网站 一般镜像网站都是国外拉取很慢,所以自定配置国内镜像网站,像我这里使用自己阿里云账号提供的镜像...
    靜默阅读 377评论 0 0
  • 镜像操作 docker pull IMAGE-NAME [:TAG] 从仓库拉取镜像,TAG表示镜像的版本,省...
    简单书写_阅读 261评论 0 0
  • docker常用命令详解 docker logs -t --since="2018-12-26 06:39:22"...
    xuxw阅读 541评论 0 0