三、Docker 常用命令

1.帮助命令

  • docker --version

  • docker info

  • docker --help

防火墙相关帮助

启动: systemctl start firewalld.service
关闭: systemctl stop firewalld.service
查看状态: firewall-cmd --state 
开机禁用  : systemctl disable firewalld.service
开机启用  : systemctl enable firewalld
添加受信任的端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
删除端口:firewall-cmd --zone=public --remove-port=6379/tcp --permanent
查看所有打开的端口: firewall-cmd --zone=public --list-ports
重新载入:firewall-cmd --reload

 

 

常用的一些工具

安装wget

yum install wget -y

 

Linux wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器。如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器。这样既浪费时间又浪费精力,那不没办法的事。而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步。wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来方便简单。下面我们以实例的形式说明怎么使用wget。

以下的例子是从网络下载一个文件并保存在当前目录

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。

 

安装vim

vim 是一个全屏幕纯文本编辑器,是 vi 编辑器的增强版。

yum install vim -y

 

安装net-tools

yum install net-tools -y

 

net-tools 安装完毕之后可以使用的命令有:

  • netstat : 查看应用程序的端口状况

  • ifconfig :查看网卡相关信息

  • hostname: 查看主机相关信息

  • route : 打印linux 路由相关信息

 

建议将IP设置为静态

  1. 在VMware里,依次点击”编辑“ - ”虚拟网络编辑器“,如下图,我选择的是NAT模式:

    记下自己的子网掩码与网关IP,后面要用到

    1. 记下自己的子网掩码与网关IP,后面要用到

     

     

 

 

  1. 以root权限登陆centos7并编辑ifcfg-ens33这个文件,效果如下(有些版本值是有双引号的):

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

     

    TYPE=Ethernet

    BOOTPROTO=static #设置静态Ip 

    DEFROUTE=yes

    IPV4_FAILURE_FATAL=no

    IPV6INIT=yes

    IPV6_AUTOCONF=yes

    IPV6_DEFROUTE=yes

    IPV6_FAILURE_FATAL=no

    NAME=eno16777736

    UUID=4f40dedc-031b-4b72-ad4d-ef4721947439

    DEVICE=eno16777736

    ONBOOT=yes #这里如果为no的话就改为yes,表示网卡设备自动启动 

    PEERDNS=yes

    PEERROUTES=yes

    IPV6_PEERDNS=yes

    IPV6_PEERROUTES=yes

    IPV6_PRIVACY=no

    GATEWAY=192.168.253.2 #这里的网关地址就是第二步获取到的那个网关地址

    IPADDR=192.168.253.137  #配置ip,在第二步已经设置ip处于192.168.253.xxx这个范围,我就随便设为137了,只要不和网关相同均可 

    NETMASK=255.255.255.0 #子网掩码 

    DNS1=8.8.8.8 #dns服务器1,填写你所在的网络可用的dns服务器地址即可 

    DNS2=4.4.4.4 #dns服器2

  2. 重启网卡服务

    service network restart

     

     

2. 镜像命令

2.1 列出本地

语法:docker images [options]

options说明:

  • -a 列出本地所有的镜像(包含中间映像层)

  • -q 只显示镜像ID

  • --digests 显示镜像摘要信息

  • -- no-trunc 显示完整的镜像信息

如:docker images

2.2 镜像搜索

语法: docker search 某个镜像名字或者ID [options]

网站:https://hub.docker.com

options 说明:

  • --no-trunc:显示完整的镜像描述

  • -- limit int: 表示只列前xx项

例如:docker search centos:7

2.3 下载镜像

语法:docker pull 镜像名字:[TAG]. 若未写版本号,则默认为最新版(lasted)

如:docker pull redis:3.2

2.4 删除镜像

语法:docker rmi 某个镜像名称或者ID

  • 删除单个:docker rmi 镜像ID:Tag

  • 强制删除:docker rmi -f 镜像ID

  • 删除多个:docker rmi -f 镜像名1:Tag 镜像名2:tag

  • 全部删除: docker rmi -f $(docker images -qa)

3. 容器命令

3.1 启动容器

语法 :docker run [options] 镜像名称 [COMMOND] [ARG...]

OPTIONS说明(常用):有些是一个减号,有些是两个减号

--name="容器新名字": 为容器指定一个名称(如果不指定,系统会随机给一个名字); -d: 后台运行容器,并返回容器ID,也即启动守护式容器; -i:以交互模式运行容器,通常与 -t 同时使用; -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用; -p: 指定端口映射

-P(大写): 随机分配端口

使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。 交互模式: docker run -it centos /bin/bash

守护模式:docker run -id centos /bin/bash

如:

测试:

