Docker信息

docker versin #显示docker的版本信息
docker info   #显示docker的系统信息,包括镜像和容器数量

Docker镜像命令

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

[root@marius /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   5 weeks ago   13.3kB

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

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs  只显示id

docker search 搜索镜像

[root@marius /]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11608     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4417      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   857     

可选项
--filter=stars=3000  #搜索出来的镜像收藏数不小于3000

docker pull xxx 拉取镜像

删除镜像

docker rmi -f  删除全部镜像

docker rmi -f  (image id)

docker rmi -f  $(docker search -aq)  先查出所有镜像id,再通过id删除所有镜像

容器命令

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

docker pull centos

新建容器并启动

docker run [可选参数]  image
#参数说明
--name="Name"  容器名称 tomcat01  tomcat02,用来区分容器
-d             后台方式运行
-it            使用交互方式运行,进入容器查看内容
-p             指定容器的端口,-p 8080:8080
	-p  ip:主机端口:容器端口
	-p  主机端口:容器端口(常用)
	-p  容器端口
-p             随机是定端口

测试

#启动并进入容器
[root@marius /]# docker run -it centos /bin/bash
[root@8fec6b03a4f0 /]#

#查看容器内的centos,基础版本
[root@8fec6b03a4f0 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#从容器退出到主机
[root@8fec6b03a4f0 /]# exit
exit

列出所有运行的容器

docker ps

#查看运行的容器
[root@marius /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#查看当前运行的容器+曾经运行过的容器
[root@marius /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                            PORTS     NAMES
8fec6b03a4f0   centos        "/bin/bash"   5 minutes ago   Exited (130) About a minute ago             pedantic_nobel
46b740e37842   hello-world   "/hello"      2 hours ago     Exited (0) 2 hours ago   happy_ptolemy

#显示最近创建的容器
[root@marius /]# docker ps -a -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                        PORTS     NAMES
8fec6b03a4f0   centos    "/bin/bash"   21 minutes ago   Exited (130) 17 minutes ago             pedantic_nobel

#只显示容器的编号
[root@marius /]# docker ps -aq -n=1
8fec6b03a4f0

退出容器

exit  #容器直接停止并退出
Ctil + P + Q  #容器不停止退出

删除容器

docker rm 容器id
docker rm  $(docker search -aq)  #删除所有容器  -f 强制删除

启动容器和停止容器的操作

docker start  容器id   #启动容器
docker restart 容器id  #重新启动容器
docker stop 容器id     #停止容器
docker kill  容器id    #强行停止容器

其它命令

后台启动容器

#命令 docker run -d 镜像名
[root@marius /]# docker run -d centos   
2c8dec66595c573cb6734386bac157cae58b9ffc09d18be9ec1dc7194ad73e63

#问题docker ps,发现centos停止了

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

#nginx,容器启动后,就会发现自己没有提供服务,就会立即停止,就是没有程序了

查看日志

docker logs

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)

查看容器中进程信息

docker top 容器id

[root@marius /]# docker top e6b94c61c838
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12940               12922               0                   18:55               ?                   00:00:00            /bin/bash

查看镜像的元数据

docker inspect 容器id

[root@marius /]# docker inspect e6b94c61c838
[
    {
        "Id": "e6b94c61c8388e79d5653a52e1c51c58cde02b7ca3566cb0521ab7b65f201331",
        "Created": "2021-10-30T10:41:43.607163917Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 12940,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-10-30T10:55:30.176833293Z",
            "FinishedAt": "2021-10-30T10:46:27.53523793Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        ......
    }
]

进入当前正在运行的容器

docker exec -it 容器id bashShell

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

#命令
docker exec -it 容器id bashShell    //进入容器后开启了一个新的终端,可以在里面操作(常用)

#测试
[root@marius /]# docker exec -it e6b94c61c838  /bin/bash
[root@e6b94c61c838 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@e6b94c61c838 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:55 pts/0    00:00:00 /bin/bash
root        15     0  0 11:05 pts/1    00:00:00 /bin/bash
root        30    15  0 11:05 pts/1    00:00:00 ps -ef

#方式二
docker attach 容器id                //进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机

docker cp

#命令


#进入容器,新建文件
[root@marius /]# docker exec -it e6b94c61c838 /bin/bash 
[root@e6b94c61c838 /]# cd /home
[root@e6b94c61c838 home]# touch marius.java

#退出容器,拷贝文件,注意拷贝文件与容器是否运行无关
[root@e6b94c61c838 home]# exit                  
exit
[root@marius home]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@marius home]# docker cp e6b94c61c838:/home/marius.java /home
[root@marius home]# ls /home
1.txt  marius.java