Docker 常用命令

帮助命令

1.  docker version    # 显示docker的版本信息
2.  docker  info      # 显示docker的系统信息,包括镜像和容器的数量 
3.  docker  --help    # 帮助命令

镜像命令

docker images

查看所有本地的主机上的镜像

[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   7 months ago   13.3kB
ubuntu        15.10     9b9cb95443b5   5 years ago    137MB
[root@localhost ~]# 
​
# 解释
REPOSITORY  镜像的仓库源
TAG         镜像的标签
IMAGE ID    镜像的id
CREATED     镜像的创建时间
SIZE        镜像的大小
​
# 可选项
  -a,    --all            # 列出所有镜像
  -q,    --quiet          # 只显示镜像的id
  
  例:docker images -aq  只显示所有的镜像

搜索镜像

[root@localhost ~]# docker search mysql
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                            MySQL is a widely used, open-source relation…   12453     [OK]       
mariadb                          MariaDB Server is a high performing open sou…   4800      [OK]     
​
#可选项   通过搜藏来过滤
​
--filter=stars=3000  # 搜索出来的镜像stars大于3000
例:
[root@localhost ~]# docker search mysql --filter=stars=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12453     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4800      [OK]       
[root@localhost ~]# 

docker pull

下载镜像

# 下载镜像 docker pull  镜像名  [:tag]
​
[root@localhost ~]# docker pull mysql  
Using default tag: latest          # 如果不写tag 默认就是latest
latest: Pulling from library/mysql
4be315f6562f: Pull complete    # 分层下载 docker iamges 的核心  联合文件系统
96e2eb237a1b: Pull complete 
8aa3ac85066b: Pull complete 
ac7e524f6c89: Pull complete 
f6a88631064f: Pull complete 
15bb3ec3ff50: Pull complete 
ae65dc337dcb: Pull complete 
654aa78d12d6: Pull complete 
6dd1a07a253d: Downloading  106.3MB/107.8MB
a32905dc9e58: Download complete 
152d41026e44: Download complete 
42e0f73ebe32: Download complete 
Digest : sha256:dc255ca50a42b3589197000b    #  签名地址
Status: Downloaded newer image  for mysql:latest
docker.io/library/mysql:latest     #真实地址
​
# 等价于它
docker pull mysql 
docker pull docker.io/library/mysql:latest
​
# 指定版本下载 
docker pull mysql:5.7

docker push

上传镜像

# 上传镜像 docker push 镜像名
​

docker rmi

删除镜像

# 根据image ID 删除
docker rmi -f 9b9cb95443b5                # 删除指定的容器
docker rmi -f  容器id  容器 id  容器 id     # 加空格删除多个容器
docekr rmi -f $(docker images -aq)        # 删除全部的容器
docker rmi -f `docker images -aq`         

docker save、load

保存、加载镜像

# 保存镜像
docker save 70f311871ae1 > nginx.tar    #打包镜像
​
# 同时将多个 Image 打包成一个文件
docker save -o images.tar nginx:9.0 tomcat:7.0
​
# 载入镜像
docker load -i nginx.tar

docker export

容器打包

# 将容器打包
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
bca6dafc7857        2c67e9ee1dae        "/bin/bash"         About a minute ago   Up About a minute   80/tcp              admiring_bhabha
[root@localhost ~]# docker export bca6dafc7857 > centos:latest    # 容器ID > 文件名
[root@localhost ~]# ll
总用量 434156
-rw-------. 1 root root      1685 10月 10 08:55 anaconda-ks.cfg
-rw-r--r--. 1 root root 444568064 10月 13 19:39 centos:latest
[root@localhost ~]# 

docker rename

容器重命名

# 使用rename更改容器名字
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS               NAMES
f8c6cb039673        192.168.111.150:5000/centos   "/bin/bash"         About an hour ago   Up About an hour                        centos01
[root@localhost ~]# docker rename centos01  centos02
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS               NAMES
f8c6cb039673        192.168.111.150:5000/centos   "/bin/bash"         About an hour ago   Up About an hour                        centos02    # centos01更改为centos02
[root@localhost ~]# 

容器命令

说明: 有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !

docker stats  查看进程
docker pull centos

新建容器并启动

# 命令
docker run [可选参数] image 

# 常用参数说明
--name="Name"    # 给容器指定一个名字
-d               # 后台方式运行容器,并返回容器的id!
-i               # 以交互模式运行容器,通过和 -t 一起使用
-t               # 给容器重新分配一个终端,通常和 -i 一起使用
-P               # 随机端口映射(大写)
-p               # 指定端口映射(小结),一般可以有四种写法

docker run [可选参数] image 

# 参数说明 
--name="name"  容器名字  tomcat01 tomcat02 , 用来区分容器 
(删除起过的名字 docker rm -f tomcat01)
-d                       后台方式运行
-it                      使用交互方式运行,进入容器查看内容
-p                       指定容器的端口  -p 8080:8080   
     -P ip:主机端口:容器端口
     -P 主机端口:容器端口 (常用)  主机端口映射到容器端口
     -P 容器端口
     容器端口
-p      随机指定端口

# 测试 启动并进入容器
[root@localhost ~]# docker run -it  centos   /bin/bash 
WARNING: IPv4 forwarding is disabled. Networking will not work.
[root@a784aff52ba6 /]# ls  # 查看容器内的centos  基础版本 很多命令不完善
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@a784aff52ba6 /]# 

