Docker常用命令

| 标签 Docker 

1. 帮助启动类

  • 启动docker: systemctl start docker
  • 停止docker: systemctl stop docker
  • 重启docker: systemctl restart docker
  • 查看docker状态: systemctl status docker
  • 开机启动: systemctl enable docker
  • 查看docker概要信息: docker info
  • 查看docker总体帮助文档: docker –help
  • 查看docker命令帮助文档: docker 具体命令 –help

2. 镜像命令

1. docker images 列出本地主机上的镜像

[root@AliyunServer ~]# docker images
REPOSITORY                                       TAG       IMAGE ID       CREATED         SIZE
172.28.109.11:5000/myubuntu                      1.2       07939a421f78   5 hours ago     108MB
myubuntu                                         1.2       07939a421f78   5 hours ago     108MB
registry.cn-hangzhou.aliyuncs.com/mhk/myubuntu   1.1       22738596713b   21 hours ago    175MB
tomcat                                           latest    fb5657adc892   6 weeks ago     680MB
mysql                                            5.7       c20987f18b13   7 weeks ago     448MB
registry                                         latest    b8604a3fe854   2 months ago    26.2MB
ubuntu                                           latest    ba6acccedd29   3 months ago    72.8MB
hello-world                                      latest    feb5d9fea6a5   4 months ago    13.3kB
redis                                            6.0.8     16ecd2772934   15 months ago   104MB
billygoo/tomcat8-jdk8                            latest    30ef4019761d   3 years ago     523MB

各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签版本号
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。 如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像

OPTIONS说明: -a :列出本地所有的镜像(含历史映像层) -q :只显示镜像ID

[root@AliyunServer ~]# docker images -a
REPOSITORY                                       TAG       IMAGE ID       CREATED         SIZE
172.28.109.11:5000/myubuntu                      1.2       07939a421f78   5 hours ago     108MB
myubuntu                                         1.2       07939a421f78   5 hours ago     108MB
registry.cn-hangzhou.aliyuncs.com/mhk/myubuntu   1.1       22738596713b   21 hours ago    175MB
tomcat                                           latest    fb5657adc892   6 weeks ago     680MB
mysql                                            5.7       c20987f18b13   7 weeks ago     448MB
registry                                         latest    b8604a3fe854   2 months ago    26.2MB
ubuntu                                           latest    ba6acccedd29   3 months ago    72.8MB
hello-world                                      latest    feb5d9fea6a5   4 months ago    13.3kB
redis                                            6.0.8     16ecd2772934   15 months ago   104MB
billygoo/tomcat8-jdk8                            latest    30ef4019761d   3 years ago     523MB

[root@AliyunServer ~]# docker images -q
07939a421f78
07939a421f78
22738596713b
fb5657adc892
c20987f18b13
b8604a3fe854
ba6acccedd29
feb5d9fea6a5
16ecd2772934
30ef4019761d

[root@AliyunServer ~]# docker images -qa
07939a421f78
07939a421f78
22738596713b
fb5657adc892
c20987f18b13
b8604a3fe854
ba6acccedd29
feb5d9fea6a5
16ecd2772934
30ef4019761d

##

2. docker search [OPTIONS] 某个XXX镜像名字

