应⽤容器引擎-Docker详解
Docker简介
什么是虚拟化
在计算机中,虚拟化(英语:Virtualization)是⼀种资源管理技术,是将计算机的各种实体资源,如服务器、⽹络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使⽤户可以⽐原本的组态更好的⽅式来应⽤这些资源。这些资源的新虚拟部份是不受现有资源的架设⽅式,地域或物理组态所限制。⼀般所指的虚拟化资源包括计算能⼒和资料存储。
在实际的⽣产环境中,虚拟化技术主要⽤来解决⾼性能的物理硬件产能过剩和⽼的旧的硬件产能过低的重组重⽤,透明化底层物理硬件,从⽽最⼤化的利⽤物理硬件对资源充分利⽤。
虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、⽹络虚拟化(vip)、桌⾯虚拟化、服务虚拟化、虚拟机等等。
什么是Docker
Docker 是⼀个开源项⽬,诞⽣于 2013 年初,最初是 dotCloud 公司内部的⼀个业余项⽬。它基于 Goog
le 公司推出的 Go 语⾔实现。项⽬后来加⼊了 Linux 基⾦会,遵从了 Apache 2.0 协议,项⽬代码在上进⾏维护。
Docker ⾃开源后受到⼴泛的关注和讨论,以⾄于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中⽀持 Docker;Google 也在其 PaaS 产品中⼴泛应⽤。
Docker 项⽬的⽬标是实现轻量级的操作系统虚拟化解决⽅案。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进⾏了进⼀步的封装,让⽤户不需要去关⼼容器的管理,使得操作更为简便。⽤户操作 Docker 的容器就像操作⼀个快速轻量级的虚拟机⼀样简单。
为什么选择Docker
①上⼿快:⽤户只需要⼏分钟,就可以把⾃⼰的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应⽤程序也⾮常迅速,可以说达到“随⼼所致,代码即改”的境界。随后,就可以创建容器来运⾏应⽤程序了。⼤多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很⾼的性能,同时同⼀台宿主机中也可以运⾏更多的容器,使⽤户尽可能的充分利⽤系统资源。
②职责的逻辑分类:使⽤Docker,开发⼈员只需要关⼼容器中运⾏的应⽤程序,⽽运维⼈员只需要关⼼如何管理容器。Docker设计的⽬的就是要加强开发⼈员写代码的开发环境与应⽤程序要部署的⽣产环境⼀致性。从⽽降低那种“开发时⼀切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”。
③快速⾼效的开发⽣命周期:Docker的⽬标之⼀就是缩短代码从开发、测试到部署、上线运⾏的周期,让你的应⽤程序具备可移植性,易于构建,并易于协作。(通俗⼀点
说,Docker就像⼀个盒⼦,⾥⾯可以装很多物件,如果需要这些物件的可以直接将该⼤盒⼦拿⾛,⽽不需要从该盒⼦中⼀件件的取。)
④⿎励使⽤⾯向服务的架构:Docker还⿎励⾯向服务的体系结构和微服务架构。Docker推荐单个容器只运⾏⼀个应⽤程序或进程,这样就形成了⼀个分布式的应⽤程序模型,在这种模型下,应⽤程序或者服务都可以表⽰为⼀系列内部互联的容器,从⽽使分布式部署应⽤程序,扩展或调试应⽤程序都变得⾮常简单,同时也提⾼了程序的内省性。(当然,可以在⼀个容器中运⾏多个应⽤程序)
Docker和虚拟机⽐较
下⾯的图⽚⽐较了Docker和传统虚拟化⽅式的不同之处,可见容器是在操作系统层⾯上实现虚拟化,直接复⽤本地主机的操作系统,⽽传统⽅式则是在硬件层⾯实现。
与传统的虚拟机相⽐,Docker⼜是体现为启动速度快、占⽤体积⼩。
使⽤上的区别如下图:
Docker组件
Docker是⼀个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有⼯作并返回结果。Docker提供了⼀个命令⾏⼯具Docker以及⼀整套RESTful API。你可以在同⼀台宿主机上运⾏Docker守护进程和客户端,也可以从本地的Docker客户端连接到运⾏在另⼀台宿主机上的远程Docker守护进程。
# Docker服务器与客户端
Docker是⼀个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有⼯作并返回结果。Docker提供了⼀个命令⾏⼯具Docker以及⼀整套RESTful API。你可以在同⼀台宿主机上运⾏Docker守护进程和客户端,也可以从本地的Docker客户端连接到运⾏在另⼀台宿主机上的远程Docker守护进程。
# Docker镜像与容器
镜像是构建Docker的基⽯。⽤户基于镜像来运⾏⾃⼰的容器。镜像也是Docker⽣命周期中的“构建”部分。镜像是基于联合⽂件系统的⼀种层式结构,由⼀系列指令⼀步⼀步构建出来。例如:添加⼀个⽂件、执⾏⼀个命令、打开⼀个窗⼝。也可以将镜像当作容器的“源代码”。镜像体积很⼩,⾮常“便携”,易于分享、存储和更新。
Docker可以帮助你构建和部署容器,你只需要把⾃⼰的应⽤程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运⾏⼀个或多个进程。我们可以认为,镜像是Docker⽣命周期中的构建或者打包阶段,⽽容器则是启动或者执⾏阶段。容器基于镜像启动,⼀旦容器启动完成后,我们就可以登录到容器中安装⾃⼰需要的软件或者服务。
所以Docker容器就是:⼀个镜像格式,⼀些列标准操作,⼀个执⾏环境。
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运⽤到⾃⼰的设计中,唯⼀不同的是:集装箱运输货物,⽽Docker运输软件。
和集装箱⼀样,Docker在执⾏上述操作时,并不关⼼容器中到底装了什么,它不管是web服务器,还是数据库,或者是应⽤程序服务器什么的。所有的容器都按照相同的⽅式将内
容“装载”进去。
Docker也不关⼼你要把容器运到何⽅:我们可以在⾃⼰的笔记本中构建容器,上传到Registry,然后下载到⼀个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱⼀样,Docker容器⽅便替换,可以叠加,易于分发,并且尽量通⽤。
# Registry(注册中⼼)
Docker⽤Registry来保存⽤户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做。⽤户可以在,分享并保存⾃⼰的镜像(说明:在巨慢,可以⾃⼰构建私有的Registry)。
Docker安装与启动
安装Docker
Docker官⽅建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,⽽且⼀般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不⽀持更新最新的⼀些补丁包的。
由于我服务器环境都使⽤的是CentOS,因此这⾥我们将Docker安装到CentOS上。注意:这⾥建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境⽽且Docker很多补丁不⽀持更新。
①yum包更新到最新:
sudo yum update
②安装需要的软件包,yun-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
③设置yum源为阿⾥云:
sudo yum-config-manager --add-repo mirrors.aliyun/docker-ce/linux/po
④安装Docker社区版:
sudo yum install docker-ce
⑤安装后查看Docker版本:
docker -v
Docker的启动与停⽌
systemctl命令是系统服务管理器指令。
启动Docker:
systemctl start docker
停⽌Docker:
systemctl stop docker
重启Docker:
systemctl restart docker
查看Docker状态:
systemctl status docker
设置Docker开机⾃启:
systemctl enable docker
查看Docker概要信息:
docker info
查看Docker帮助⽂档:
docker --help
设置ustc的镜像
ustc是⽼牌的Linux镜像服务提供者了,还在遥远的Ubuntu 5.04版本的时候就在⽤。速度很快。ustc docker mirror的优势之⼀就是不需要注册,是真正的公共服务。
①编辑⽂件:
vim /etc/docker/daemon.json
②在该⽂件内添加以下内容:
{
"registry-mirrors": ["docker.mirrors.ustc.edu"]
③重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
常⽤命令
镜像相关命令
①查看镜像:
docker images
结果列名说明
REPOSITORY镜像名称
TAG镜像标签
IMAGE ID镜像ID
CREATED镜像的创建⽇期(不是获取该镜像的⽇期)
SIZE镜像⼤⼩
这些镜像都是存储在Docker宿主机的/var/lib/docker⽬录下。
②搜索镜像:
如果需要从⽹络中查需要的镜像,可以使⽤以下命令搜索。
docker search [OPTIONS] TERM
OPTIONS
选项简写选项全称说明
-f--filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
-
-limit int Max number of search results (default 25)
--no-trunc Don't truncate output
结果列名说明
NAME仓库名称
DESCRIOTION镜像描述
STARS⽤户评价,反应⼀个镜像的受欢迎程度
OFFCIAL是否官⽅
AUTOMATED⾃动构建,表⽰该镜像由Docker Hub⾃动构建流程创建的
③拉取镜像:
拉取镜像就像是从中央仓库中下载镜像到本地。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS
选项简写选项全称说明
-a--all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
例如,下载CentOS7镜像
④删除镜像
①查看容器
②创建与启动容器
--platform string
Set platform if server is multi-platform capable
-q
-
-quiet
Suppress verbose output
OPTIONS
选项简写
选项全称
说明
-f --force Force removal of the image
--no-prune
Do not delete untagged parents
容器相关命令
OPTIONS
选项简写
选项全称
说明
-a --all Show all containers (default shows just running)-f --filter filter Filter output based on conditions provided --format string Pretty-print containers using a Go template
-n --last int Show n last created containers (includes all states) (default -1)
-l --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output -q --quiet Only display numeric IDs -s
--size
Display total file sizes
OPTIONS
选项简写
选项全称
说明
--add-host list Add a custom host-to-IP mapping (host:ip)-a --attach list Attach to STDIN, STDOUT or STDERR
--blkio-weight uint16Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
--blkio-weight-device list
Block IO weight (relative device weight) (default [])
--cap-add list Add Linux capabilities --cap-drop list Drop Linux capabilities
--cgroup-parent string
Optional parent cgroup for the container
--cidfile string
Write the container ID to the file
docker pull centos:7
docker rmi [OPTIONS] IMAGE []
docker ps [OPTIONS]
docker run [OPTIONS] IMAGE [COMMAND] []
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int Limit CPU real-time period in microseconds
--cpu-rt-runtime int Limit CPU real-time runtime in microseconds
-c--cpu-shares int CPU shares (relative weight)
go语言开发环境搭建--cpus decimal Number of CPUs
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
-
-cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
-d --detach Run container in background and print container ID --detach-keys string Override the key sequence for detaching a container --device list Add a host device to the container --device-cgroup-rule list Add a rule to the cgroup allowed devices list
--device-read-bps list Limit read rate (bytes per second) from a device (default [])
--device-read-iops list Limit read rate (IO per second) from a device (default [])
--device-write-bps list Limit write rate (bytes per second) to a device (default [])
--device-write-iops list Limit write rate (IO per second) to a device (default [])
--disable-content-trust Skip image verification (default true)
--dns list Set custom DNS servers
--dns-option list Set DNS options
--dns-search list Set custom DNS search domains
--domainname string Container NIS domain name
--entrypoint string Overwrite the default ENTRYPOINT of the image
-e --env list Set environment variables
--env-file list Read in a file of environment variables
--expose list Expose a port or a range of ports --gpus gpu-request GPU devices to add to the container ('all' to pass all GPUs)
--group-add list Add additional groups to join
--health-cmd string Command to run to check health --health-interval duration Time between running the check (ms|s|m|h) (default 0s) --health-retries int Consecutive failures needed to report unhealthy
--health-start-period
duration Start period for the container to initialize before starting health-retries countdown (ms|s|m|h)
(default 0s)
--health-timeout duration Maximum time to allow one check to run (ms|s|m|h) (default 0s) --help Print usage
-h--hostname string Container host name
--init Run an init inside the container that forwards signals and reaps processes
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论