
作者:乐章
https://www.cnblogs.com/zhangxingeng/p/11236968.html
一、简介
1、了解Docker的前生LXC
2、LXC与docker什么关系?
3、什么是docker
4、docker官方文档
5、为什么docker越来越受欢迎
容器化越来越受欢迎,因为容器是:
灵活:即使是最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:您可以即时部署更新和升级。
便携式:您可以在本地构建,部署到云,并在任何地方运行。
可扩展:您可以增加并自动分发容器副本。
可堆叠:您可以垂直和即时堆叠服务。
镜像和容器(contalners)
容器和虚拟机

6、docker版本
7、docker和openstack的几项对比

8、容器在内核中支持2种重要技术

cgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理
cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源载分配和再利用
所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组
资源限制:可以对任务使用的资源总额进行限制
优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
任务控制:cgroup可以对任务执行挂起、恢复等操作
9、了解docker三个重要概念
10、docker的主要用途
发布服务不用担心服务器的运行环境,所有的服务器都是自动分配docker,自动部署,自动安装,自动运行
再不用担心其他服务引擎的磁盘问题,cpu问题,系统问题了
资源利用更出色
自动迁移,可以制作镜像,迁移使用自定义的镜像即可迁移,不会出现什么问题
管理更加方便了
11、docker改变了什么
面向产品:产品交付
面向开发:简化环境配置
面向测试:多版本测试
面向运维:环境一致性
面向架构:自动化扩容(微服务)
二、docker架构
1、总体架构

distribution 负责与docker registry交互,上传洗澡镜像以及v2 registry 有关的源数据
registry负责docker registry有关的身份认证、镜像查找、镜像验证以及管理registry mirror等交互操作
image 负责与镜像源数据有关的存储、查找,镜像层的索引、查找以及镜像tar包有关的导入、导出操作
reference负责存储本地所有镜像的repository和tag名,并维护与镜像id之间的映射关系
layer模块负责与镜像层和容器层源数据有关的增删改查,并负责将镜像层的增删改查映射到实际存储镜像层文件的graphdriver模块
graghdriver是所有与容器镜像相关操作的执行者
2、docker架构2
3、docker架构3

三、docker架构2各个模块的功能(带完善)
1、docker client
2、docker daemon
3、docker server

4、engine
5、job
6、docker registry
7、Graph




9、libcontainer

10、docker container
用户通过指定容器镜像,使得Docker容器可以自定义rootfs等文件系统;
用户通过指定计算资源的配额,使得Docker容器使用指定的计算资源;
用户通过配置网络及其安全策略,使得Docker容器拥有独立且安全的网络环境;
用户通过指定运行的命令,使得Docker容器执行指定的工作。

四、docker简单使用
1、安装
yum install docker -ysystemctl enable dockersystemctl start docker
vim /usr/lib/systemd/system/docker.service[root@web1 ~]# vim /usr/lib/systemd/system/docker.service[Unit]Description=Docker Application Container EngineDocumentation=http://docs.docker.comAfter=network.targetWants=docker-storage-setup.serviceRequires=docker-cleanup.timer[Service]Type=notifyNotifyAccess=mainEnvironmentFile=-/run/containers/registries.confEnvironmentFile=-/etc/sysconfig/dockerEnvironmentFile=-/etc/sysconfig/docker-storageEnvironmentFile=-/etc/sysconfig/docker-networkEnvironment=GOTRACEBACK=crashEnvironment=DOCKER_HTTP_HOST_COMPAT=1Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbinExecStart=/usr/bin/dockerd-current --registry-mirror=https://rfcod7oz.mirror.aliyuncs.com #这个值可以登陆阿里云账号请参考下图--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current--default-runtime=docker-runc--exec-opt native.cgroupdriver=systemd--userland-proxy-path=/usr/libexec/docker/docker-proxy-current--init-path=/usr/libexec/docker/docker-init-current--seccomp-profile=/etc/docker/seccomp.json$OPTIONS$DOCKER_STORAGE_OPTIONS$DOCKER_NETWORK_OPTIONS$ADD_REGISTRY$BLOCK_REGISTRY$INSECURE_REGISTRY$REGISTRIESExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=1048576LimitNPROC=1048576LimitCORE=infinityTimeoutStartSec=0Restart=on-abnormalKillMode=process[Install]WantedBy=multi-user.target