$ docker run -it --name=c_redis -p 6379:6379 redis:3.2 /bin/bash 
$ docker exec -it c_redis redis-cli -h 127.0.0.1 -p 6379

 

3.2 列出容器列表

语法:docker ps [options]

OPTIONS说明(常用):

-a :列出当前所有正在运行的容器+历史上运行过的 -l :显示最近创建的容器。 -n:显示最近n个创建的容器。 -q :静默模式,只显示容器编号。 --no-trunc :不截断输出。

 

STATUS: 容器状态有7种:

created(已创建)
restarting(重启中)
running|UP(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)

 

3.3 进入与退出容器

docker exec -it 容器名或者容器id /bin/bash

docker exec -it c_redis /bin/bash

 

docker attach -it 容器名或者容器

docker attach 容器名或者容器

 

  • 容器停止退出:exit

  • 容器不停止退出:ctrl+P+Q

 

docker attach

docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。但是需要注意的是,如果从这个stdin中exit,会导致容器的停止。

stdin: 标准的输入输出流

PS:

docker attach 命令输入后会卡顿,需要手动敲入Enter后才能到达container里面。 在我的容器内输入Ctrl+C是不起作用的。 输入exit或者Ctrl+D后容器直接退出会导致container的停止。

docker exec

用docker exec -it命令进入容器如果输入exit命令直接退出container,但是不会使得container停止,平时我用这个命令比较多。

3.4 启动容器

docker start 容器ID或者容器名

如 :docker start c_redis

3.5 重启容器

docker restart 容器ID或者容器名

如 :docker restart c_redis

3.6停止容器

docker stop 容器ID或者容器名

如: docker stop c_redis

3.7 强制停止容器

docker kill 容器ID或者容器名

如:docker kill c_redis

 

kill vs stop

两个命令都是停止docker,不同之处在于:

  • docker stop: 先发SIGTERM信号给docker,允许其在一定时间(默认10s)内进行一些操作(例如资源回收),若这段时间内容器未停止,则发送SIGKILL信号强行杀死容器;

  • docker kill: 直接发送SIGKILL信号杀死容器。

SIGTERMSIGKILL的区别在于,前者是告知你的租期到了,请你赶紧收拾行李离开;后者是你的租期到了,直接将你扫地出门。

简而言之,相比kill,stop给了容器自行处理结束的时间,更为优雅

3.8 删除容器

docker rm -f 容器ID或者容器名

如:docker rm -f c_redis

PS:无法删除正在运行的容器,加 -f 强制删除

删除所有容器

docker rm -f $(docker ps -qa)

 

3.9 重要

3.9.1 查看日志:

docker logs -f -t --tail 容器ID

  • -t 是加入时间戳

  • -f 跟随最新的日志打印

  • --tail 数字 显示最后多少条

    $ docker logs [OPTIONS] CONTAINER
      Options:
            --details        显示更多的信息
        -f, --follow         跟踪实时日志
            --since string   显示最后某个timestamp之内的日志,或相对时间,如42m(即42分钟以内)
            --tail string    从日志末尾显示多少行日志, 默认是all
        -t, --timestamps     显示时间戳
            --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

     

    例子:

    查看指定时间后的日志,只显示最后100行:

    $ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

     

    查看最近30分钟的日志:

    $ docker logs --since 30m CONTAINER_ID

     

    查看某时间之后的日志:

    $ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

     

    查看指定时间后的日志,只显示最后100行:

    $ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

     

    查看某时间段日志:

    $ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

     

     

3.9.2 查看容器内运行的进程

docker top 容器ID

3.9.3 查看容器内部细节

docker inspect 容器ID

3.9.4 进入正在运行的容器并以命令行交互

  • docker exec -it 容器ID /bin/bash

  • 重新进入 : docker attach 容器ID

  • 区别:attach 直接进入容器启动命令的终端,不会启动新的进程,exec是在容器中打开新的终端,并且可以启动新的进程

3.9.5 文件拷贝

docker cp 需要拷贝的文件或目录 容器名称:容器目录

docker cp 1.txt c2:/root 

 

docker cp 容器名称:容器目录 需要拷贝的文件或目录

docker cp c2:/root/2.txt /root 

 

3.10 批量操作容器

  1. 批量启动所有容器

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

     

  2. 批量设置所有容器开机启动

    docker update --restart=always  $(docker ps -a | awk '{ print $1}' | tail -n +2)

     

     配套视频链接:全网首发java/.net双案例Docker精品课程,Docker 进阶教程(双语言双案例助力教学)-已完结_哔哩哔哩_bilibili

热门相关:全天下都知道太子爱她   神的礼物   性瘾:偷窥狂   俄罗斯妈妈   我真的很想做的女演员