Docker | Docker 簡介、安裝與入門

官方原話:?docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries.
Docker 是一個開源的應(yīng)用容器引擎,基于?Go 語言?并遵從 Apache2.0 協(xié)議開源。
Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實現(xiàn)虛擬化。
容器是完全使用沙箱機(jī)制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本之后分為 CE(Community Edition: 社區(qū)版) 和 EE(Enterprise Edition: 企業(yè)版)。
Docker原理
Docker是利用Linux內(nèi)核虛擬機(jī)化技術(shù)(LXC),提供輕量級的虛擬化,以便隔離進(jìn)程和資源。LXC不是硬件的虛擬化,而是Linux內(nèi)核的級別的虛擬機(jī)化,相對于傳統(tǒng)的虛擬機(jī),節(jié)省了很多硬件資源。
NameSpace
LXC是利用內(nèi)核namespace技術(shù),進(jìn)行進(jìn)程隔離。其中pid, net, ipc, mnt, uts 等namespace將container的進(jìn)程, 網(wǎng)絡(luò), 消息, 文件系統(tǒng)和hostname 隔離開。
Control Group
LXC利用的宿主機(jī)共享的資源,雖然用namespace進(jìn)行隔離,但是資源使用沒有收到限制,這里就需要用到Control Group技術(shù),對資源使用進(jìn)行限制,設(shè)定優(yōu)先級,資源控制等。
Docker的組成
Docker Client 客戶端
Docker Daemon 守護(hù)進(jìn)程
Docker Image 鏡像
Docker Container 容器
Docker基本概念介紹
鏡像(Image)
這里面保存了應(yīng)用和需要的依賴環(huán)境 比如運行runtime 和webapp
為什么需要多個鏡像?當(dāng)開發(fā)、構(gòu)建和運行容器化應(yīng)用程序時,我們通常會有不同優(yōu)先級。通過為這些 獨立的任務(wù)提供不同鏡像
容器(Container)
鏡像的實例。一個容器代表一個正在運行的應(yīng)用程序、進(jìn)程或服務(wù)。它由 Docker 鏡像、執(zhí)行環(huán)境和標(biāo)準(zhǔn)指令集組成。需要擴(kuò)展服務(wù)時,我
真正將鏡像跑起來的東西,鏡像在容器里面。可以看作是一個完全隔離的盒子。
一個容器鏡像實例 代表一個獨立的進(jìn)程。
Hub
遠(yuǎn)程存放鏡像的平臺, hub上已經(jīng)有很多制作好的鏡像 比如redis mongodb。
倉庫?(repository)
倉庫用來保存鏡像的地方。
鏡像構(gòu)建完成后,可以直接在當(dāng)前宿主上運行,但是 如果需要在其它服務(wù)器上使用這個鏡像,就需要一個集中存儲、分發(fā)鏡像的服務(wù)。倉庫就是這樣的一個服務(wù)。
Docker應(yīng)用場景
在非常低的額外開銷的情況下,打造一個一致性的環(huán)境。
簡化配置
代碼流水線(Code Pipeline)管理
提高開發(fā)效率
隔離應(yīng)用
整合服務(wù)器
調(diào)試能力Docker
多租戶環(huán)境
快速部署
Docker 的優(yōu)點
Docker 是一個用于開發(fā),交付和運行應(yīng)用程序的開放平臺。Docker 使您能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分開,從而可以快速交付軟件。借助 Docker,您可以與管理應(yīng)用程序相同的方式來管理基礎(chǔ)架構(gòu)。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產(chǎn)環(huán)境中運行代碼之間的延遲。
1、快速,一致地交付您的應(yīng)用程序
Docker 允許開發(fā)人員使用您提供的應(yīng)用程序或服務(wù)的本地容器在標(biāo)準(zhǔn)化環(huán)境中工作,從而簡化了開發(fā)的生命周期。
容器非常適合持續(xù)集成和持續(xù)交付(CI / CD)工作流程,請考慮以下示例方案:
您的開發(fā)人員在本地編寫代碼,并使用 Docker 容器與同事共享他們的工作。
他們使用 Docker 將其應(yīng)用程序推送到測試環(huán)境中,并執(zhí)行自動或手動測試。
當(dāng)開發(fā)人員發(fā)現(xiàn)錯誤時,他們可以在開發(fā)環(huán)境中對其進(jìn)行修復(fù),然后將其重新部署到測試環(huán)境中,以進(jìn)行測試和驗證。
測試完成后,將修補程序推送給生產(chǎn)環(huán)境,就像將更新的鏡像推送到生產(chǎn)環(huán)境一樣簡單。
2、響應(yīng)式部署和擴(kuò)展
Docker 是基于容器的平臺,允許高度可移植的工作負(fù)載。Docker 容器可以在開發(fā)人員的本機(jī)上,數(shù)據(jù)中心的物理或虛擬機(jī)上,云服務(wù)上或混合環(huán)境中運行。
Docker 的可移植性和輕量級的特性,還可以使您輕松地完成動態(tài)管理的工作負(fù)擔(dān),并根據(jù)業(yè)務(wù)需求指示,實時擴(kuò)展或拆除應(yīng)用程序和服務(wù)。
3、在同一硬件上運行更多工作負(fù)載
Docker 輕巧快速。它為基于虛擬機(jī)管理程序的虛擬機(jī)提供了可行、經(jīng)濟(jì)、高效的替代方案,因此您可以利用更多的計算能力來實現(xiàn)業(yè)務(wù)目標(biāo)。Docker 非常適合于高密度環(huán)境以及中小型部署,而您可以用更少的資源做更多的事情。
Docker CE安裝
環(huán)境準(zhǔn)備
cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
uname -r
3.10.0-1062.4.1.el7.x86_64
安裝依賴
yum install -y yum-utils device-mapper-persistent-data lvm2
設(shè)置穩(wěn)定的倉庫
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
設(shè)置阿里云鏡像源
因為docker默認(rèn)官方的鏡像源地址是國外的,速度很慢,這里將數(shù)據(jù)源設(shè)置為阿里云的鏡像。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝最新版Docker-ce
yum install -y docker-ce
啟動docker
systemctl start docker
開機(jī)啟動docker
systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
查看是否啟動成功
systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2019-12-25 15:00:31 CST; 55s ago
Docs: https://docs.docker.com
Main PID: 23749 (dockerd)
Tasks: 10
Memory: 37.7M
CGroup: /system.slice/docker.service
└─23749 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.221850961+08:00" level=info msg="scheme \"unix\" not regist...le=grpc
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.221867173+08:00" level=info msg="ccResolverWrapper: sending...le=grpc
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.221889025+08:00" level=info msg="ClientConn switching balan...le=grpc
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.321094530+08:00" level=info msg="Loading containers: start."
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.514237489+08:00" level=info msg="Default bridge (docker0) i...ddress"
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.572754563+08:00" level=info msg="Loading containers: done."
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.636432385+08:00" level=info msg="Docker daemon" commit=633a...19.03.5
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.636567302+08:00" level=info msg="Daemon has completed initialization"
Dec 25 15:00:31 drugai systemd[1]: Started Docker Application Container Engine.
Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.663111354+08:00" level=info msg="API listen on /var/run/docker.sock"
Hint: Some lines were ellipsized, use -l to show in full.
查看docker版本
docker version
Client: Docker Engine - Community
Version: ? ? ? ? ? 19.03.5
API version: ? ? ? 1.40
Go version: ? ? ? ?go1.12.12
Git commit: ? ? ? ?633a0ea
Built: ? ? ? ? ? ? Wed Nov 13 07:25:41 2019
OS/Arch: ? ? ? ? ? linux/amd64
Experimental: ? ? ?false
Server: Docker Engine - Community
Engine:
Version: ? ? ? ? ?19.03.5
API version: ? ? ?1.40 (minimum version 1.12)
Go version: ? ? ? go1.12.12
Git commit: ? ? ? 633a0ea
Built: ? ? ? ? ? ?Wed Nov 13 07:24:18 2019
OS/Arch: ? ? ? ? ?linux/amd64
Experimental: ? ? false
containerd:
Version: ? ? ? ? ?1.2.10
GitCommit: ? ? ? ?b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: ? ? ? ? ?1.0.0-rc8+dev
GitCommit: ? ? ? ?3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: ? ? ? ? ?0.18.0
GitCommit: ? ? ? ?fec3683
Docker鏡像管理
搜索所有centos的docker鏡像
docker search centos
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DESCRIPTION ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? STARS ? ? ? ? ? ? ? OFFICIAL ? ? ? ? ? ?AUTOMATED
centos ? ? ? ? ? ? ? ? ? ? ? ? ? ? The official build of CentOS. ? ? ? ? ? ? ? ? ? 5737 ? ? ? ? ? ? ? ?[OK]
ansible/centos7-ansible ? ? ? ? ? ?Ansible on Centos7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?126 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
jdeathe/centos-ssh ? ? ? ? ? ? ? ? OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … ? 114 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
consol/centos-xfce-vnc ? ? ? ? ? ? Centos container with "headless" VNC session… ? 101 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
centos/mysql-57-centos7 ? ? ? ? ? ?MySQL 5.7 SQL database server ? ? ? ? ? ? ? ? ? 66
imagine10255/centos6-lnmp-php56 ? ?centos6-lnmp-php56 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?57 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[OK]
tutum/centos ? ? ? ? ? ? ? ? ? ? ? Simple CentOS docker image with SSH access ? ? ?44
centos/postgresql-96-centos7 ? ? ? PostgreSQL is an advanced Object-Relational … ? 39
kinogmt/centos-ssh ? ? ? ? ? ? ? ? CentOS with SSH ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 29 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[OK]
pivotaldata/centos-gpdb-dev ? ? ? ?CentOS image for GPDB development. Tag names… ? 10
guyton/centos6 ? ? ? ? ? ? ? ? ? ? From official centos6 container with full up… ? 9 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
nathonfowlie/centos-jre ? ? ? ? ? ?Latest CentOS image with the JRE pre-install… ? 8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
drecom/centos-ruby ? ? ? ? ? ? ? ? centos ruby ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
darksheer/centos ? ? ? ? ? ? ? ? ? Base Centos Image -- Updated hourly ? ? ? ? ? ? 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
mamohr/centos-java ? ? ? ? ? ? ? ? Oracle Java 8 Docker image based on Centos 7 ? ?3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
pivotaldata/centos ? ? ? ? ? ? ? ? Base centos, freshened up a little with a Do… ? 3
pivotaldata/centos-mingw ? ? ? ? ? Using the mingw toolchain to cross-compile t… ? 2
miko2u/centos6 ? ? ? ? ? ? ? ? ? ? CentOS6 日本語環(huán)境 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
pivotaldata/centos-gcc-toolchain ? CentOS with a toolchain, but unaffiliated wi… ? 2
mcnaughton/centos-base ? ? ? ? ? ? centos base image ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
indigo/centos-maven ? ? ? ? ? ? ? ?Vanilla CentOS 7 with Oracle Java Developmen… ? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
blacklabelops/centos ? ? ? ? ? ? ? CentOS Base Image! Built and Updates Daily! ? ? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
pivotaldata/centos6.8-dev ? ? ? ? ?CentosOS 6.8 image for GPDB development ? ? ? ? 0
pivotaldata/centos7-dev ? ? ? ? ? ?CentosOS 7 image for GPDB development ? ? ? ? ? 0
smartentry/centos ? ? ? ? ? ? ? ? ?centos with smartentry ? ? ? ? ? ? ? ? ? ? ? ? ?0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [OK]
查看docker鏡像
docker images
REPOSITORY(來自那個倉庫) TAG(標(biāo)簽) IMAGE ID(唯一ID) CREATED(創(chuàng)建時間) SIZE(大小)
Docker常用命令
docker ps --查看目前正在運行的所有容器 -a 顯示包括已經(jīng)停止的容器
docker pull --拉取鏡像
docker rmi --刪除鏡像 后面可以直接根據(jù)鏡像 名稱或者tag 前首字母匹配
docker start container_id --打開容器 (這里可以是容器id或名稱)
docker stop container_id --停止容器 (這里可以是容器id或名稱)
docker rm --刪除容器(只有停止的容器才可以刪除)
docker build --使用 Dockerfile 創(chuàng)建鏡像
docker exec --容器中執(zhí)行命令,例如:docker exec -it container_id(容器名或id) /bin/bash (bin/bash要執(zhí)行的命令或工具)
docker logs --查看 容器日志 ,例如:docker logs -f -t --tail 10 container_id (容器名或id)
參考:
1.?https://www.cnblogs.com/zuoyang/p/9561009.html
2.?https://www.linuxidc.com/Linux/2019-12/161823.htm
Docker 容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。