常用操作

一、基本命令

1.1、显示docker系统信息,包括镜像和容器数
  1. [root@localhost docker]# docker info
  2. Client:
  3. Context: default
  4. Debug Mode: false
  5. Plugins:
  6. app: Docker App (Docker Inc., v0.9.1-beta3)
  7. buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  8. scan: Docker Scan (Docker Inc., v0.17.0)
  9. Server:
  10. ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
  11. errors pretty printing info
  12. [root@localhost docker]#
  13. [root@localhost docker]#

1.2、查看docker版本
[root@localhost docker]# docker version
Client: Docker Engine - Community
 Version:           20.10.15
 API version:       1.41
 Go version:        go1.17.9
 Git commit:        fd82621
 Built:             Thu May  5 13:16:58 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@localhost docker]#

1.3、启动docker
systectl start docker

1.4查看帮助
[root@localhost docker]# docker help

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

二、查看镜像

2.1显示本地所有镜像
[root@localhost ~]# docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
mysql        latest    76152be68449   2 days ago   524MB

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


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

2.2搜素镜像
docker search 搜索镜像

[root@localhost docker]# docker search mysql
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                          MySQL is a widely used, open-source relation…   12562     [OK]       
mariadb                        MariaDB Server is a high performing open sou…   4830      [OK]                                           




# 可选项
-f   针对条件进行过滤
docker search -f=STARS=3000 mysql #过滤STARS大于3000的mysql镜像

2.3下载镜像
[root@localhost docker]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

2.4删除镜像
docker rmi 删除镜像

[root@localhost docker]# docker rmi -f 镜像id

[root@localhost docker]# docker rmi -f 镜像id 容器id

[root@docker-01 ~]# docker rmi -f $(docker images -aq)     #删除所有镜像

三、容器操作

3.1创建并运行容器
docker run [可选参数] image   # 命令格式

#常用参数说明
-- name 容器名字
-d 后台运行
-it 使用交互运行 直接进入容器
-p 指定容器端口
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口
    -p 容器端口
-P 随机指定端口

3.2列出运行的容器
docker ps [可选参数]

可选参数:
  -a, --all        #列出所有容器          
  -n, --last x    #列出最近创建的x个容器
  -q               #只显示容器id

3.3删除容器
docker rm [可选参数] 容器1 容器2

可选参数:
  -f    #强制删除

# 删除所有容器
[root@docker-01 ~]# docker ps -aq |xargs docker rm -f
[root@docker-01 ~]# docker rm -f $(docker ps -aq)

3.4退出容器
exit 直接退出容器并停止

Ctrl+P+Q 退出但不停止容器

3.5容器停止后启动
docker start   容器id     #启动容器

docker restart 容器id     #重启容器

docker stop    容器id     #停止容器

docker kill    容器id     #强制停止当前容器

3.6容器的其他常用命令

3.6.1后台运行
[root@docker-01 ~]# docker run -d centos:7

# 问题docker ps 发现 容器并没有运行

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

3.6.2查看日志
docker logs [可选参数] 容器

可选参数:
  -f, --follow         #实时监控日志
  -t, --timestamps     #显示时间戳
  -n,--tail number    #指定要显示日志的条数

3.6.3查看容器中的进程
docker top

# UUID 用户id
# PID进程id
# PPID是父进程

3.6.4查看容器元数据
docker inspect 容器id

3.6.5进入容器
docker exec [可选项] 容器id bashshell

可选项:
  -i :即使没有附加也保持STDIN 打开 (可交互)
  -d :分离模式: 在后台运行
  -t :分配一个伪终端
docker attach [可选项] 容器id

# attach使用exit退出容器时容器也会关闭 可以使用Ctrl+P+Q退
出容器

两者的区别:
  docker exec: 进入容器后分配一个新的终端(常用)
  docker attach: 进入容器后不会启用新的终端,可以多人同时连接共享屏幕

3.6.6容器和主机之前拷贝文件
docker cp [可选项] 容器id:文件路径 宿主机目标路径

docker cp [可选项] 宿主机文件路径   目标容器路径

可参数
  -L :保持源目标中的链接


#进入容器 touch一个文件
[root@docker-01 ~]# docker attach 3c365d251d2c
[root@3c365d251d2c /]# touch qinziteng.txt

#退出容器 将在容器上创建的文件copy到宿主机
[root@docker-01 ~]# docker cp 3c365d251d2c:/qinziteng.txt .
[root@docker-01 ~]# ls anaconda-ks.cfg qinziteng.txt

#演示宿主机向容器copy文件
[root@docker-01 ~]# touch shenming.txt
[root@docker-01 ~]# docker cp shenming.txt test1:/home/
[root@docker-01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED    
    STATUS         PORTS     NAMES
3c365d251d2c   centos:7   "/bin/bash"   22 minutes
ago   Up 22 minutes             test2

[root@docker-01 ~]# docker cp shenming.txt 3c365d251d2c:/home/
[root@docker-01 ~]# docker attach 3c365d251d2c
[root@3c365d251d2c /]# ls /home/shenming.txt