共计 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 公布!