Docker常用命令

简介

官网:https://www.docker.com/

文档:https://docs.docker.com/docker-for-windows/

命令:https://docs.docker.com/engine/reference/run/

仓库:https://hub.docker.com/

Docker 是一个开源的应用容器引擎。

Docker 的思想来自于集装箱,彼此之间隔离。

Docker 通过隔离机制,可以将服务器利用到极致。

Docker 容器完全使用沙箱机制,相互之间不会有任何接口。

基本命令

Docker 的帮助命令是一个万能命令,可以用来查看 Docker 的所有命令。

docker [命令] --help

查看镜像相关命令

[root@sail ~]# docker images --help
Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
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

查看容器相关命令

[root@sail ~]# docker ps --help
Usage:  docker ps [OPTIONS]
List containers
Options:
  -a, --all             Show all containers (default shows just running)
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print containers using a Go template
  -n, --last int        Show n last created containers (includes all states) (default -1)
  -l, --latest          Show the latest created container (includes all states)
      --no-trunc        Don't truncate output
  -q, --quiet           Only display container IDs
  -s, --size            Display total file sizes

查看 Docker 的基本信息。

[root@sail ~]# docker version

查看 Docker 的系统信息。

[root@sail ~]# docker info

镜像命令

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

# 该命令等价于 docker image ls
docker images [参数] [镜像[:标签]]
    -a:显示所有镜像。
    -q:只显示 ID。
# 显示所有镜像的 ID
docker images -aq

对镜像进行过滤

[root@sail ~]# docker images java
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@sail ~]# docker images hello-world
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB
[root@sail ~]# docker images hello-world:latest
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB

# 结果分析
REPOSITORY:镜像名(镜像仓库源)。
TAG:镜像的标签。
IMAGE ID:镜像的 ID。
CREATED:镜像的创建时间。
SIZE:镜像的大小。

搜索镜像

docker search [参数]
	-f / --filter:根据过滤条件搜索。
	
# 搜索出 Stars 大于 3000 的
docker search mysql -f=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   11789     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4488      [OK]

拉取镜像

# 不输入参数默认拉取最新的
docker pull [参数] 镜像名[:标签]
    -a:拉取镜像的所有标签。
    -q:抑制详细输出。
    
[root@sail ~]# docker pull redis
Using default tag: latest # 默认最新版标签
latest: Pulling from library/redis
e5ae68f74026: Pull complete # 分层下载,docker image的核心:联合文件系统
37c4354629da: Pull complete 
b065b1b1fa0f: Pull complete 
6954d19bb2e5: Pull complete 
6333f8baaf7c: Pull complete 
f9772c8a44e7: Pull complete 
Digest: sha256:2f502d27c3e9b54295f1c591b3970340d02f8a5824402c8179dcd20d4076b796 #防伪签名
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest # 真实地址,docker pull redis 等价于 docker pull docker.io/library/redis:latest

# 指定版本下载
docker pull redis:5.0

删除镜像

docker rmi [参数] 镜像 [镜像...]
	-f:强制删除。
	
