Docker常用命令

帮助命令

  1. docker verison # 显示docker版本信息
  2. docker info # 显示docker系统信息
  3. docker 命令 --help # 帮助命令

镜像命令

查看主机上的镜像

  1. #
  2. [root@izuf65mhum14tjzqrobqrsz ~]# docker images / docker image list
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. hello-world latest d1165f221234 2 months ago 13.3kB
  5. # 可选项
  6. -a, --all # 列出所有镜像
  7. -q, --quiet # 只列出镜像id

列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。
你可以通过以下命令来便捷的查看镜像、容器、数据卷所占用的空间。

  1. $ docker system df
  2. TYPE TOTAL ACTIVE SIZE RECLAIMABLE
  3. Images 11 1 1.14GB 1.112GB (97%)
  4. Containers 2 0 2.228kB 2.228kB (100%)
  5. Local Volumes 0 0 0B 0B
  6. Build Cache 578 0 12.6GB 12.6GB

搜索容器

  1. [root@izuf65mhum14tjzqrobqrsz ~]# docker search mysql
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. mysql MySQL is a widely used, open-source relation 10842 [OK]
  4. mariadb MariaDB Server is a high performing open sou 4091 [OK]
  5. mysql/mysql-server Optimized MySQL Server Docker images. Create 800 [OK]
  6. # 可选项,通过搜索过滤
  7. --filter=STARS=3000 #START大于3000的

下载镜像

  1. # 下载镜像 docker pull 镜像名 [:tag] docker pull [选项] [Docker Registry 地址[:端口]/]仓库名[:标签]
  2. [root@izuf65mhum14tjzqrobqrsz ~]# docker pull mysql
  3. Using default tag: latest # 不写tag默认latest
  4. latest: Pulling from library/mysql
  5. f7ec5a41d630: Pull complete # 分层下载,docker image的核心,联合文件系统
  6. 9444bb562699: Pull complete
  7. 6a4207b96940: Pull complete
  8. 181cefd361ce: Pull complete
  9. 8a2090759d8a: Pull complete
  10. 15f235e0d7ee: Pull complete
  11. d870539cd9db: Pull complete
  12. 493aaa84617a: Pull complete
  13. bfc0e534fc78: Pull complete
  14. fae20d253f9d: Pull complete
  15. 9350664305b3: Pull complete
  16. e47da95a5aab: Pull complete
  17. Digest: sha256:04ee7141256e83797ea4a84a4d31b1f1bc10111c8d1bc1879d52729ccd19e20a
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest # 真实地址

删除镜像

  1. docker rmi -f 镜像id ... # 删除制定的镜像
  2. docker rmi -f $(docker images -aq) # 删除全部的镜像

修改镜像标签

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

  1. # docker tag ubuntu:15.10 runoob/ubuntu:v3

容器命令

说明:我们有了镜像才可以创建容器
`docker pull centos

新建容器并启动

  1. docker run [可选参数] image
  2. # 参数
  3. --name="Name" # 容器名字
  4. -d # 后台方式运行
  5. -it # 使用交互方式运行,进入容器查看内容 i交互式操作 t终端
  6. -p # 指定容器的端口 -p 8080:8080
  7. -p ip:主机端口:容器端口
  8. -p 主机端口:容器端口 (常用)
  9. -p 容器端口
  10. [root@izuf65mhum14tjzqrobqrsz ~]# docker run -it centos /bin/bash bash是交互式的shell
  11. [root@6b215ff1a432 /]# ls
  12. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  13. # 退出
  14. exit
  15. Ctrl + P + Q # 容器不停止退出

当利用docker run来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

    后台运行

    更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加-d参数来实现。下面举两个例子来说明一下。
    如果不使用-d参数运行容器。
    $ docker run ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    hello world
    hello world
    hello world
    hello world
    
    容器会把输出的结果 (STDOUT) 打印到宿主机上面。如果使用了-d参数运行容器。
    $ docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a
    
    此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs 查看)。

    注: 容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。

使用-d参数启动后会返回一个唯一的 id,也可以通过docker container ls命令来查看容器信息。

$ docker container ls \ docker ps
CONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES
77b2dc01fe0f  ubuntu:16.04  /bin/sh -c 'while tr  2 minutes ago  Up 1 minute        agitated_wright
要获取容器的输出信息,可以通过 docker container logs 命令。
$ docker container logs [container ID or NAMES]
hello world
hello world
hello world
. . .

列出所有的运行容器

docker ps       # 列出当前正在运行的容器
docker ps -a    # 列出当前正在运行的容器,带出历史运行过的容器
docker ps -n=?  #    显示最近创建的容器
docker ps -q    # 只显示容器编号

删除容器

docker rm 容器id      # 删除指定容器
docker rm -f $(docker ps -aq)  # 删除所有容器,包括正在进行的
docker container prune  # 删除所有已经停止的容器

启动和停止容器

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

常用其他命令


后台启动容器

# 命令 docker run -d 镜像名
docker run -d centos
发现centos停止
docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有就会停止

查看日志

[root@ ~]# docker run -d centos /bin/sh -c "while true; do echo helloWorld; sleep 1; done"
d8df7e2b197acf010c1e76b1f13c82a4b73f8411a510221678476ae58368331e

[root@ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
d8df7e2b197a   centos    "/bin/sh -c 'while t…"   6 seconds ago   Up 6 seconds             condescending_dirac

docker logs -t -f d8df7e2b197a
2021-05-09T15:16:56.213965958Z helloWorld
2021-05-09T15:16:57.217005415Z helloWorld
2021-05-09T15:16:58.220298597Z helloWorld
2021-05-09T15:16:59.223080338Z helloWorld
2021-05-09T15:17:00.225780271Z helloWorld
2021-05-09T15:17:01.228778258Z helloWorld
2021-05-09T15:17:02.232387663Z helloWorld
...

查看容器中的进程信息

# docker top 容器id

查看镜像的元素数据

# docker inspect 容器id

进入正在运行的容器

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

方式一:进入容器开始一个新的终端,可以在里面操作
# docker exec -it 容器id bashShell
docker exec -it dc48sdjlwq /bin/bash 

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

从容器上拷贝到主机上

docker cp 61d070035384:/home/hello.java /home/hqw/Documents/Java/