超详细的Docker常用命令演示步骤和说明

一、帮助命令

docker version # 显示docker的版本信息
docker info    # 显示docker的详细信息
docker --help  # 帮助命令

二、镜像命令

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

[root@wyc /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   13 months ago   13.3kB

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

docker images --help 查看镜像帮助,列出可选项(每个命令都可以用–help查看帮助)

[root@wyc /]# 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

# 可选项
-a, --all    # 列出所有镜像
-f, --filter # 根据提供的条件过滤
-q, --quiet  # 只显示镜像的id

2、搜索镜像 docker search

[root@wyc /]# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13470     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   5141      [OK]       
......

# 可选项 通过搜索来过滤
--filter=star=3000 # 搜索出来的镜像就是stars大于3000的

[root@wyc /]# docker search mysql --filter=stars=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   13470     [OK]       
mariadb   MariaDB Server is a high performing open sou…   5141      [OK]    

3、下载镜像 docker pull

[root@wyc /]# docker pull mysql   # 下载镜像 docker pull 镜像名[:tag]
Using default tag: latest         # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete       # 分层下载,docker images的核心:联合文件系统
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    # 真实地址

docker.io/library/mysql:latest 与 docker pull mysql 是等价的

# 指定版本下载
[root@wyc /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists # 联合文件下载,已经存在的资源可以共用
93619dbc5b36: Already exists 
99da31dd6142: Already exists 
626033c43d70: Already exists 
37d5d7efb64e: Already exists 
ac563158d721: Already exists 
d2ba16033dad: Already exists 
0ceb82207cd7: Pull complete 
37f2405cae96: Pull complete 
e2482e017e53: Pull complete 
70deed891d42: Pull complete 
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

# 此时查看本地镜像,会看到5.7版本的mysql
[root@wyc /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         5.7       c20987f18b13   11 months ago   448MB
mysql         latest    3218b38490ce   11 months ago   516MB
hello-world   latest    feb5d9fea6a5   13 months ago   13.3kB

4、删除镜像 docker rmi

[root@wyc /]# docker rmi -f 镜像id                 # 删除指定镜像

[root@wyc /]# docker rmi -f 镜像id 镜像id 镜像id    # 删除多个镜像(空格分隔)

[root@wyc /]# docker rmi -f $(docker images -aq)  # 删除全部镜像

三、容器命令

说明:有了镜像才可以创建容器,需要下载一个镜像来测试学习。

docker pull centos

# 下载centos镜像
[root@wyc /]# docker pull centos

docker run [可选参数]

# 参数说明
--name="Name" # 容器名字 tomcat01 tomcat02,用来区分容器
-d            # 后台方式运行
-it           # 使用交互方式运行,进入容器查看内容
-p            # 指定容器的端口,-p 8080:8080
-P            # 随机指定端口(大写字母P)

1、新建容器并启动 docker run -it centos /bin/bash

# 启动并进入容器
[root@wyc /]# docker run -it centos /bin/bash
[root@2d4c7e7c43b6 /]# ls  # 查看容器内的centos(基础版本,很多命令都是不完善的)
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

2、退出 exit

# 从容器中退回到主机
[root@2d4c7e7c43b6 /]# exit
exit
[root@wyc /]# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

退出容器有两种方式:

exit # 直接停止容器并退出
Ctrl + P + Q # 快捷键,容器不停止退出

[root@wyc /]# docker run -it centos /bin/bash
[root@cb173129f88f /]# [root@wyc /]# 
[root@wyc /]# 

3、列出所有正在运行的容器 docker ps

# 命令参数可选项
-a   # 列出当前正在运行的容器 + 历史运行过的容器
-n=? # 显示最近创建的容器(可以指定显示几条,比如-n=1)
-q   # 只显示容器的编号

[root@wyc /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@wyc /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                      PORTS     NAMES
2d4c7e7c43b6   centos         "/bin/bash"   5 minutes ago   Exited (0) 44 seconds ago             friendly_curran
4f389b34e144   feb5d9fea6a5   "/hello"      3 days ago      Exited (0) 3 days ago                 zealous_easley

[root@wyc /]# docker ps -aq -n=1
2d4c7e7c43b6

4、删除容器 docker rm 容器id

docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果要强制删除,使用docker rm -f
docker rm -f $(docker ps -aq)   # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器

[root@wyc /]# docker rm 2d4c7e7c43b6
2d4c7e7c43b6

# 不能删除正在运行的容器
[root@wyc /]# docker rm cb173129f88f
Error response from daemon: You cannot remove a running container cb173129f88fe3070881cf4dd761ee951d29b0c1bbaa79e56df5e2f0dcf2c73a. Stop the container before attempting removal or force remove

[root@wyc /]# docker ps -aq
cb173129f88f
4f389b34e144

# 递归删除所有的容器
[root@wyc /]# docker rm -f $(docker ps -aq)
cb173129f88f
4f389b34e144

[root@wyc /]# docker ps -aq
25ae1d9776f6

[root@wyc /]# docker ps -a -q|xargs docker rm
25ae1d9776f6

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

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

四、常用其他命令

1、后台启动容器 docker run -d 镜像名

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

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

2、查看日志 docker logs -f

# 自己编写一段shell脚本
[root@wyc /]# docker run -d centos /bin/sh -c "while true;do echo hello world;sleep 1;done"

# 查看脚本id
[root@wyc /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
6bb072cddbe1   centos    "/bin/sh -c 'while t…"   43 seconds ago   Up 32 seconds             sad_khorana

# 查看日志
-ft # 显示日志
--tail number # 要显示的日志条数
[root@wyc /]# docker logs -ft --tail 10  6bb072cddbe1

3、查看容器中进程信息 docker top 容器id

# 命令 docker top 容器id
[root@wyc /]# docker top 9a6b3cb55aaa
UID           PID           PPID          C             STIME         TTY           TIME           CMD
root          3494          3475          0             19:48         pts/0         00:00:00       /bin/bash

4、查看镜像的元数据 docker inspect 容器id

# 命令 docker inspect 容器id
[root@wyc /]# docker inspect 6bb072cddbe1
[
    {
    
    
        "Id": "6bb072cddbe1d26e7b8e7757079b0d236772f80efeb4f1dd73d8d5d7747f48cf",
        "Created": "2022-11-17T11:51:21.784699056Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo hello world;sleep 1;done"
        ],
        "State": {
    
    
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 137,
            "Error": "",
            "StartedAt": "2022-11-17T11:51:31.72309446Z",
            "FinishedAt": "2022-11-17T11:57:18.501793403Z"
        }
        ......
    }
]

5、进入当前正在运行的容器,我们通常都是用后台方式运行容器的

# 方式一
# 命令 docker exec -it 容器id bashShell
[root@wyc /]# docker exec -it 9a6b3cb55aaa /bin/bash
[root@9a6b3cb55aaa /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@9a6b3cb55aaa /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 11:48 pts/0    00:00:00 /bin/bash
root         16      0  0 12:12 pts/1    00:00:00 /bin/bash
root         31     16  0 12:13 pts/1    00:00:00 ps -ef

# 方式二
# 命令 docker attach 容器id
[root@wyc /]# docker attach 9a6b3cb55aaa
正在执行当前的代码...

# 区别
# docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker bash # 进入容器正在执行的终端,不会启动新的进程

6、从容器内拷贝文件到主机上

# 命令 docker cp 容器id:容器内路径 目的主机路径

# 查看当前主机目录下
[root@wyc home]# ls
docker.java  test  wyc  wychome  zhangsan
[root@wyc home]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
68d51d015aed   centos    "/bin/bash"   About a minute ago   Up About a minute             hungry_moore

# 进入docker容器内部
[root@wyc home]# docker attach 68d51d015aed
[root@68d51d015aed /]# cd /home
[root@68d51d015aed home]# ls

# 在容器内新建文件
[root@68d51d015aed home]# touch test.java
[root@68d51d015aed home]# ls  
test.java
[root@68d51d015aed home]# exit
exit

# 将文件拷贝出来到主机上
[root@wyc home]# docker cp 68d51d015aed:/home/test.java /home
[root@wyc home]# ls
docker.java  test  test.java  wyc  wychome  zhangsan

# 拷贝是一个手动过程,未来我们使用 -v 卷的技术可以实现自动同步(容器内的/home路径和主机上的/home路径打通)

五、常用命令图解

在这里插入图片描述
以上命令均可在 Docker文档 查询!

六、命令练习

Docker安装Nginx

docker hub搜索nginx

# 1、搜索镜像 search 建议去dockerhub上搜索,可以看到帮助文档
[root@wyc /]# docker search nginx

# 2、下载镜像 pull
[root@wyc /]# docker pull nginx

# 3、运行测试
[root@wyc /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   10 months ago   141MB
centos       latest    5d0da3dc9764   14 months ago   231MB

# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
[root@wyc /]# docker run -d --name nginx01 -p 3344:80 nginx
b33738d7b823f7f51412cf79ce025317fbca0ba774d3ad1a71346d9acd14e474
[root@wyc /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
b33738d7b823   nginx     "/docker-entrypoint.…"   15 seconds ago   Up 5 seconds    0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01
fb6ca5820d26   centos    "/bin/bash"              26 minutes ago   Up 26 minutes                                           pedantic_austin

[root@wyc /]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
    
     color-scheme: light dark; }
body {
    
     width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

# 进入容器
[root@wyc /]# docker exec -it nginx01 /bin/bash
root@b33738d7b823:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@b33738d7b823:/# cd /etc/nginx
root@b33738d7b823:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params

Docker安装Tomcat

docker hub搜索tomcat

# 官方的使用
# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到
# docker run -it --rm,一般用来测试,用完即删
docker run -it --rm tomcat

# 1、下载
[root@wyc /]# docker pull tomcat

# 2、启动运行
[root@wyc /]# docker run -d --name tomcat01 -p 3355:8080 tomcat

# 3、进入容器
[root@wyc /]# docker exec -it tomcat01 /bin/bash


# 发现问题:1、Linux命令少了; 2、没有webapps文件夹
# 阿里云镜像的原因:默认是最小的镜像,所有不必要的都剔除掉,保证最小可运行的环境
root@03b1b73b0014:/usr/local/tomcat# ls
BUILDING.txt	 NOTICE		RUNNING.txt  lib	     temp	   work
CONTRIBUTING.md  README.md	bin	     logs	     webapps
LICENSE		 RELEASE-NOTES	conf	     native-jni-lib  webapps.dist

# 把webapps.dist文件夹下的文件复制到webapps文件夹下,就可以访问成功
root@03b1b73b0014:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@03b1b73b0014:/usr/local/tomcat# cd webapps
root@03b1b73b0014:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager

感谢阅读!

参考源:【狂神说Java】Docker最新超详细版教程通俗易懂

猜你喜欢

转载自blog.csdn.net/wyc837279588/article/details/127911733