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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容