关于java:Docker学习

58次阅读

共计 7643 个字符,预计需要花费 20 分钟才能阅读完成。

Docker 学习

Docker 介绍

docker 是基于 go 语言的云开源技术。

在开发人员开发实现之后,运维人员部署我的项目,这两头可能会因为环境和跑配置让我的项目跑不起来。

比方我买了一条鱼,店家给我,我回家本人搞鱼缸,本人搞水。最初这条鱼很可能因为环境不适合死掉。

那么正确的做法是,店家把鱼原来生存的鱼缸,水和鱼一起给我,我间接放在家里即可。鱼不会因为环境和配置而死掉。

以前的形式叫搬家,当初通过 doker 的形式叫搬楼。

其实 Docker 是放大版的 Linux,只有 Linux 的内核,硬件什么的不须要,共用宿主机的就好。所以 Docker 很小。

Docker 三大技术

镜像 容器 仓库

类 实例

仓库是寄存镜像的中央,一个镜像能够有好多容器。(不晓得对不对)

docker 是简易版的 linux,大部分 linux 命令在 docker 外面都能够运行。

Ubuntu 装置 docker

# step 1: 装置必要的一些零碎工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

# step 2: 装置 GPG 证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# Step 4: 更新并装置 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce 在 Linux 文档中。

Docker 常用命令

帮忙命令

docker version 
docker info   // 这个信息更加具体
docker --help  // 能够查看其它所有命令的阐明 

镜像命令

列出本地主机镜像
decker images 
docker images -a  #列出所有的本地镜像 
docker images -q  #只显示镜像 ID 
docker images -qa #显示所有的镜像 ID
docker images --digests : 显示镜像的摘要信息
docker images --no-trunc : 显示残缺的镜像信息
docker images --digests  --no-trunc  显示的是更加具体的信息 

搜寻某个镜像
docker search 某个 XXX 镜像的名字
docker search tomcat #是在 dockerhub 下面搜寻,然而下载是在阿里云下面下载
docker search -s 30 tomcat #意思是星星超过 30 再列举 这个命令很有用的
docker search -s 30 --no-trunc tomcat #星星超过 30 同时显示残缺的镜像形容 

最下面两个,OFFICIAL 意思是官方版的。

这个搜寻进去的和在 dockerhub 下面搜寻进去的是一样的,看星星都一样

拉取某个镜像 下载镜像
docker pull  某个 XXX 镜像的名字
docker pull tomcat 等价于 docker pull tomcat:latest
删除某个镜像
docker rmi  某个 XXX 镜像的名字
docker rmi -f hello-workd 强制删除一个
docker rmi -f hello-world nginx 删除多个 

间接删除的话,删不掉,能够强制删除。加 -f

容器命令

最神奇的中央就是 docker 能够拉取 centos 镜像。虚拟机啊外面搞了个 docker, 而后下面有搞了个 linux。俄罗斯套娃的感觉。

操作之前先创立一个镜像
docker pull centos
新建启动容器

有了镜像才有容器。

docker run -it 470671670cac  
docker run -it --name="docker-centos" centos 指定它的名字
docker run -it --name dockercentos centos  这样也是指定名字 和上一个差不多 

这样的话,就真的进入了 centos 外面,好神奇。

列出正在运行的容器
docker ps 查看 docker 外面的过程 

ctrl + p +q 退出容器,然而不结
再按 docker ps 就能够看到当初运行的容器 

status 上面的 up 就是正在运行

 docker ps -n 2 刚刚运行的两个容器 

退出容器
exit 退出容器进行
ctrl + p + q 退出容器不进行 
启动容器
docker start 1897847b3d7e(容器 ID 或者容器名)

重启容器
docker restart 容器 ID 或者容器名 
进行容器
docker stop 容器 ID 或者容器名 
强制进行容器
docker kill 容器 ID 或者容器名 

用容器进行命令,尽管停啦。然而这个容器还是在的

能够用 docker ps -n 2 还是能够看到已经开启的容器。

删除曾经进行的容器
docker rm 容器 ID

#如果删除没有进行的容器
docker rm -f 容器 ID
高级命令
启动守护式容器
docker run -d 容器名 
查看容器日志
docker logs -f -t --tail 3 4addd748ced6 
查看容器内过程
docker top 容器 ID

查看容器外部细节
docker inspect 容器 ID

返回后果是一对 json 串

