美文网首页
docker常用命令

docker常用命令

作者: 靜默 | 来源:发表于2020-03-08 20:42 被阅读0次

    一、配置镜像加速网站

    一般镜像网站都是国外拉取很慢,所以自定配置国内镜像网站,像我这里使用自己阿里云账号提供的镜像地址
    以下配置方法配置镜像加速器,是针对Docker客户端版本大于 1.10.0 的用户,如果低于这个版本,镜像加速配置方法可以百度找到就比较复杂一点
    通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

    [root@master ~]# cat /etc/docker/daemon.json 
    {
      "registry-mirrors": ["https://t5utj2u4.mirror.aliyuncs.com"]
    }
    [root@master ~]#
    

    此处使用自己阿里云账号页面提供的镜像地址即可。

    重启docker

    systemctl daemon-reload
    systemctl restart docker
    

    检查是否生效

    docker info
    Registry Mirrors:
      https://t5utj2u4.mirror.aliyuncs.com/
    

    二、基本常用命令

    查看本机镜像

    [root@localhost ~]#docker images
    

    搜索centos相关镜像

    [root@localhost ~]#docker search centos
    

    拉取镜像

    [root@localhost ~]#docker pull centos
    

    docker中拉取指定版本的镜像
    比如:

    docker pull centos:7
    docker pull mongo:3.6.6
    dockre pull redis:4.0
    

    简单测试使用镜像
    docker: Docker 的二进制执行文件。
    run:与前面的 docker 组合来运行一个容器。
    centos指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 下载公共镜像。
    /bin/echo “Hello world”: 在启动的容器里执行的命令

    [root@localhost ~]# docker run centos /bin/echo "hello-world"
    hello-world
    

    删除镜像

    [root@localhost ~]#docker rmi 镜像ID
    

    进入容器
    -t 在新容器内指定一个伪终端或终端。
    -i 允许你对容器内的标准输入 (STDIN) 进行交互

    [root@localhost ~]# docker run -it centos /bin/bash
    [root@678b1725d9e3 /]# ls
    anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@678b1725d9e3 /]# cat /etc/redhat-release 
    CentOS Linux release 7.6.1810 (Core) 
    [root@678b1725d9e3 /]# 
    

    使用exit或ctrl+d退出容器

    [root@678b1725d9e3 /]# exit                    
    exit
    [root@localhost ~]# 
    

    exec 命令 ID 或者 name

    docker exec -it mynginx /bin/bash
    

    后台模式
    -d 在后台运行容器并打印容器ID

    [root@localhost ~]# docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
    f66c5f63b4f5a6ca4d37575682e181fe8697c51db89d49ff0e59060c18a00b70
    

    在输出中,我们没有看到期望的"hello world",而是一串长字符
    2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
    这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。
    首先,我们需要确认容器有在运行,可以通过 docker ps 来查看容器ID

    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
    f66c5f63b4f5        centos              "/bin/sh -c 'while t…"   4 minutes ago       Up 4 minutes                                      laughing_keldysh
    

    CONTAINER ID:容器ID
    NAMES:自动分配的容器名称
    在容器内使用docker logs命令,查看容器内的标准输出
    [root@localhost ~]#docker logs f66c5f63b4f5

    停止容器

    [root@localhost ~]#docker stop f66c5f63b4f5
    f66c5f63b4f5
    

    删除容器或镜像

    [root@localhost ~]# docker rm 容器ID
    

    强制删除运行的容器

    [root@localhost ~]#  docker rm -f 容器ID
    

    杀死所有正在运行的容器

    docker kill $(docker ps -a -q)
    

    删除所有已经停止的容器

    docker rm $(docker ps -a -q)
    

    删除所有未打 dangling 标签的镜像

    docker rmi $(docker images -q -f dangling=true)
    

    删除所有镜像

    docker rmi $(docker images -q)
    

    docker rm 可以删除容器 ;但是删除之前必须是 stop 状态;

    查看容器

    docker ps :列出当前所有正在运行的container
    docker ps -l :列出最近一次启动的container
    docker ps -a :列出所有的container(包含历史,即运行过的container)
    docker ps -q :列出最近一次运行的container ID
    

    获取所有容器ID

    docker ps -a | awk '{ print $1}' | tail -n +2
    

    Docker 端口映射

    # docker run -d P sevrer
    # docker run -d p port:port server
    -d 后台运行;
    -P -p 标识来指定容器端口绑定到主机端口。
    两种方式的区别是:
    -P : 是容器内部端口随机映射到主机的高端口。
    -p : 是容器内部端口绑定到指定的主机端口。
    

    默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
    使用IP:HostPort:ContainerPort格式指定映射使用一个特定的地址

    docker port ID/name 查看端口绑定
    docker port website
    docker run -d -p 4594:22 --name myos --privileged=true centos:latest /usr/sbin/init
    

    启动容器报错问题
    结束容器进程,清除网络映射。重启网卡 再起docker 启容器。
    关闭进程

    pkill docker
    

    清除 nat 规则

    iptables -t nat -F
    

    关闭网卡

    ifconfig docker0 down
    

    删除 虚拟网桥

    brctl delbr docker0
    

    最后重启docker后解决

    查看WEB 应用程序日志

    docker logs [ID或者name] 可以查看容器内部的标准输出。
    docker logs name
    docker logs -f name  实时查看日志
    

    查看容器进程

    docker top webstie
    

    查看Docker 的底层信息

    docker inspect ;
    docker inspect website 
    

    使用 docker inspect 来查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

    更改运行容器的名称

    docker ps 查看运行的容器;
    docker rename myweb youweb
    

    启动docker容器并在退出时自动删除

    docker run -it --rm nginx /bin/bash
    

    以上命令就是以命令行方式启动docker容器,并在退出时自动删除,使用bash作为当前shell

    启动运行 nginx 容器示例

    docker run -d nginx 后台运行 ;
    docker exec :在运行的容器中执行命令
    -d :分离模式: 在后台运行
    -i :即使没有附加也保持STDIN 打开
    -t :分配一个伪终端
    docker exec -it mynginx /bin/sh
    

    docker commit 编辑镜像
    从容器创建一个新的镜像;

    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    docker commit -a "name" -m "my-tomcat" website my-tomcat:v2
    -a :提交的镜像作者;
    -c :使用Dockerfile指令来创建镜像;
    -m :提交时的说明文字;
    -p :在commit时,将容器暂停;
    

    容器上传下载 拷贝文件cp

    上传测试文件:
    docker cp start-kube.sh website:/root/
    
    下载文件 docker cp 
    docker cp website:/test.html /root/
    

    进入容器:

    docker exec -it website /bin/bash
    

    diff 查看容器的目录结构

    docker diff ID/NAME
    # docker diff webstie
    

    配置一个centos系统并设置密码

    docker pull centos
    docker tag centos:latest centos:v1
    docker run -d -p 4594:22 --name myos --privileged=true centos:v1 /usr/sbin/init
    docker exec -it myos /bin/bash
     ss -ntl
     yum install openssh-server
     systemctl restart sshd
      ss -ntl
      yum install passwd
      passwd 
     yum install initscripts net-tools
    

    Docker容器里的centos、unbuntu无法使用 systemctl 命令的解决方案
    例如:centos

    docker run -d -it -p 4590:22 --privileged=true --name myos myos:v1
    docker exec -it myos /bin/bash
    

    注意:--privilaged=true一定要加上的。

    docker容器设置自动启动
    启动时加--restart=always

    docker run -tid --name myos -p 8081:8080 --restart=always -v /os/v1/log:/usr/local/tomcat/logs myos
        Flag    Description
        no      不自动重启容器. (默认value)
        on-failure  容器发生error而退出(容器退出状态不为0)重启容器
        unless-stopped  在容器已经stop掉或Docker stoped/restarted的时候才重启容器
        always  在容器已经stop掉或Docker stoped/restarted的时候才重启容器
    

    如果已经启动的项目,则使用update更新:

    docker update --restart=always myos
    

    设置容器主机名和DNS

    h HOSTNAME 或者 --hostname=HOSTNAME
    --dns=IP_ADDRESS  使用指定的DNS服务器
    

    使用-v选项共享物理机文件数据

    -v /etc/hosts:/etc/hosts
    

    当然此法适用于容器hosts与宿主机hosts内容一致的情况

    相关文章

      网友评论

          本文标题:docker常用命令

          本文链接:https://www.haomeiwen.com/subject/cpijdhtx.html