Docker入门学习(三)

138 阅读7分钟

这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

Docker入门学习(1)~概念原理

Docker入门学习(2)~命令学习

0, 前言

本编主要还是介绍Docker常用的命令,在实际工作中必须会使用的

1, 后端启动容器

# 命令 docker run -d  镜像名

[root@VM-0-7-centos /]# docker run -d centos

# 问题docker ps 发现 centos停止了
# 常见的坑, docker容器使用后台运行,就必须要有一个前台进程, docker发现没有应用,就会自动停止
# 比如:nginx容器启动后,发现自己没有提供服务, 就会立刻停止,就没有程序了

2, 查看日志

#命令  docker logs
[root@VM-0-7-centos /]# docker logs -f -t --tail 100 容器ID

# 显示日志
-tf
--taill number  要显示的日志条数

# 不加tail就是显示所有的日志
docker logs -ft 容器ID

# 显示指定的日志条数
docker logs -ft --tail 10 容器ID

3, 查看容器中进程信息

#命令:docker top 容器DI
[root@VM-0-7-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS        PORTS     NAMES
08213b58ef16   centos    "/bin/bash"   26 hours ago   Up 26 hours             silly_vaughan
[root@VM-0-7-centos /]# docker top 08213b58ef16
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                25254               25236               0                   Nov13               pts/0               00:00:00            /bin/bash
[root@VM-0-7-centos /]# 

4, 镜像源数据

#命令 docker inspect 容器ID

[root@VM-0-7-centos /]# docker inspect 08213b58ef16
[
    {
        "Id": "08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1",
        "Created": "2021-11-13T10:53:30.720127052Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 25254,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-11-13T10:53:30.988378856Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1/hostname",
        "HostsPath": "/var/lib/docker/containers/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1/hosts",
        "LogPath": "/var/lib/docker/containers/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1-json.log",
        "Name": "/silly_vaughan",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/9a3f89f756239af691c4f97675b3fd54abc1af82da4179f1ee9421b75906e383-init/diff:/var/lib/docker/overlay2/feb62e3993a48053ea8874247d96656f3938d4f8327ad2459e2615d085bd6dde/diff",
                "MergedDir": "/var/lib/docker/overlay2/9a3f89f756239af691c4f97675b3fd54abc1af82da4179f1ee9421b75906e383/merged",
                "UpperDir": "/var/lib/docker/overlay2/9a3f89f756239af691c4f97675b3fd54abc1af82da4179f1ee9421b75906e383/diff",
                "WorkDir": "/var/lib/docker/overlay2/9a3f89f756239af691c4f97675b3fd54abc1af82da4179f1ee9421b75906e383/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "08213b58ef16",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "249404d41f6c80cc3acba6026d84c6eb416ecc0e814ca8d68a4ec6db0f0e6743",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/249404d41f6c",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "77115fb3fbe23edea3603626829b5b48cf02d73dcc20840f1222c0ea1c8b3e34",
            "Gateway": "172.18.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.18.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:12:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "88b3a5d4df597d2b8fcf9064a672be74d3daf06cf5c1d2e0f0e4e5850ad408e9",
                    "EndpointID": "77115fb3fbe23edea3603626829b5b48cf02d73dcc20840f1222c0ea1c8b3e34",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

5, 进入当前正在运行的容器

#通常容器都是使用后台方式运行的,如果我们需要进入容器,修改一些配置
#命令 1
docker exec -it 容器ID    /bin/bash

# 命令2
docker attach  容器ID

#命令1和命令2的区别
#docker exec    #进入容器后开启一个新的终端,可以在里面操作
#docker attach  #进入容器正在执行的终端,不会启动新的进程

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

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

# 举例:从容器内把文件copy出来

# 1 进入容器内部
[root@VM-0-7-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS        PORTS     NAMES
08213b58ef16   centos    "/bin/bash"   26 hours ago   Up 26 hours             silly_vaughan
[root@VM-0-7-centos ~]# docker attach 08213b58ef16
[root@08213b58ef16 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@08213b58ef16 /]# cd home/
[root@08213b58ef16 home]# ls
# 在容器内部创建一个文件
[root@08213b58ef16 home]# touch index.html
[root@08213b58ef16 home]# exit
exit
[root@VM-0-7-centos ~]# ls
app  soft  work
[root@VM-0-7-centos ~]# pwd
/root

# 将文件拷贝出来到主机上
[root@VM-0-7-centos ~]# docker cp 08213b58ef16:/home/index.html /root
[root@VM-0-7-centos ~]# ls
app  index.html  soft  work
[root@VM-0-7-centos ~]# 

## 注意:拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现双向同步

7, 命令小结

1636896788112.png

attach     # 当前shell下, attach连接指定运行的镜像
build      # 通过Dockerfile定制镜像
commit     # 提交当前容器为新的镜像
cp         # 从容器中拷贝指定文件或者目录到宿主机中
create     # 创建一个新的容器, 同run, 但是不启动容器
diff       # 查看docker容器变化
events     # 从docker 服务获取容器实时事件
exec       # 在已存在的容器上运行命令
export     # 导出容器的内容流作为一个tar归档文件
history    # 展示一个镜像形成历史
images     # 列出系统当前镜像
import     # 从tar包中的容器创建一个新的文件系统映像
info       # 显示系统系统相关信息
inspect    # 查看容器详细信息
kill       # kill掉指定docker容器
load       # 从一个tar包中加载一个镜像
login      # 注册或者登陆一个docker源服务器
logout     # 从当前docker registry 退出
logs       # 查看当前容器日志信息
port       # 查看映射端口对应的容器内部源端口
pause      # 暂停容器
ps         # 列出容器列表
pull       # 从docker镜像源服务器拉取指定镜像
push       # 推送指定镜像或者库镜像至docker源服务器
restart    # 重启运行的容器
rm         # 移除一个或者多个容器
rmi        # 移除一个或多个镜像
run        # 创建一个新的容器并运行
save       # 保存一个镜像为一个tar包
search     # 在docker hub中搜索镜像
start      # 启动容器
stop       # 停止容器
tag        # 给源中镜像打标签
top        # 查看容器中运行的进程信息
unpause    # 取消暂停容器
version    # 查看docker版本号
wait       # 截取容器停止时的退出状态值