[
    {
        "Id": "4addd748ced617782a4c30885709467675b3955fb89add05e036e25321e096c0",
        "Created": "2020-06-04T06:15:25.404566676Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo hello zzyy;sleep 2;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 7903,
            "ExitCode": 0,
            "Error": "","StartedAt":"2020-06-04T06:15:28.285487056Z","FinishedAt":"0001-01-01T00:00:00Z"},"Image":"sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee","ResolvConfPath":"/var/lib/docker/containers/4addd748ced617782a4c30885709467675b3955fb89add05e036e25321e096c0/resolv.conf","HostnamePath":"/var/lib/docker/containers/4addd748ced617782a4c30885709467675b3955fb89add05e036e25321e096c0/hostname","HostsPath":"/var/lib/docker/containers/4addd748ced617782a4c30885709467675b3955fb89add05e036e25321e096c0/hosts","LogPath":"/var/lib/docker/containers/4addd748ced617782a4c30885709467675b3955fb89add05e036e25321e096c0/4addd748ced617782a4c30885709467675b3955fb89add05e036e25321e096c0-json.log","Name":"/relaxed_hypatia","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,"Capabilities": null,"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/7bb758dbf8a0d7c5395a220706aa1dd7ba46ad5a65ad0ff7ae32890f6ca18e27-init/diff:/var/lib/docker/overlay2/878c448d416b98c84747a7fe0e9d142d6c0547bffee5b8f920d6926d606011a7/diff",
                "MergedDir": "/var/lib/docker/overlay2/7bb758dbf8a0d7c5395a220706aa1dd7ba46ad5a65ad0ff7ae32890f6ca18e27/merged",
                "UpperDir": "/var/lib/docker/overlay2/7bb758dbf8a0d7c5395a220706aa1dd7ba46ad5a65ad0ff7ae32890f6ca18e27/diff",
                "WorkDir": "/var/lib/docker/overlay2/7bb758dbf8a0d7c5395a220706aa1dd7ba46ad5a65ad0ff7ae32890f6ca18e27/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "4addd748ced6",
            "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/sh",
                "-c",
                "while true;do echo hello zzyy;sleep 2;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date":"20200114","org.label-schema.license":"GPLv2","org.label-schema.name":"CentOS Base Image","org.label-schema.schema-version":"1.0","org.label-schema.vendor":"CentOS","org.opencontainers.image.created":"2020-01-14 00:00:00-08:00","org.opencontainers.image.licenses":"GPL-2.0-only","org.opencontainers.image.title":"CentOS Base Image","org.opencontainers.image.vendor":"CentOS"}
        },
        "NetworkSettings": {
            "Bridge": "","SandboxID":"e9b863c6b05b8c8dec325db0225ac6d3e9b7210d9cd4cfa503fb54debf7f2036","HairpinMode": false,"LinkLocalIPv6Address":"",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/e9b863c6b05b",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "3583c8d997bba16b236b00489acb0332add54b90b7ee2157ae5bda26b3e20b66",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress":"172.17.0.2","IPPrefixLen": 16,"IPv6Gateway":"",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "5c68d397ff8ac11416d1652c68d0ecb9fb72b9bfc31b27c5599887e57da42d13",
                    "EndpointID": "3583c8d997bba16b236b00489acb0332add54b90b7ee2157ae5bda26b3e20b66",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "","GlobalIPv6Address":"",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]
进入正在运行的容器并以命令行交互
docker attach 容器 ID

ctrl + p + q 退出当前

从新进去:

docker exec -it 031924a7c4db /bin/bash  #这个是进 tomcat 的目录 
docker exec -t 8414499180e9 ls -l /tmp 这种形式也能够 

只是这种形式事实上并没有进入

相似于隔山打牛的操作,操作完并没有停留在 docker 的 centos 中,而是在外边

将容器内文件拷贝到主机上
docker cp  容器 ID: 容器内门路 目标主机门路
docker cp 容器 ID:/tmp/yml.log /root 将容器中 tmp 下的文件拷贝到 /root 目录下
事实上,yml.log 如同是 centos 下的文件,Ubuntu 上面是没有的。// 比方将 nacos 中 sql 文件拷到宿主机根目录
docker cp nacos:/home/nacos/conf/schema.sql /
// 容器内门路是什么,还是须要进容器外面看一下。pwd 命令 

本文由博客一文多发平台 OpenWrite 公布!

正文完
 0