LXC爲Linux Container的簡寫。能夠提供輕量級的虛擬化,以便隔離進程和資源,並且不須要提供指令解釋機制以及全虛擬化的其餘複雜性。至關於C++中的NameSpace。容器有效地將由單個操做系統管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有衝突的資源使用需求。javascript
與傳統虛擬化技術相比,它的優點在於:html
(1)與宿主機使用同一個內核,性能損耗小;java
(2)不須要指令級模擬;linux
(3)不須要即時(Just-in-time)編譯;nginx
(4)容器能夠在CPU核心的本地運行指令,不須要任何專門的解釋機制;git
(5)避免了準虛擬化和系統調用替換中的複雜性;github
(6)輕量級隔離,在隔離的同時還提供共享機制,以實現容器與宿主機的資源共享。golang
總結:Linux Container是一種輕量級的虛擬化的手段。web
Linux Container提供了在單一可控主機節點上支持多個相互隔離的server container同時執行的機制。Linux Container有點像chroot,提供了一個擁有本身進程和網絡空間的虛擬環境,但又有別於虛擬機,由於lxc是一種操做系統層次上的資源的虛擬化。docker
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
做者:樂章
來源:cnblogs.com/zhangxingeng/p/11236968.html
二、
三、
四、
五、
點擊「閱讀原文」和棧長學更多~