Docker学习

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  显示的是更加详细的信息

1591189655721

搜索某个镜像
docker search 某个XXX镜像的名字
docker search tomcat #是在dockerhub上面搜索,但是下载是在阿里云上面下载
docker search -s 30 tomcat #意思是星星超过30再罗列 这个命令很有用的
docker search -s 30 --no-trunc tomcat #星星超过30 同时显示完整的镜像描述

1591192109375

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

这个搜索出来的和在dockerhub上面搜索出来的是一样的,看星星都一样

1591192423053

拉取某个镜像 下载镜像
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

1591237289352

容器命令

最神奇的地方就是docker可以拉取centos镜像。 虚拟机啊里面搞了个docker,然后上面有搞了个linux。俄罗斯套娃的感觉。

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

有了镜像才有容器。

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

1591239363731

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

列出正在运行的容器
docker ps 查看docker里面的进程

1591240075125

ctrl + p +q 退出容器,但是不结
再按docker ps 就可以看到现在运行的容器

1591240713514

status 下面的up 就是正在运行

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

1591240848223

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

1591241096481

重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或者容器名

用容器停止命令,虽然停啦。但是这个容器还是在的

可以用docker ps -n 2 还是可以看到曾经开启的容器。

1591250218982

删除已经停止的容器
docker rm 容器ID

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

1591251843617

查看容器内部细节
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 退出以后

重新进去:

1591253563308

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

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

1591253756725

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

1591253816755

将容器内文件拷贝到主机上
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 发布!

你可能感兴趣的:(java)