Fork me on GitHub

Docker篇章4:Docker常用命令

Docker篇章4:Docker常用命令

  • 如果说蓝色大海相当于宿主机系统Linux,那么鲸鱼就是docker,集装箱就是容器的实例,而容器来自于我们的镜像。废话不多说,常用命令汇总

  • 帮助命令

    # 查看docker描述,版本..
    docker version
    # 更详细信息描述
    docker info
    # 查看执行命令帮助
    docker --help
    
  • 镜像命令

    # 列出当前镜像模板
    docker images
        # REPOSITORY镜像的仓库源
        # TAG镜像的标签
        # IMAGE ID镜像ID
        # CREATED镜像创建时间
        # SIZE镜像大小
    	# 同一个仓库源可以有多个TAG,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像,如果你不指定一个进项的版本标签例如你使用hello-world ,docker将默认使用hello-world:latest镜像
    docker images -a#列出本地所有的镜像(含中间映像层
    			 -q#只显示镜像ID
        		 --digests #显示镜像的摘要信息
            	 --no-trunc #显示完整的镜像信息
    docker search xxx#去docker去找xxx的镜像,例如:docker search redis  去dockerHub找redis镜像。
    	docker search -s 30 redis #去dockerHub去找点赞数超过30的redis镜像
        docker search -s 100 --no-trunc redis #添加--no-trunc显示完整的镜像信息
    docker pull redis #去dockerHub拉取redis镜像,等价于docker pull redis:latest,如果拉取redis:3.2 则docker pull redis:3.2
    docker image purne # 移除没有被标记或者没有任何容器引用的镜像
    docker save 镜像名称 -o 镜像名称.tar  # 保存镜像到本地
    docker load -i 镜像名称.tar # 导入镜像到本地
    docker rmi 镜像名 # 删除镜像,例如:docker rmi hello-world 不指定版本号相当于删除镜像hello-world:latest 如果当前容器使用此镜像,无法删除
    	docker rmi -f hello-world #强制删除hello-world镜像
    docker rmi -f 镜像名1:TAG 镜像名2:TAG #删除多个镜像
    docker rmi -f $(docker images -qa)#删除全部镜像
    
  • 容器命令1

    #新建并启动容器
    docker run [OPTIONS] IMAGE[COMMAND][ARG...]
    	OPTIONS:
            --name="容器新名字"  为容器指定一个名称
            -d  后台运行容器,并返回容器ID,也即启动守护式容器
            -i  以交互模式运行容器,通常与-t同事使用
            -t	为容器重新分配一个伪输入终端,通常与-i同事使用
            -P  随机端口映射
            -p  指定端口映射,有以下四种格式:
            	ip:hostPort:containerPort
                ip:containerPort
                hostPort:containerPort
                containerPort
        # 命令 demo:
    	docker run -it [IMAGE ID]# 以交互模式运行容器,并为容器重新分配一个伪输入终端,比如IMAGE ID为centos的,则进入到docker内的centos
        docker run -it --name centosdemo centos# 指定name启动centos,这样
    #查看当前运行容器
    docker ps [OPTIONS]
    	OPTIONS:
            -a : 列出当前所有正在运行的容器加历史上运行过的容器
            -l : 显示最近创建的容器
            -n : 显示最近n个创建的容器  docker ps -n 3 #显示最近3个创建的容器
            -q : 静默模式,只显示容器编号
            --no-trunc: 不截断输出,显示完整。
    #退出容器
    	exit	#退出容器,并停止容器
        ctrl + p + q  #退出容器,但容器不停止
    # 启动容器
    docker start 容器ID
    	# 可以通过docker ps -a 查看STATUS为Exited(0)的容器ID,复制容器ID,然后通过docker start 容器ID 来启动容器。
    # 重启容器
    docker restart 容器ID
    # 停止容器(温柔关闭)
    docker stop 容器ID或者容器名
    # 强制停止
    docker kill 容器ID或者容器名
    # 删除已经停止的容器
    docker rm 容器ID
    	# docker fm -f 容器ID    关闭容器再删除容器
        # 一次性删除多个容器
        	docker rm -f $(docker ps -a -q)
            docker ps -a -q | xargs docker rm
    
  • 容器命令2:

    # 启动守护式容器 
    docker run -d centos
    	# 问题:docker ps -a 进行查看,会发现容器已经退出,docker容器后台运行,就必须有一个前台进程,容器运行命令如果不是那些一直挂起命令(比如:top,tail),就会自动退出。
    	#这个式docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的服务即可,但是这样做nginx为后台进程模式运行,就会导致docker前台没有运行应用,这样容器后台启动后,会立即自杀因为它感觉没事可做。所以最佳解决方案式,将你要运行的程序以前台进程的形式运行。
    # 一直保持交互启动容器
    docker run -d centos /bin/sh -c "while true;do echo hell xjk; sleep 2;done"
    # 查看容器日志
    docker logs -f -t --tail 容器ID
    	docker logs -t 容器ID # 查看docker日志
        docker logs -t -f # 查看docker日志不停追加
      	docker logs -t -f --tail -3 容器ID # 查看docker日志 倒数3行
    # 查看容器内运行进程
    docker top 容器ID
    # 查看容器内部细节
    docker inspect 容器ID # 以json形式显示当前容器内全部结构
    # 进入正在运行容器并以命令行交互
    docker attach 容器ID # 例如:docker attach d93111c22a4c 真正进去,并可进行做一些操作
    docker exec -it 容器ID # 例如:docker exec -t d93111c22a4c ls -l /tmp 没有真正进去 而是通过exec进入容器执行 ls -l /tmp 然后拿到结果。
        docker exec -it d93111c22a4c /bin/bash #也可以向docker attach一样直接进入容器
    
    # 从容器内拷贝文件到主机上
    docker cp 容器ID
    	docker cp d93111c22a4c:/tmp/demo /root #将容器id为d93111c22a4c下的/tmp/demo 拷贝到主机的/root下
    
    # 提交容器副本使它成为一个新的镜像
    docker commit
    	docker commit -m='提交的描述信息' -a='作者' 当前运行容器ID 要创建的目标镜像名:[标签名]
    # docker卡死强制关闭
    docker kill --signal=SIGINT 容器名称或容器id
    # 将主机的/data/server 拷贝到容器dswe24e99ab的/data下
    docker cp /data/server dswe24e99ab:/data
    # 将容器dswe24e99ab 的 /data 目录拷贝到主机/tmp/下
    docker cp  dswe24e99ab:/data /tmp/
    # 将镜像ID为dswe24e99ab 保存到一个文件
    docker save dswe24e99ab > server.tar
    # 将server.tar文件载入镜像
    docker load < server.tar
    构建镜像
    docker build -t runoob/ubuntu:v1 . 
    
  • 更改存储文件位置

#docker查看保存静态目录
docker info | grep "Docker Root Dir"
# 修改: /etc/systemd/system/multi-user.target.wants/docker.service
ExecStart= 添加 --graph=/home/hellxz/docker-home
# 重新加载配置
systemctl daemon-reload
# 重启docker
systemctl restart docker
posted @ 2020-06-02 15:06  是阿凯啊  阅读(290)  评论(0编辑  收藏  举报