Docker学习
Docker介绍
docker是基于go语言的云开源技术。
在开发人员开发实现之后,运维人员部署我的项目,这两头可能会因为环境和跑配置让我的项目跑不起来。
比方我买了一条鱼,店家给我,我回家本人搞鱼缸,本人搞水。最初这条鱼很可能因为环境不适合死掉。
那么正确的做法是,店家把鱼原来生存的鱼缸,水和鱼一起给我,我间接放在家里即可。鱼不会因为环境和配置而死掉。
以前的形式叫搬家,当初通过doker的形式叫搬楼。
其实Docker是放大版的Linux,只有Linux的内核,硬件什么的不须要,共用宿主机的就好。所以Docker很小。
Docker三大技术
镜像 容器 仓库
类 实例
仓库是寄存镜像的中央,一个镜像能够有好多容器。(不晓得对不对)
docker是简易版的linux,大部分linux命令在docker外面都能够运行。
Ubuntu装置docker
# step 1: 装置必要的一些零碎工具sudo apt-get updatesudo 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-CEsudo apt-get -y updatesudo 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 #显示所有的镜像IDdocker 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 公布!