列出所有运行的容器

# docker ps 命令
-a      #列出当前正在运行的容器+带出历史运行过的容器
-n=?    #显示最近创建的容器
-q      # 只显示容器的编号
[root@1820fb100ed3 /]# docker ps
bash: docker: command not found
[root@1820fb100ed3 /]# exit     
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS      PORTS     NAMES
eeba3bc61b96   ubuntu:15.10   "/bin/sh -c 'while t…"   2 days ago   Up 2 days             epic_zhukovsky
[root@localhost ~]# docker ps -aq

退出容器

exit       # 容器停止退出
ctrl+P+Q   # 容器不停止退出

启动和停止容器

docker start 容器 id         #启动容器  (可以启用已经关闭的容器)
docker restart 容器id        #重启容器
docker stop  容器id          #停止当前正在运行的容器
docker kill    容器id        #强制停止当前容器

常用其他命令

后台启动容器

# 命令 docker run -d  镜像名
[root@localhost ~]# docker run -d centos

# 问题docker ps 发现 centos 停止了

# 常见的坑 docker 容器使用后台运行 就必须要有一个前台进程, docker 发现没有应用了 就会自动停止
# nginx, 容器启动后, 发现自己没有提供服务, 就会立刻停止 ,就是没有程序了

查看日志

docker logs -f -t --tail  容器,没有日志

# 显示日志
-tf                    # 显示全部日志
--tail number  # 要显示的日志条数

[root@localhost ~]# docker logs -tf --tail 10 容器id

查看容器中进程信息

# 命令 docker top 容器id

[root@localhost ~]# docker top 7f0ad55ec1e0 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                110821              110797              0                   20:35               pts/0               00:00:00            /bin/bash
[root@localhost ~]# 

查看容器/镜像的元数据

# 命令
   docker inspect  容器id

# 测试
[root@localhost ~]# docker inspect 7f0ad55ec1e0 

# 查看容器IP
[root@localhost images]# docker inspect -f {{.NetworkSettings}} f8c6cb039673 

进入正在运行的容器

# 我们通常容器都是使用后台方式运行的,需要进入容器 修改一些配置

# 命令
    docker exec  -it  容器id  bashShell (/bin/bash)
# 测试
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
374fee09f8f4   centos    "/bin/bash"   5 minutes ago   Up 5 minutes             youthful_shamir
[root@localhost ~]# docker exec -it 374fee09f8f4 /bin/bash
[root@374fee09f8f4 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@374fee09f8f4 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 02:13 pts/0    00:00:00 /bin/bash
root         15      0  0 02:20 pts/1    00:00:00 /bin/bash
root         30     15  0 02:20 pts/1    00:00:00 ps -ef
[root@374fee09f8f4 /]# 

# 方式二
docker attach 容器id

# 测试
[root@localhost ~]# docker attach 374fee09f8f4 
[root@374fee09f8f4 /]#

# docker exec -it        # 进入容器后开启一个新的终端,可以在里面操作
# docker attach          # 进入容器正在执行而定终端,不会启动新的进程!

从容器内拷贝文件到主机上

# 命令
docker cp 容器id:容器内路径  目的主机的路径

# 进入docker容器内部
[root@localhost home]# docker run -it centos  /bin/bash
WARNING: IPv4 forwarding is disabled. Networking will not work.
[root@b177dc96f111 /]# cd /home
[root@b177dc96f111 home]# ls
# 在容器内新建一个文件
[root@b177dc96f111 home]# touch ziheng.java
[root@b177dc96f111 home]# exit
[root@localhost home]# docker ps -a -n1
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
b177dc96f111   centos    "/bin/bash"   35 seconds ago   Exited (0) 14 seconds ago             strange_gates
# 将这文件拷贝出来到主机上
[root@localhost home]# docker cp b177dc96f111:/home/ziheng.java /home
[root@localhost home]# ls
cuiziheng  ziheng.java
[root@localhost home]# 

# 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现