# 查看现存镜像
[root@sail ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
redis         5.0       071510791e92   5 days ago     110MB
redis         latest    aea9b698d7d1   6 days ago     113MB
mysql         5.7       738e7101490b   6 days ago     448MB
mysql         latest    bbf6571db497   6 days ago     516MB
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB

# 删除一个。可以通过名称,也可以指定 ID,-f 表示强制删除。
[root@sail ~]# docker rmi -f feb5d9fea6a5

# 删除多个。用空格分隔 ID。
[root@sail ~]# docker rmi -f 738e7101490b bbf6571db497

# 删除所有。先用 docker images -aq 查询出所有镜像,再使用 docker rmi -f 递归删除。
[root@sail ~]# docker rmi -f $(docker images -aq)

运行镜像

docker run [参数] 镜像名
	--name:指定容器的名称,如果正在运行该名称的容器,会报错。
    --rm:用完即删除,通常用来测试。
    -d:后台方式运行。
    -it:使用交互方式运行,可以进入容器查看内容。
    -e:指定运行环境。
    -p:随机指定端口。
    -p:指定容器的端口,如:-p 8080:8080。还可以有以下写法:
        -p ip:主机端口:容器端口
        -p 主机端口:容器端口
        -p 容器端口
        
[root@sail ~]# docker run -it centos /bin/bash
Unable to find image 'centos:latest' locally # 检索本地镜像,发现没有该镜像,则去仓库中搜索。
latest: Pulling from library/centos # 开始从仓库中拉取
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
[root@81c83ea42dc0 /]# ls # 由于是以交互方式运行,且进入 /bin/bash 中,此时的路径即为 centos 容器中的 /bin/bash
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

容器命令

查看容器

docker ps [参数]
	-a:查看所有容器(包括正在运行的和已经停止的)。
    -n:显示最近创建的容器,设置显示个数。
    -q:只显示容器的编号。
    
# 查看正在运行的容器
[root@sail ~]# docker ps

# 查看所有容器
[root@sail ~]# docker ps -a

# 显示最近创建的 2 个容器
[root@sail ~]# docker ps -a -n=2

# 只显示容器的 ID 	
[root@sail ~]# docker ps -aq

退出容器

[root@sail ~]# docker run -it centos /bin/bash
[root@7ac04abd5a1f /]# exit
exit
[root@sail ~]#
[root@sail ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@sail ~]# docker run -it centos /bin/bash
[root@1aaf76d85b9e /]# [root@sail ~]# docker ps # 此时即为使用 Ctrl + P + Q 快捷键的效果
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
1aaf76d85b9e   centos    "/bin/bash"   8 seconds ago   Up 8 seconds             intelligent_proskuriakova

删除容器

docker rm [参数] 容器 [容器...]
	-f:强制删除。
	
# 删除指定容器(不能删除正在运行的容器)
[root@sail ~]# docker rm 1aaf76d85b9e

# 强制删除指定容器
[root@sail ~]# docker rm -f 1aaf76d85b9e

# 删除所有容器。先使用 docker ps -aq 获取所有容器的 ID,再调用 docker rm -f 递归删除。
[root@sail ~]# docker rm -f $(docker ps -aq)

# 删除所有容器。使用管道符 | 获取 Docker 相关的所有容器 ID 并使用 docker rm -f 删除。
[root@sail ~]# docker ps -a -q|xargs docker rm -f

容器运行命令

# 运行关闭的容器
[root@sail ~]# docker start 569026bc0955 

# 停止容器
[root@sail ~]# docker stop 569026bc0955

# 重启容器
[root@sail ~]# docker restart 569026bc0955

# 杀掉容器
[root@sail ~]# docker kill 569026bc0955

常用命令

启动Docker

systemctl start docker

查看日志

 docker logs [参数] 容器
 	-f:日志流动输出。
    -t:展示时间戳。
    --tail:从日志末尾显示的行数。
    
# 容器最后 10 条日志
[root@sail ~]# docker logs -f -t --tail 10 c3d59f55d600

后台启动

# 使用 docker run -d 启动,也并不能保证容器一定能在后台运行,如果没有前台使用,容器启动后发现自己没有提供服务,会立刻停止。
docker run -d 镜像

查看容器信息

# 不管容器是否运行,都可以使用该命令查看。
docker inspect 容器

进入正在运行的容器

docker exec [参数] 容器 路径
	-d:后台运行。
	-it:交互模式进入。
	
# 使用 docker exec 可以进入容器并开启一个新的终端,可以在里面操作。
# 这种进入方式是单独开了一个新进程的方式。
[root@sail ~]# docker exec -it 96ed3fe3e7f1 /bin/bash
[root@96ed3fe3e7f1 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

[root@96ed3fe3e7f1 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Dec09 pts/0    00:00:00 /bin/bash
root        15     0  0 03:38 pts/1    00:00:00 /bin/bash
root        30    15  0 03:39 pts/1    00:00:00 ps -ef
# 这种进入方式没有开启新的进程(/bin/bash 是 centos 容器的默认终端)。
docker attach 容器

[root@sail ~]# docker attach 96ed3fe3e7f1
[root@96ed3fe3e7f1 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Dec09 pts/0    00:00:00 /bin/bash
root        33     1  0 05:49 pts/0    00:00:00 ps -ef

从容器内拷贝文件到主机

# 进入容器,创建一个文件
[root@sail ~]# docker attach 96ed3fe3e7f1
[root@96ed3fe3e7f1 /]# cd /home
[root@96ed3fe3e7f1 home]# touch test.java
[root@96ed3fe3e7f1 home]# ls
test.java
[root@96ed3fe3e7f1 home]# exit
exit

# 退出容器后,不管容器是否启动,都可以复制容器中的文件到主机上
[root@sail ~]# cd /home
[root@sail home]# docker cp 96ed3fe3e7f1:/home/test.java /home
[root@sail home]# ls
admin  f2  f3  sail  test.java

# 这种方式是一个手动过程,很不方便,推荐使用数据卷技术,可以实现自动同步主机和容器的目录。

查看Docker内存占用

docker stats [参数] [容器...]
	-a:查看所有容器的内存占用(默认只展示运行的容器)。

[root@sail home]# docker stats
CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS
96ed3fe3e7f1   centos01   0.00%     524KiB / 1.694GiB   0.03%     0B / 0B   0B / 0B     1

[root@sail home]# docker stats -a
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS
0aee6f74b913   brave_rosalind    0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
c3d59f55d600   musing_poincare   0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
569026bc0955   centos03          0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
71a97b830ec5   centos02          0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
96ed3fe3e7f1   centos01          0.00%     524KiB / 1.694GiB   0.03%     0B / 0B   0B / 0B     1

部署nginx

# 下载镜像
docker pull nginx

# 查看镜像
docker images

# 运行镜像
docker run -d --name=nginx01 -p 3344:80 nginx

# 查看正在运行的容器
docker ps

# 测试 外网可以访问
curl localhost:3344

# 查看容器中 Nginx 目录
docker exec -it nginx01 /bin/bash

部署tomcat

# 后台启动tomcat
docker run -d -p 8080:8080 --name=tomcat01 tomcat

# 查看正在运行的容器
docker ps

# 进入容器
docker exec -it tomcat01 /bin/bash

# 进入 webapps
# 这里发现一个问题,Tomcat 下的 webapps 没有文件,所以 Tomcat 的初始页面是不能显示的。
cp -r webapps.dist/* webapps
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值