[root@AliyunServer ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   12086     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4631      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   904                  [OK]
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   92                   
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   92                   
centurylink/mysql                 Image containing mysql. Optimized to be link…   59                   [OK]
databack/mysql-backup             Back up mysql databases to... anywhere!         54                   
prom/mysqld-exporter                                                              46                   [OK]
deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   40                   [OK]
linuxserver/mysql                 A Mysql container, brought to you by LinuxSe…   35                   

image.png OPTIONS说明: –limit : 只列出N个镜像,默认25个

[root@AliyunServer ~]# docker search --limit 5 mysql
NAME                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                        MySQL is a widely used, open-source relation…   12086     [OK]       
mysql/mysql-server           Optimized MySQL Server Docker images. Create…   904                  [OK]
mysql/mysql-cluster          Experimental MySQL Cluster Docker images. Cr…   92                   
centos/mysql-57-centos7      MySQL 5.7 SQL database server                   92                   
schickling/mysql-backup-s3   Backup MySQL to S3 (supports periodic backup…   31                   [OK]

3. docker pull 某个XXX镜像名字

下载镜像 docker pull 镜像名字[:TAG] docker pull 镜像名字,没有TAG就是最新版 等价于 docker pull 镜像名字:latest

[root@AliyunServer ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest

4. docker system df 查看镜像/容器/数据卷所占的空间

[root@AliyunServer ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        8         2.371GB   692.6MB (29%)
Containers      13        1         39.41MB   39.41MB (99%)
Local Volumes   6         4         479.9MB   219.7MB (45%)
Build Cache     0         0         0B        0B

5. docker rmi 某个XXX镜像名字ID

删除镜像

  • 删除单个

docker rmi -f 镜像ID

  • 删除多个

docker rmi -f 镜像名1:TAG 镜像名2:TAG

  • 删除全部

docker rmi -f $(docker images -qa)

[root@AliyunServer ~]# docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 915ce3b1145d is using its referenced image feb5d9fea6a5

[root@AliyunServer ~]# docker rmi -f hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:507ecde44b8eb741278274653120c2bf793b174c06ff4eaa672b713b3263477b
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412

3. 容器命令

有镜像才能创建容器, 这是根本前提(下载一个CentOS或者ubuntu镜像演示)

1. 新建+启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG…] OPTIONS说明(常用):有些是一个减号,有些是两个减号 –name=”容器新名字”       为容器指定一个名称; -d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行); -i:以交互模式运行容器,通常与 -t 同时使用; -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用; 也即启动交互式容器(前台有伪终端,等待交互); -P: 随机端口映射,大写P -p: 指定端口映射,小写p image.png

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

[root@AliyunServer ~]# docker run -it ubuntu /bin/bash
root@4743014cb0d6:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:47 pts/0    00:00:00 /bin/bash
root         9     1  0 08:47 pts/0    00:00:00 ps -ef
root@4743014cb0d6:/#

参数说明: -i: 交互式操作。 -t: 终端。 ubuntu : ubuntu 镜像。 /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。 要退出终端,直接输入 exit

2. 列出当前所有正在运行的容器

docker ps [OPTIONS] OPTIONS说明(常用): -a :列出当前所有正在运行的容器+历史上运行过的 -l :显示最近创建的容器。 -n:显示最近n个创建的容器。 -q :静默模式,只显示容器编号。

[root@AliyunServer ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED             STATUS             PORTS                                                  NAMES
4743014cb0d6   ubuntu      "/bin/bash"              3 minutes ago       Up 3 minutes                                                              silly_hermann
f7463c872a14   mysql:5.7   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

3. 退出容器

两种退出方式

  • exit

run进去容器,exit退出,容器停止

  • ctrl+p+q

run进去容器,ctrl+p+q退出,容器不停止

4. 启动已停止运行的容器

docker start 容器ID或者容器名

5. 停止容器

docker stop 容器ID或者容器名

6. 强制停止容器

docker kill 容器ID或容器名

7. 删除已停止的容器

docker rm 容器ID

8. 一次性删除多个容器实例

docker rm -f $(docker ps -a -q) docker ps -a -q | xargs docker rm

9. 重启容器

docker restart 容器ID或者容器名

10. 查看容器日志

docker logs 容器ID

[root@AliyunServer ~]# docker logs f7463c872a14
2022-02-09 07:38:31+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
2022-02-09 07:38:31+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-02-09 07:38:31+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
...

11. 查看容器内运行的进程

docker top 容器ID

[root@AliyunServer ~]# docker top f7463c872a14
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
polkitd             2056                2038                0                   15:40               ?                   00:00:02            mysqld
root                2161                2038                0                   15:41               pts/0               00:00:00            /bin/bash
root                2170                2161                0                   15:41               pts/0               00:00:00            mysql -u root -p

12. 查看容器内部细节

docker inspect 容器ID

[root@AliyunServer ~]# docker inspect f7463c872a14
[
    {
        "Id": "f7463c872a147be8b40a2b36a879bad144903db09d0dd4a626ab698bd3e8fd95",
        "Created": "2022-02-09T07:38:31.098276567Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "mysqld"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 2056,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-02-09T07:40:45.942085391Z",
            "FinishedAt": "2022-02-09T07:40:45.570984489Z"
        },
        ...

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

docker exec -it 容器ID bashShell

[root@AliyunServer ~]# docker exec -it f7463c872a14 /bin/bash
root@f7463c872a14:/# 

重新进入docker attach 容器ID

上述两个区别 attach 直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止。 image.png exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。 image.png 推荐使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。

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

容器→主机 docker cp 容器ID:容器内路径 目的主机路径

[root@AliyunServer ~]# docker cp f7463c872a14:/usr/local/share/mycp.txt /tmp
[root@AliyunServer ~]# cd /tmp/
[root@AliyunServer tmp]# ll
total 4
-rw------- 1 root root    0 Feb  8 23:41 AliyunAssistClientSingleLock.lock
-rw-r--r-- 1 root root    0 Feb  9 17:15 mycp.txt
drwx------ 3 root root 4096 Feb  9 15:15 systemd-private-d75578a72e1148e4acae09601435cfae-chronyd.service-XpxcRq

15. 导入和导出容器

export 导出容器的内容留作为一个tar归档文件[对应import命令] import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export] docker export 容器ID > 文件名.tar image.png cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 image.png


上一篇     下一篇