[root@web1 ~]# docker versionClient:Version: 1.13.1API version: 1.26Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64Go version: go1.10.3Git commit: b2f74b2/1.13.1Built: Wed May 1 14:55:20 2019OS/Arch: linux/amd64Server:Version: 1.13.1API version: 1.26 (minimum version 1.12)Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64Go version: go1.10.3Git commit: b2f74b2/1.13.1Built: Wed May 1 14:55:20 2019OS/Arch: linux/amd64Experimental: false
docker pull alpine #下载镜像docker search nginx #查看镜像docker pull nginx
4、查看已经下载的镜像
[]REPOSITORY TAG IMAGE ID CREATED SIZEzxg/my_nginx v1 b164f4c07c64 8 days ago 126 MBzxg/my_nginx latest f07837869dfc 8 days ago 126 MBdocker.io/nginx latest e445ab08b2be 2 weeks ago 126 MBdocker.io/alpine latest b7b28af77ffe 3 weeks ago 5.58 MBdocker.io/centos latest 9f38484d220f 4 months ago 202 MB[]
5、导出镜像
docker save nginx >/tmp/nginx.tar.gz
6、删除镜像
docker rmi -f nginx
7、导入镜像
docker load </tmp/nginx.tar.gz
8、默认配置文件
[Unit]Description=Docker Application Container EngineDocumentation=http://docs.docker.comAfter=network.targetWants=docker-storage-setup.serviceRequires=docker-cleanup.timer[Service]Type=notifyNotifyAccess=mainEnvironmentFile=-/run/containers/registries.confEnvironmentFile=-/etc/sysconfig/dockerEnvironmentFile=-/etc/sysconfig/docker-storageEnvironmentFile=-/etc/sysconfig/docker-networkEnvironment=GOTRACEBACK=crashEnvironment=DOCKER_HTTP_HOST_COMPAT=1Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbinExecStart=/usr/bin/dockerd-current --registry-mirror=https://rfcod7oz.mirror.aliyuncs.com--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current--default-runtime=docker-runc--exec-opt native.cgroupdriver=systemd--userland-proxy-path=/usr/libexec/docker/docker-proxy-current--init-path=/usr/libexec/docker/docker-init-current--seccomp-profile=/etc/docker/seccomp.json$OPTIONS$DOCKER_STORAGE_OPTIONS$DOCKER_NETWORK_OPTIONS$ADD_REGISTRY$BLOCK_REGISTRY$INSECURE_REGISTRY$REGISTRIESExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=1048576LimitNPROC=1048576LimitCORE=infinityTimeoutStartSec=0Restart=on-abnormalKillMode=process[Install]WantedBy=multi-user.target~~~~
--graph=/opt/docker
--dns=xxxx的方式指定
9、运行hello world
[]REPOSITORY TAG IMAGE ID CREATED SIZEzxg/my_nginx v1 b164f4c07c64 8 days ago 126 MBzxg/my_nginx latest f07837869dfc 8 days ago 126 MBdocker.io/nginx latest e445ab08b2be 2 weeks ago 126 MBdocker.io/alpine latest b7b28af77ffe 3 weeks ago 5.58 MBdocker.io/centos latest 9f38484d220f 4 months ago 202 MB[]hello world[]
10、运行一个容器-run
[]//////bin etc lib mnt proc run srv tmp vardev home media opt root sbin sys usr//tmp
[]ac46c019b800d34c37d4f9dcd56c974cb82eca3acf185e5f8f80c8a60075e343[]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESac46c019b800 alpine "/bin/sh" 5 seconds ago Up 3 seconds test1[]
[root@web1 overlay2]# docker run -it --rm --name centos nginx^C[root@web1 overlay2]###另开一个窗口[root@web1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3397b96ea7bd nginx "nginx -g 'daemon ..." 27 seconds ago Up 25 seconds 80/tcp centosac46c019b800 alpine "/bin/sh" 4 minutes ago Up 4 minutes test1[root@web1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESac46c019b800 alpine "/bin/sh" 4 minutes ago Up 4 minutes test1[root@web1 ~]#
11、如何进入容器
[]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9fc796e928d7 nginx "sh" 2 minutes ago Up 8 seconds 80/tcp mynginxac46c019b800 alpine "/bin/sh" 12 minutes ago Up 12 minutes test1[]##### lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# exit[]You cannot attach to a stopped container, start it first[]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESac46c019b800 alpine "/bin/sh" 13 minutes ago Up 13 minutes test1[]
[]#### lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# exit[][][][]docker: 'pa' is not a docker command.See 'docker --help'[]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6fc2d091cfe9 nginx "nginx -g 'daemon ..." 45 seconds ago Up 43 seconds 80/tcp mynginxac46c019b800 alpine "/bin/sh" 16 minutes ago Up 16 minutes test1
12、查看docker进程及删除容器
[]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9fc796e928d7 nginx "sh" 2 minutes ago Up 8 seconds 80/tcp mynginxac46c019b800 alpine "/bin/sh" 12 minutes ago Up 12 minutes test1
[root@web1 overlay2]# docker ps -a #-a :显示所有的容器,包括未运行的CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9fc796e928d7 nginx "sh" 4 minutes ago Exited (0) About a minute ago mynginxac46c019b800 alpine "/bin/sh" 15 minutes ago Up 15 minutes test13bf234febeaa alpine "sh" 17 minutes ago Exited (0) 16 minutes ago youthful_lumiereab113c63f0b4 centos "echo 'hello world'" 31 minutes ago Exited (0) 31 minutes ago infallible_torvaldsb326027dcf42 zxg/my_nginx "nginx" 8 days ago Exited (0) 8 days ago my_nginx4f1f1ca319f2 centos "bash" 8 days ago Exited (137) 8 days ago musing_lichterman64b4e32991c7 nginx "nginx -g 'daemon ..." 12 days ago Exited (0) 12 days ago mynginx1aee506fe7b5a alpine "sh" 12 days ago Created infallible_haibt70620c73b9a0 alpine "sh" 12 days ago Created gallant_volhard7655cbf87bb0 alpine "sh" 12 days ago Created agitated_brahmagupta33fb949372e8 fce289e99eb9 "/hello" 12 days ago Created elastic_dijkstra9de47616aea4 fce289e99eb9 "/hello" 13 days ago Created confident_fermi[root@web1 overlay2]# docker rm 9fc796e928d7 #rm时删除一个或多个容器9fc796e928d7
13、查看容器详细信息
[][{: ,: ,: ,: [,],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 119948,"ExitCode": 0,"Error": "","StartedAt": "2019-08-07T08:57:49.417992182Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:e445ab08b2be8b178655b714f89e5db9504f67defd5c7408a00bade679a50d44","ResolvConfPath": "/var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/resolv.conf","HostnamePath": "/var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/hostname","HostsPath": "/var/lib/docker/containers/6fc2d091cfe9b0484da3e70db842446bbdfeb7f5e5409c2e40ae21b99498d010/hosts","LogPath": "","Name": "/mynginx","RestartCount": 0,"Driver": "overlay2","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "journald","Config": {}},"NetworkMode": "default","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"CapAdd": null,"CapDrop": null,"Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "docker-runc","ConsoleSize": [0,0],"Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": null,"BlkioDeviceReadBps": null,"BlkioDeviceWriteBps": null,"BlkioDeviceReadIOps": null,"BlkioDeviceWriteIOps": null,"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DiskQuota": 0,"KernelMemory": 0,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": -1,"OomKillDisable": false,"PidsLimit": 0,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0},"GraphDriver": {"Name": "overlay2","Data": {"LowerDir": "/var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a-init/diff:/var/lib/docker/overlay2/d8e95505fc3894eb30b48e4b0f48ab5e89d99c09a07c79c0b057c611621e31eb/diff:/var/lib/docker/overlay2/b2a6a25974bf17398b698a27208711574be3c69a2cd06658bbe838359f373a27/diff:/var/lib/docker/overlay2/d4610bc89b3ba8ad6ab30ea895fc3a06efff15db493d86ac9bc100e04abbab67/diff","MergedDir": "/var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/merged","UpperDir": "/var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/diff","WorkDir": "/var/lib/docker/overlay2/937140af0aee6c43f04c2d7b72e6b5451a44fef921417e8236d9fe01e9286c7a/work"}},"Mounts": [],"Config": {"Hostname": "6fc2d091cfe9","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}},"Tty": true,"OpenStdin": true,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.17.2","NJS_VERSION=0.3.3","PKG_RELEASE=1~buster"],"Cmd": ["nginx","-g","daemon off;"],"ArgsEscaped": true,"Image": "nginx","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGTERM"},"NetworkSettings": {"Bridge": "","SandboxID": "3ece36008fbc5f3f46d3d251cf803c1478cc14032d74a36747e4ed8a115b81df","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {"80/tcp": null},"SandboxKey": "/var/run/docker/netns/3ece36008fbc","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "898de81d97d54d2b60aeb6cc77ef1b4f9b481d1b72f542faa496494594024eac","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:03","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "2edae9131e77500a56d251b94ab2cdf0bc86f8df9f2453fa46bf4bab2f7be99f","EndpointID": "898de81d97d54d2b60aeb6cc77ef1b4f9b481d1b72f542faa496494594024eac","Gateway": "172.17.0.1","IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:03"}}}}][]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><title>Test Page for the Nginx HTTP Server on Fedora</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">/*<![CDATA[*/body {background-color:color:font-size: 0.9em;font-family: sans-serif,helvetica;margin: 0;padding: 0;}:link {color:}:visited {color:}a:hover {color:}h1 {text-align: center;margin: 0;padding: 0.6em 2em 0.4em;background-color:color:font-weight: normal;font-size: 1.75em;border-bottom: 2px solid}h1 strong {font-weight: bold;font-size: 1.5em;}h2 {text-align: center;background-color:font-size: 1.1em;font-weight: bold;color:margin: 0;padding: 0.5em;border-bottom: 2px solid}hr {display: none;}.content {padding: 1em 5em;}.alert {border: 2px solid}img {border: 2px solidpadding: 2px;margin: 2px;}a:hover img {border: 2px solid}.logos {margin: 1em;text-align: center;}/*]]>*/</style></head><body><h1>Welcome to <strong>nginx</strong> on Fedora!</h1><div class="content"><p>This page is used to test the proper operation of the<strong>nginx</strong> HTTP server after it has beeninstalled. If you can read this page, it means that theweb server installed at this site is workingproperly.</p><div class="alert"><h2>Website Administrator</h2><div class="content"><p>This is the default <tt>index.html</tt> page thatis distributed with <strong>nginx</strong> onFedora. It is located in<tt>/usr/share/nginx/html</tt>.</p><p>You should now put your content in a location ofyour choice and edit the <tt>root</tt> configurationdirective in the <strong>nginx</strong>configuration file<tt>/etc/nginx/nginx.conf</tt>.</p></div></div><div class="logos"><a href="http://nginx.net/"><imgsrc="nginx-logo.png"alt="[ Powered by nginx ]"width="121" height="32" /></a><a href="http://fedoraproject.org/"><imgsrc="poweredby.png"alt="[ Powered by Fedora ]"width="88" height="31" /></a></div></div></body></html>[]
14、查看日志
[]
长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢
