Docker基础

Docker

Docker基础信息

Docker

Docker文档

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

Docker hub

https://hub.docker.com/

查看Docker信息

docker version
docker info
docker --help

镜像命令

docker显示所有镜像

docker images -a

docker搜索镜像

docker search ***

docker下载镜像

docker pull ***

docker删除镜像

docker rmi -f 镜像ID 镜像ID 镜像ID  # -f 强制删除
docker rmi -f $(docker images -aq) # 删除全部镜像

容器命令

新建容器并启动

docker pull centos          # 下载一个centos镜像
docker run [可选参数] image  # 启动
参数说明:
--name="	name"           # 容器名字,用来区分容器
-d                          # 后台方式运行
-it                         # 使用交互模式运行,进入容器查看内容
-p                          # 指定容器的端口
	-p 主机端口:容器端口      # 主机端口映射到容器端口
	-p 容器端口              # 容器端口
-P                          # 随机指定端口

# 测试,启动并进入容器
root@VM-0-14-ubuntu:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       latest    5d0da3dc9764   15 months ago   231MB
root@VM-0-14-ubuntu:~# docker run -it centos /bin/bash
[root@8f9c88aaf0ef /]# ls       # 查看容器内的centos,基础版本,很多命令不完善
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
# 从容其中退回主机
[root@d9195c5615ca /]# exit     # 退出容器
 exit
root@VM-0-14-ubuntu:/# ls
bin   etc             lib         mnt   run   sys        var
boot  home            lib64       opt   sbin  test_code  vmlinuz
data  initrd.img      lost+found  proc  snap  tmp        vmlinuz.old
dev   initrd.img.old  media       root  srv   usr        web_flowers102

列出运行中的所有容器

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

root@VM-0-14-ubuntu:/# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                       PORTS     NAMES
d9195c5615ca   centos    "/bin/bash"   3 minutes ago    Exited (0) 3 minutes ago               peaceful_galileo
df8c6ac2e723   centos    "/bin/bash"   4 minutes ago    Exited (127) 3 minutes ago             serene_booth
8f9c88aaf0ef   centos    "/bin/bash"   26 minutes ago   Exited (0) 5 minutes ago               adoring_bassi
root@VM-0-14-ubuntu:/# docker ps -aq
d9195c5615ca
df8c6ac2e723
8f9c88aaf0ef

退出容器

exit           # 直接容器停止并推出
Ctrl + P + Q   # 容器不停止退出

root@VM-0-14-ubuntu:/# docker run -it centos /bin/bash
[root@ccf06a116fed /]# root@VM-0-14-ubuntu:/# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
ccf06a116fed   centos    "/bin/bash"   23 seconds ago   Up 23 seconds             hardcore_golick

删除容器

docker rm 容器ID                   # 删除指定的容器
docker rm -f $(docker ps -aq)     # 删除所有的容器
docker ps -a -q|xargs docker rm   # 删除所有的容器

启动和停止容器的操作

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

常用其他命令

后台启动容器

# 命令 
docker run -d 镜像名

# 测试
root@VM-0-14-ubuntu:/# docker run -d centos

# 问题docker ps,发现centos停止了

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

查看日志

# 命令
docker logs [参数] 容器ID

# 测试
root@VM-0-14-ubuntu:/# docker logs -f -t --tail 显示条数 容器ID

# 显示日志
-tf              # 显示全部日志
-- tail number   # 显示日志条数

查看容器中的进程信息

# 命令 
docker top 容器ID

root@VM-0-14-ubuntu:/# docker top b98c82f71d62

查看镜像的元数据

# 命令 
docker inspect 容器ID

# 测试
root@VM-0-14-ubuntu:/# docker inspect b98c82f71d62
[
    {
        "Id": "b98c82f71d62f56df727e71d10fa15c29328452c1b888fd8bac565ec2a6763a6",
        "Created": "2022-12-21T08:11:44.281404103Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-12-21T08:11:44.663985357Z",
            "FinishedAt": "2022-12-21T08:11:44.706876811Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/b98c82f71d62f56df727e71d10fa15c29328452c1b888fd8bac565ec2a6763a6/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/b98c82f71d62f56df727e71d10fa15c29328452c1b888fd8bac565ec2a6763a6/hostname",
        "HostsPath": "/var/lib/docker/containers/b98c82f71d62f56df727e71d10fa15c29328452c1b888fd8bac565ec2a6763a6/hosts",
        "LogPath": "/var/lib/docker/containers/b98c82f71d62f56df727e71d10fa15c29328452c1b888fd8bac565ec2a6763a6/b98c82f71d62f56df727e71d10fa15c29328452c1b888fd8bac565ec2a6763a6-json.log",
        "Name": "/jolly_ishizaka",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/84be057206ae1bb94247f926f64f9c7687e42e7882a07b559c00a581098b31ef-init/diff:/var/lib/docker/overlay2/cafede318472b86f2e490a7b8c43dcc61b23adfb0196ae6813f3b90ea308e4f7/diff",
                "MergedDir": "/var/lib/docker/overlay2/84be057206ae1bb94247f926f64f9c7687e42e7882a07b559c00a581098b31ef/merged",
                "UpperDir": "/var/lib/docker/overlay2/84be057206ae1bb94247f926f64f9c7687e42e7882a07b559c00a581098b31ef/diff",
                "WorkDir": "/var/lib/docker/overlay2/84be057206ae1bb94247f926f64f9c7687e42e7882a07b559c00a581098b31ef/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "b98c82f71d62",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "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": "e7d460d67b3fe23f0f10ee75688ddf3f979ab62468fd6dd0718abfc7b24e0591",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/e7d460d67b3f",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "fdfdbf2699f2256e9a9ed153c524eeb0d803daf70718b3720b367f5759bc1f81",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前正在运行的容器

# 通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 方式一
# 命令
docker exec -it 容器ID bashShell

# 测试
root@VM-0-14-ubuntu:/# docker exec -it b98c82f71d62 /bin/bash

# 方式二
# 命令
docker attach 容器ID

#测试
root@VM-0-14-ubuntu:/# docker attach b98c82f71d62


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

从容器内拷贝到主机上

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

# 测试
root@VM-0-14-ubuntu:/# docker run -it centos /bin/bash
[root@33fbfa30a156 /]# ls 
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@33fbfa30a156 /]# mkdir watson
[root@33fbfa30a156 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  watson
[root@33fbfa30a156 /]# cd watson/
[root@33fbfa30a156 watson]# touch test.py
[root@33fbfa30a156 watson]# vi test.py 
[root@33fbfa30a156 watson]# exit
exit
root@VM-0-14-ubuntu:/# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
33fbfa30a156   centos    "/bin/bash"   2 minutes ago    Exited (0) 8 seconds ago              boring_hypatia
b98c82f71d62   centos    "/bin/bash"   51 minutes ago   Exited (0) 15 minutes ago             jolly_ishizaka
bb3b05d777db   centos    "/bin/bash"   57 minutes ago   Exited (0) 56 minutes ago             dreamy_yonath
root@VM-0-14-ubuntu:/# docker cp 33fbfa30a156:/watson/test.py  /home
root@VM-0-14-ubuntu:/# cd home/
root@VM-0-14-ubuntu:/home# ls
test.py  ubuntu

root@VM-0-14-ubuntu:/# docker cp 33fbfa30a156:/watson/test.py  /home

# 拷贝是一个手动过程,使用 -v 卷的技术,可以实现自动同步

commit 镜像

docker commit 提交容器成为新的副本

# 命令和git原理类似
docker commit -m="提交描述的信息" -a="作者" 容器id 目标镜像名:TAG

# 测试
C:\Users\watson>docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                            PORTS     NAMES
a6c2193d3a16   tomcat    "/bin/bash"   9 minutes ago   Exited (137) About a minute ago             busy_khayyam

C:\Users\watson>docker commit -m="add webapps application" -a="watson" a6c2193d3a16 tomcat:test1.0
sha256:e31281047195b23e93f9c7e54d4e4d94c7b4b469625f7870e86570a3f68e7976

C:\Users\watson>docker images -a
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
tomcat       test1.0   e31281047195   9 seconds ago   478MB
tomcat       latest    1dad8c5497f9   4 weeks ago     474MB
ubuntu       latest    6b7dfa7e8fdb   4 weeks ago     77.8MB
centos       latest    5d0da3dc9764   16 months ago   231MB
# commit提交,保存当前容器的状态,生成一个镜像,类似于虚拟机的“快照”
posted @ 2022-12-20 19:42  watsono  阅读(31)  评论(0编辑  收藏  举报