Docker常用命令

帮助命令

docker version  #查看docker版本
docker info		#查看docker信息
docker 命令 --help #万能命令

Docker中文帮助文档 https://www.runoob.com/docker/docker-command-manual.html

镜像命令

docker images 查看本机镜像

[root@iz2zeaet7s13lfkc8r3e2kz /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

#解释
REPOSITORY	镜像的仓库源
TAG			镜像的标签
IMAGE ID 	镜像的id
CREATED		镜像的创建时间
SIZE		镜像的大小

#可选项
  -a, --all            # 列出所有的镜像
  -q, --quiet          # 只显示镜像id

docker search 搜索镜像

[root@iz2zeaet7s13lfkc8r3e2kz /]# docker search mysql 
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   9525                [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   3457                [OK]                

#可选项 通过收藏来过滤
--filter=STARS=3000  # 搜索出来的镜像就是STARS大于3000的
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker search mysql --filter=STARS=3000
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql               MySQL is a widely used, open-source relation…   9525                [OK]                
mariadb             MariaDB is a community-developed fork of MyS…   3457                [OK]                

docker pull 下载镜像

# 下载镜像 docker pull 镜像名[:tag]
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker pull mysql
Using default tag: latest  	#如果不写 tag,默认就是 latest
latest: Pulling from library/mysql
afb6ec6fdc1c: Pull complete 	# 分层下载,docker iamge的核心 联合文件系统
0bdc5971ba40: Pull complete 
97ae94a2c729: Pull complete 
f777521d340e: Pull complete 
1393ff7fc871: Pull complete 
a499b89994d9: Pull complete 
7ebe8eefbafe: Pull complete 
597069368ef1: Pull complete 
ce39a5501878: Pull complete 
7d545bca14bf: Pull complete 
211e5bb2ae7b: Pull complete 
5914e537c077: Pull complete 
Digest: sha256:a31a277d8d39450220c722c1302a345c84206e7fd4cdb619e7face046e89031d #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

# 等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
afb6ec6fdc1c: Already exists 
0bdc5971ba40: Already exists 
97ae94a2c729: Already exists 
f777521d340e: Already exists 
1393ff7fc871: Already exists 
a499b89994d9: Already exists 
7ebe8eefbafe: Already exists 
4eec965ae405: Pull complete 
a531a782d709: Pull complete 
270aeddb45e3: Pull complete 
b25569b61008: Pull complete 
Digest: sha256:d16d9ef7a4ecb29efcd1ba46d5a82bda3c28bd18c0f1e3b86ba54816211e1ac4
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi 删除镜像!

[root@iz2zeaet7s13lfkc8r3e2kz /]# docker rmi -f 镜像id #删除指定的镜像

[root@iz2zeaet7s13lfkc8r3e2kz /]# docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像

[root@iz2zeaet7s13lfkc8r3e2kz /]# docker rmi -f $(docker images -aq) #删除全部的镜像

容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

docker pull centos #下载镜像

新建容器并启动

docker run [可选参数] image

#参数说明
--name="Name"   	容器名字
-d					后台方式运行
-it					使用交互方式运行,进入容器查看内容
-P					随机指定端口 大写P
	-P ip:主机端口:容器端口
	-P 主机端口:容器端口 (常用)
	-P 容器端口
-p					指定容器端口 小写p

# 测试,启动并进入容器
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker run -it centos /bin/bash
[root@97ef278de6f0 /]# ls   # 查看容器内的centos,基础版本,很多命令都是不完整的!
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 退出容器 回到主机
[root@97ef278de6f0 /]# exit		
exit
[root@iz2zeaet7s13lfkc8r3e2kz /]# 

列出所有运行中的容器

#docker ps 命令
	#列出当前正在运行的容器
-a  # 列出当前正在运行的容器+历史运行的容器
-n=?  # 显示最近创建的容器,参数=几个
-q # 只显示容器的编号

[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps  
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps -a 	
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
97ef278de6f0        centos              "/bin/bash"         5 minutes ago       Exited (0) 2 minutes ago                       goofy_khayyam
3a0067b9c3d2        bf756fb1ae65        "/hello"            22 hours ago        Exited (0) 22 hours ago                        gallant_yalow
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps -a -n=1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
97ef278de6f0        centos              "/bin/bash"         8 minutes ago       Exited (0) 5 minutes ago                       goofy_khayyam
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps -aq
97ef278de6f0
3a0067b9c3d2


退出容器

exit #直接容器停止并退出
Ctrl + p + Q  #快捷键 容器不停止退出
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker run -it centos /bin/bash
[root@5dae10d25a15 /]# [root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5dae10d25a15        centos              "/bin/bash"         21 seconds ago      Up 20 seconds                           charming_khorana

删除容器

docker rm 容器id 			# 删除指定的容器,不能删除正在运行的容器,如果强制删除 rm -f
docker rm -f $(docker ps -aq)	# 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器

[root@iz2zeaet7s13lfkc8r3e2kz /]# docker rm 97ef278de6f0
97ef278de6f0
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker rm 5dae10d25a15
Error response from daemon: You cannot remove a running container 5dae10d25a153478058374a7347e0d5590faf73600bae7904bebe95ac2f958ff. Stop the container before attempting removal or force remove
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps -aq
5dae10d25a15
3a0067b9c3d2
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker rm -f $(docker ps -aq)
5dae10d25a15
3a0067b9c3d2
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps -aq
[root@iz2zeaet7s13lfkc8r3e2kz /]# 

启动和停止容器的操作

docker start 容器id		# 启动容器
docker restart 容器id		# 重启容器
docker stop 容器id		# 停止当前正在运行的容器
docker kill 容器id		# 强制停止当前容器

[root@iz2zeaet7s13lfkc8r3e2kz /]# docker start a52c8069d8b3
a52c8069d8b3
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
a52c8069d8b3        centos              "/bin/bash"         About a minute ago   Up 6 seconds                            zen_bartik
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker stop a52c8069d8b3
a52c8069d8b3
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@iz2zeaet7s13lfkc8r3e2kz /]# 

常用的其他命令

后台启动

# 命令 docker run -d 镜像名
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker run -d centos
a8cdc1d2837f7e5a684e3b30cd5b4a1d27f91c1abf3755d902bdd10675d69922

#问题 docker ps发现centos停止了

#常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

查看日志

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

# 自己编写一段shell脚本
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
2cade8e67ea8cb76326126a84ec90ad492b7cf2fd03aa9cd7bc4f9a4692d4a11
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           
2cade8e67ea8        centos              "/bin/sh -c 'while t…"   2 seconds ago       Up 1 

#显示日志
-tf #显示日志
--tail number #要显示日志的条数
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker logs -tf --tail 10 2cade8e67ea8

查看容器中进程信息

# 命令 docker top 容器id
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker top 2cade8e67ea8
UID                 PID                 PPID                C                   STIME              
root                13417               13393               0                   16:46           
root                13904               13417               0                   16:53       

查看镜像的元数据

#命令 
docker inspect 容器id
# 测试
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker inspect 2cade8e67ea8
[
    {
        "Id": "2cade8e67ea8cb76326126a84ec90ad492b7cf2fd03aa9cd7bc4f9a4692d4a11",
        "Created": "2020-05-22T08:46:29.264103976Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo kuangshen;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 13417,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-05-22T08:46:29.792169723Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        }
        ···
     }
]

进入当前正在运行的容器

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

# 命令
docker exec -it 容器id bashShell

#测试
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker exec -it 2cade8e67ea8 /bin/bash
[root@2cade8e67ea8 /]# 

# 方式二
docker attach 容器id

#测试
[root@iz2zeaet7s13lfkc8r3e2kz /]# docker attach 2cade8e67ea8
正在执行当前的代码...

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

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

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

#测试
[root@iz2zeaet7s13lfkc8r3e2kz home]# docker attach 138a6014e476		进入容器
[root@138a6014e476 /]# cd /home
[root@138a6014e476 home]# ls
[root@138a6014e476 home]# touch test.java		创建文件
[root@138a6014e476 home]# ls
test.java
[root@138a6014e476 home]# exit					退出
exit
[root@iz2zeaet7s13lfkc8r3e2kz home]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@iz2zeaet7s13lfkc8r3e2kz home]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
138a6014e476        centos              "/bin/bash"         2 minutes ago       Exited (0) 11 seconds ago                       happy_wright
[root@iz2zeaet7s13lfkc8r3e2kz home]# docker cp 138a6014e476:/home/test.java /home  拷贝到主机
[root@iz2zeaet7s13lfkc8r3e2kz home]# ls
test.java  www  ysl  ysl.java

原文地址:https://www.cnblogs.com/yslss/p/12982088.html