转发http://www.javashuo.com/article/p-dlykhopf-ve.htmljavascript
LXC为Linux Container的简写。能够提供轻量级的虚拟化,以便隔离进程和资源,并且不须要提供指令解释机制以及全虚拟化的其余复杂性。至关于C++中的NameSpace。容器有效地将由单个操做系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。html
与传统虚拟化技术相比,它的优点在于:java
(1)与宿主机使用同一个内核,性能损耗小;linux
(2)不须要指令级模拟;nginx
(3)不须要即时(Just-in-time)编译;git
(4)容器能够在CPU核心的本地运行指令,不须要任何专门的解释机制;github
(5)避免了准虚拟化和系统调用替换中的复杂性;golang
(6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。web
总结:Linux Container是一种轻量级的虚拟化的手段。docker
Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有本身进程和网络空间的虚拟环境,但又有别于虚拟机,由于lxc是一种操做系统层次上的资源的虚拟化。
docker并非LXC替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,而且可以课哦内阁制各进程的资源分配。
在LXC的基础之上,docker提供了一系列更强大的功能。
docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
docker可让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,而后发布到任何流行的linux服务器,也能够实现虚拟化。
容器是彻底使用沙箱机制,相互之间不会有任何接口(类iphone的app),而且容器开销极其低。
https://docs.docker.com/
官方话语:
容器化愈来愈受欢迎,由于容器是:
灵活:即便是最复杂的应用也能够集装箱化。
轻量级:容器利用并共享主机内核。
可互换:您能够即时部署更新和升级。
便携式:您能够在本地构建,部署到云,并在任何地方运行。
可扩展:您能够增长并自动分发容器副本。
可堆叠:您能够垂直和即时堆叠服务。
cgroup的api以一个伪文件系统的实现方式,用户的程序能够经过文件系统实现cgroup的组件管理
cgroup的组件管理操做单元能够细粒度到线程级别,另外用户能够建立和销毁cgroup,从而实现资源载分配和再利用
全部资源管理的功能都以子系统的方式实现,接口统一子任务建立之初与其父任务处于同一个cgroup的控制组
资源限制:能够对任务使用的资源总额进行限制
优先级分配:经过分配的cpu时间片数量以及磁盘IO带宽大小,实际上至关于控制了任务运行优先级
资源统计:能够统计系统的资源使用量,如cpu时长,内存用量等
任务控制:cgroup能够对任务执行挂起、恢复等操做
发布服务不用担忧服务器的运行环境,全部的服务器都是自动分配docker,自动部署,自动安装,自动运行
再不用担忧其余服务引擎的磁盘问题,cpu问题,系统问题了
资源利用更出色
自动迁移,能够制做镜像,迁移使用自定义的镜像便可迁移,不会出现什么问题
管理更加方便了
面向产品:产品交付
面向开发:简化环境配置
面向测试:多版本测试
面向运维:环境一致性
面向架构:自动化扩容(微服务)
distribution 负责与docker registry交互,上传洗澡镜像以及v2 registry 有关的源数据
registry负责docker registry有关的身份认证、镜像查找、镜像验证以及管理registry mirror等交互操做
image 负责与镜像源数据有关的存储、查找,镜像层的索引、查找以及镜像tar包有关的导入、导出操做
reference负责存储本地全部镜像的repository和tag名,并维护与镜像id之间的映射关系
layer模块负责与镜像层和容器层源数据有关的增删改查,并负责将镜像层的增删改查映射到实际存储镜像层文件的graphdriver模块
graghdriver是全部与容器镜像相关操做的执行者
用户经过指定容器镜像,使得Docker容器能够自定义rootfs等文件系统;
用户经过指定计算资源的配额,使得Docker容器使用指定的计算资源;
用户经过配置网络及其安全策略,使得Docker容器拥有独立且安全的网络环境;
用户经过指定运行的命令,使得Docker容器执行指定的工做。
推荐:
yum install docker -y systemctl enable docker systemctl start docker
vim /usr/lib/systemd/system/docker.service
[root@web1 ~]# vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com After=network.target Wants=docker-storage-setup.service Requires=docker-cleanup.timer [Service] Type=notify NotifyAccess=main EnvironmentFile=-/run/containers/registries.conf EnvironmentFile=-/etc/sysconfig/docker EnvironmentFile=-/etc/sysconfig/docker-storage EnvironmentFile=-/etc/sysconfig/docker-network Environment=GOTRACEBACK=crash Environment=DOCKER_HTTP_HOST_COMPAT=1 Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin ExecStart=/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 $REGISTRIES ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=1048576 LimitNPROC=1048576 LimitCORE=infinity TimeoutStartSec=0 Restart=on-abnormal KillMode=process [Install] WantedBy=multi-user.target
[root@web1 ~]# docker version
Client:
Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64 Go version: go1.10.3 Git commit: b2f74b2/1.13.1 Built: Wed May 1 14:55:20 2019 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64 Go version: go1.10.3 Git commit: b2f74b2/1.13.1 Built: Wed May 1 14:55:20 2019 OS/Arch: linux/amd64 Experimental: false
docker pull alpine #下载镜像 docker search nginx #查看镜像 docker pull nginx
[root@web1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zxg/my_nginx v1 b164f4c07c64 8 days ago 126 MB zxg/my_nginx latest f07837869dfc 8 days ago 126 MB docker.io/nginx latest e445ab08b2be 2 weeks ago 126 MB docker.io/alpine latest b7b28af77ffe 3 weeks ago 5.58 MB docker.io/centos latest 9f38484d220f 4 months ago 202 MB [root@web1 ~]#
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com After=network.target Wants=docker-storage-setup.service Requires=docker-cleanup.timer [Service] Type=notify NotifyAccess=main EnvironmentFile=-/run/containers/registries.conf EnvironmentFile=-/etc/sysconfig/docker EnvironmentFile=-/etc/sysconfig/docker-storage EnvironmentFile=-/etc/sysconfig/docker-network Environment=GOTRACEBACK=crash Environment=DOCKER_HTTP_HOST_COMPAT=1 Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin ExecStart=/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 $REGISTRIES ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=1048576 LimitNPROC=1048576 LimitCORE=infinity TimeoutStartSec=0 Restart=on-abnormal KillMode=process [Install] WantedBy=multi-user.target ~ ~ ~ ~
[root@web1 overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zxg/my_nginx v1 b164f4c07c64 8 days ago 126 MB zxg/my_nginx latest f07837869dfc 8 days ago 126 MB docker.io/nginx latest e445ab08b2be 2 weeks ago 126 MB docker.io/alpine latest b7b28af77ffe 3 weeks ago 5.58 MB docker.io/centos latest 9f38484d220f 4 months ago 202 MB [root@web1 overlay2]# docker run centos echo "hello world" hello world [root@web1 overlay2]#
[root@web1 overlay2]# docker run -it alpine sh #运行并进入alpine
/ #
/ #
/ #
/ #
/ #
/ # ls
bin etc lib mnt proc run srv tmp var dev home media opt root sbin sys usr / # cd tmp /tmp # exit
[root@web1 overlay2]# docker run -it -d --name test1 alpine
ac46c019b800d34c37d4f9dcd56c974cb82eca3acf185e5f8f80c8a60075e343
[root@web1 overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac46c019b800 alpine "/bin/sh" 5 seconds ago Up 3 seconds test1 [root@web1 overlay2]#
[root@web1 overlay2]# docker run -it --rm --name centos nginx
^C[root@web1 overlay2]#
##另开一个窗口
[root@web1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3397b96ea7bd nginx "nginx -g 'daemon ..." 27 seconds ago Up 25 seconds 80/tcp centos ac46c019b800 alpine "/bin/sh" 4 minutes ago Up 4 minutes test1 [root@web1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ac46c019b800 alpine "/bin/sh" 4 minutes ago Up 4 minutes test1 [root@web1 ~]#
[root@web1 overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9fc796e928d7 nginx "sh" 2 minutes ago Up 8 seconds 80/tcp mynginx ac46c019b800 alpine "/bin/sh" 12 minutes ago Up 12 minutes test1 [root@web1 overlay2]# docker attach mynginx # # # # # ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # exit [root@web1 overlay2]# docker attach mynginx You cannot attach to a stopped container, start it first [root@web1 overlay2]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ac46c019b800 alpine "/bin/sh" 13 minutes ago Up 13 minutes test1 [root@web1 overlay2]#
[root@web1 overlay2]# docker exec -it mynginx sh
#
#
#
# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # exit [root@web1 overlay2]# [root@web1 overlay2]# [root@web1 overlay2]# [root@web1 overlay2]# docker pa docker: 'pa' is not a docker command. See 'docker --help' [root@web1 overlay2]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6fc2d091cfe9 nginx "nginx -g 'daemon ..." 45 seconds ago Up 43 seconds 80/tcp mynginx ac46c019b800 alpine "/bin/sh" 16 minutes ago Up 16 minutes test1
[root@web1 overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9fc796e928d7 nginx "sh" 2 minutes ago Up 8 seconds 80/tcp mynginx ac46c019b800 alpine "/bin/sh" 12 minutes ago Up 12 minutes test1
[root@web1 overlay2]# docker ps -a #-a :显示全部的容器,包括未运行的
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9fc796e928d7 nginx "sh" 4 minutes ago Exited (0) About a minute ago mynginx ac46c019b800 alpine "/bin/sh" 15 minutes ago Up 15 minutes test1 3bf234febeaa alpine "sh" 17 minutes ago Exited (0) 16 minutes ago youthful_lumiere ab113c63f0b4 centos "echo 'hello world'" 31 minutes ago Exited (0) 31 minutes ago infallible_torvalds b326027dcf42 zxg/my_nginx "nginx" 8 days ago Exited (0) 8 days ago my_nginx 4f1f1ca319f2 centos "bash" 8 days ago Exited (137) 8 days ago musing_lichterman 64b4e32991c7 nginx "nginx -g 'daemon ..." 12 days ago Exited (0) 12 days ago mynginx1 aee506fe7b5a alpine "sh" 12 days ago Created infallible_haibt 70620c73b9a0 alpine "sh" 12 days ago Created gallant_volhard 7655cbf87bb0 alpine "sh" 12 days ago Created agitated_brahmagupta 33fb949372e8 fce289e99eb9 "/hello" 12 days ago Created elastic_dijkstra 9de47616aea4 fce289e99eb9 "/hello" 13 days ago Created confident_fermi [root@web1 overlay2]# docker rm 9fc796e928d7 #rm时删除一个或多个容器 9fc796e928d7