CentOS 7安裝Docker服務(wù)詳細(xì)過(guò)程
Docker 簡(jiǎn)介
Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。
Docker 官網(wǎng):http://www.docker.com/
Docker 官方文檔:https://docs.docker.com/
Docker Github 地址:https://github.com/docker/docker
Docker 倉(cāng)庫(kù):https://hub.docker.com/
Docker 中文社區(qū):http://www.docker.org.cn/book/docker
Docker 應(yīng)用場(chǎng)景:https://www.zhihu.com/question/22969309
1.1、什么是Docker?
Docker是基于Go語(yǔ)言實(shí)現(xiàn)的云開(kāi)源項(xiàng)目,誕生于2013年初,最初發(fā)起者是dotcloud公司。
Docker是一個(gè)開(kāi)源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。開(kāi)發(fā)者在筆記本上編譯測(cè)試通過(guò)的容器可以批量地在生產(chǎn)環(huán)境中部署,包括VMs(虛擬機(jī))、bare metal、OpenStack 集群和其他的基礎(chǔ)應(yīng)用平臺(tái)。
docker中文社區(qū)
Docker的主要目標(biāo)是'Build,Ship and Run Any App Anywhere',即通過(guò)對(duì)應(yīng)用組件的封裝(Packing)、分發(fā)(Distribution)、部署(Deployment)、運(yùn)行(Runtime)等生命周期的管理,達(dá)到應(yīng)用組件級(jí)別的“一次封裝,多次運(yùn)行”。這里的應(yīng)用組件,既可以是一個(gè)Web應(yīng)用,也可以是一套數(shù)據(jù)庫(kù)服務(wù),甚至是一個(gè)操作系統(tǒng)或編輯器。
1.2、為什么要使用Docker?
Docker在正確的地點(diǎn),正確的時(shí)間順應(yīng)了正確的趨勢(shì)--即高效的構(gòu)建應(yīng)用。
更快速地的交付和部署。
更高效的資源利用
更輕松的更新部署
更簡(jiǎn)單的更新管理
Docker與虛擬機(jī)比較
Docker容器很快,啟動(dòng)和停止可以秒級(jí)實(shí)現(xiàn),相比傳統(tǒng)的虛擬機(jī)方式快很多
Docker容器對(duì)系統(tǒng)資源需求很少,一臺(tái)主機(jī)上面可以運(yùn)行數(shù)千個(gè)Docker容器
Docker通過(guò)類(lèi)似Git的操作來(lái)方便用戶獲取、分布和更新應(yīng)用鏡像,指令簡(jiǎn)單,學(xué)習(xí)成本較低
Docker通過(guò)Dockerfile配置文件來(lái)支持靈活的自動(dòng)化創(chuàng)建和部署機(jī)制,提高工作效率
1.3、虛擬化與Docker
虛擬化是一個(gè)通用的概念,在不通領(lǐng)域有著不同的理解。在計(jì)算機(jī)領(lǐng)域,一般是指計(jì)算虛擬化(Computing Virtualization),或服務(wù)器虛擬化。
虛擬化的核心是對(duì)資源進(jìn)行抽象,目標(biāo)往往是為了在同一主機(jī)上運(yùn)行多個(gè)操作系統(tǒng)或應(yīng)用,從而提高系統(tǒng)資源的利用率,同時(shí)帶來(lái)降低成本,方便管理和容錯(cuò)容災(zāi)。
虛擬化可分為基于硬件的虛擬化和基于軟件的虛擬化?;谲浖奶摂M化又分為應(yīng)用虛擬化和平臺(tái)虛擬化。平臺(tái)虛擬化又細(xì)分如下幾個(gè)子類(lèi):
完全虛擬化。虛擬機(jī)模擬完整的底層硬件環(huán)境和特權(quán)指令的執(zhí)行過(guò)程,客戶操作系統(tǒng)無(wú)需進(jìn)行修改。例如VMware Workstation,VirtulBox,QEMU等
硬件輔助虛擬化。利用硬件輔助支持處理敏感指令來(lái)實(shí)現(xiàn)完全虛擬化的功能,客戶端操作系統(tǒng)無(wú)需更改,例如Xen,KVM等
部分虛擬化。只針對(duì)部分硬件資源進(jìn)行虛擬化,客戶端操作系統(tǒng)需要進(jìn)行更改。
超虛擬化。部分硬件接口以軟件的形式提供給客戶機(jī)操作系統(tǒng),客戶機(jī)操作系統(tǒng)需要進(jìn)行更改。
操作系統(tǒng)級(jí)虛擬化。內(nèi)核通過(guò)創(chuàng)建多個(gè)虛擬的操作系統(tǒng)實(shí)例來(lái)隔離不同的進(jìn)程,Docker技術(shù)。
Docker 安裝
安裝Docker是操作系統(tǒng)級(jí)虛擬化工具,它可以在Containers中自動(dòng)部署應(yīng)用程序
安裝docker
[root@linuxprobe~]# yum -y install docker [root@linuxprobe~]# systemctl start docker [root@linuxprobe~]# systemctl enable docker [root@linuxprobe ~]# systemctl status docker # 查看docker狀態(tài) ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2016-10-26 19:38:40 CST; 12s ago Docs: http://docs.docker.com Main PID: 3762 (docker-current) CGroup: /system.slice/docker.service └─3762 /usr/bin/docker-current daemon --exec-opt native.cgroupdriver=systemd --selinux-enabled --log-driver=journald Oct 26 19:38:39 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:39.844803185+08:00" level=info msg="devmapper: Successfully created filesystem xfs on device docker-253:0-104354176-base" Oct 26 19:38:39 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:39.994708787+08:00" level=info msg="Graph migration to content-addressability took 0.00 seconds" Oct 26 19:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.018129400+08:00" level=info msg="Firewalld running: true" Oct 26 19:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.294869786+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can ...red IP address" Oct 26 19:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.567994904+08:00" level=info msg="Loading containers: start." Oct 26 19:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.568039413+08:00" level=info msg="Loading containers: done." Oct 26 19:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.568047306+08:00" level=info msg="Daemon has completed initialization" Oct 26 19:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.568058527+08:00" level=info msg="Docker daemon" commit=cb079f6-unsupported execdriver=native-0.2 graphdriver=devicemapper version=1.10.3 Oct 26 19:38:40 linuxprobe.org docker-current[3762]: time="2016-10-26T19:38:40.572491688+08:00" level=info msg="API listen on /var/run/docker.sock" Oct 26 19:38:40 linuxprobe.org systemd[1]: Started Docker Application Container Engine. Hint: Some lines were ellipsized, use -l to show in full.
下載官方鏡像并創(chuàng)建一個(gè)Container,并在Container中輸出“Welcome to the Docker World”
[root@linuxprobe ~]# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos 08d48e6f1cff: Pull complete Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c Status: Downloaded newer image for docker.io/centos:latest [root@linuxprobe ~]# docker run centos /bin/echo "Welcome to the Docker World" Welcome to the Docker World
使用“i”和“t”選項(xiàng)連接到Container的交互會(huì)話,如下所示。如果從Container會(huì)話退出,則Container的進(jìn)程完成
[root@linuxprobe ~]# docker run -i -t centos /bin/bash [root@82699d79557c /]# uname -a Linux 82699d79557c 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [root@82699d79557c /]# exit exit [root@linuxprobe ~]# #back
如果從容器會(huì)話中退出并保持容器的進(jìn)程,請(qǐng)按Ctrl + p和Ctrl + q鍵
[root@linuxprobe ~]# docker run -i -t centos /bin/bash [root@a05c7fd0a54f /]# [root@linuxprobe ~]# [root@linuxprobe ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a05c7fd0a54f centos "/bin/bash" 24 seconds ago Up 23 seconds trusting_fermat [root@linuxprobe ~]# docker attach a05c7fd0a54f # connect docekr process [root@a05c7fd0a54f /]# [root@linuxprobe ~]# docker kill a05c7fd0a54f # kill docker process a05c7fd0a54f [root@linuxprobe ~]# docker ps # 查看運(yùn)行的docker服務(wù) CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker:添加鏡像
在容器中添加鏡像文件
例如,使用更新官方映像安裝httpd,并將其添加為容器的新映像。該容器是在每次執(zhí)行docker run命令時(shí)生成的,因此添加最新執(zhí)行的容器如下
[root@linuxprobe ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 0584b3d2cf6d Less than a second ago 196.5 MB # start a Container and install httpd [root@linuxprobe ~]# docker run centos /bin/bash -c "yum -y update; yum -y install httpd" [root@linuxprobe ~]# docker ps -a | head -2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f36383194ad4 centos "/bin/bash -c 'yum -y" 2 minutes ago Exited (0) 45 seconds ago jolly_cray elegant_wright [root@linuxprobe ~]# docker commit f36383194ad4 my_image/centos_httpd [root@linuxprobe ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 0584b3d2cf6d Less than a second ago 196.5 MB my_image/centos_httpd latest b0be2940865a 7 seconds ago 338.3 MB
訪問(wèn)容器
root@linuxprobe ~]# docker run -it -p 8081:80 my_image/centos_httpd /bin/bash [root@2f0d06526d42 /]# /usr/sbin/httpd & [1] 14 [root@2f0d06526d42 /]# AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [1]+ Done /usr/sbin/httpd [root@2f0d06526d42 /]# echo "httpd on Docker Container" > /var/www/html/index.html # exit with Ctrl+p, Ctrl+q [root@2f0d06526d42 /]# [root@linuxprobe ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2f0d06526d42 my_image/centos_httpd "/bin/bash" 54 seconds ago Up 52 seconds 0.0.0.0:8081->80/tcp hopeful_gates [root@linuxprobe ~]# docker ps -a | head -2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2f0d06526d42 my_image/centos_httpd "/bin/bash" 27 minutes ago Up 27 minutes 0.0.0.0:8081->80/tcp hopeful_gates
客戶端瀏覽器訪問(wèn)
Docker:使用Dockerfile
使用Dockerfile并自動(dòng)創(chuàng)建Docker鏡像
[1] Dockerfile的格式是[INSTRUCTION arguments],請(qǐng)參閱INSTRUCTION的以下說(shuō)明。
INSTRUCTION 說(shuō)明
MAINTAINER 它設(shè)置生成的圖像的作者字段。
RUN 當(dāng)創(chuàng)建Docker鏡像時(shí),它將執(zhí)行任何命令。
CMD 它將執(zhí)行任何命令當(dāng)Docker容器將被執(zhí)行。
LABEL 它向圖像添加元數(shù)據(jù)。
EXPOSE 它通知Docker容器將在運(yùn)行時(shí)偵聽(tīng)指定的網(wǎng)絡(luò)端口。
ADD 它復(fù)制新文件,目錄或遠(yuǎn)程文件URL。
COPY 它復(fù)制新的文件或目錄。 [ADD]的區(qū)別是,它不可能指定remore URL,也不會(huì)自動(dòng)提取歸檔文件。
VOLUME 它創(chuàng)建具有指定名稱的裝入點(diǎn),并將其標(biāo)記為從本機(jī)主機(jī)或其他容器保存外部裝入的卷 USER它設(shè)置用戶名或UID。
WORKDIR 它設(shè)置工作目錄。
例如,創(chuàng)建一個(gè)Dockerfile來(lái)安裝httpd并添加index.html,并使用80端口啟動(dòng)httpd
[root@linuxprobe ~]# vim Dockerfile # create new FROM centos MAINTAINER linuxprobe <admin@linuxprobe.org> RUN yum -y install httpd RUN echo "Hello LinuxProbe DockerFile" > /var/www/html/index.html EXPOSE 80 CMD ["-D", "FOREGROUND"] ENTRYPOINT ["/usr/sbin/httpd"] [root@linuxprobe ~]# docker build -t web_server:latest . Sending build context to Docker daemon 21.5 kB Step 1 : FROM centos ---> 0584b3d2cf6d Step 2 : MAINTAINER linuxprobe <admin@linuxprobe.org> ---> Running in 8064d0091e44 ---> 940c8fbe4161 Removing intermediate container 8064d0091e44 Step 3 : RUN yum -y install httpd ---> Running in 3d37e4919fa9 Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: mirrors.163.com * extras: ftp.sjtu.edu.cn * updates: mirrors.163.com Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed --> Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: system-logos >= 7.92.1-1 for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Running transaction check ---> Package apr.x86_64 0:1.4.8-3.el7 will be installed ---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed ---> Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed ---> Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed ---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: httpd x86_64 2.4.6-40.el7.centos.4 updates 2.7 M Installing for dependencies: apr x86_64 1.4.8-3.el7 base 103 k apr-util x86_64 1.5.2-6.el7 base 92 k centos-logos noarch 70.0.6-3.el7.centos base 21 M httpd-tools x86_64 2.4.6-40.el7.centos.4 updates 83 k mailcap noarch 2.1.41-2.el7 base 31 k Transaction Summary ================================================================================ Install 1 Package (+5 Dependent packages) Total download size: 24 M Installed size: 31 M Downloading packages: warning: /var/cache/yum/x86_64/7/base/packages/apr-util-1.5.2-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Public key for apr-util-1.5.2-6.el7.x86_64.rpm is not installed Public key for httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm is not installed -------------------------------------------------------------------------------- Total 382 kB/s | 24 MB 01:05 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Importing GPG key 0xF4A80EB5: Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>" Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 Package : centos-release-7-2.1511.el7.centos.2.10.x86_64 (@CentOS) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.4.8-3.el7.x86_64 1/6 Installing : apr-util-1.5.2-6.el7.x86_64 2/6 Installing : httpd-tools-2.4.6-40.el7.centos.4.x86_64 3/6 Installing : centos-logos-70.0.6-3.el7.centos.noarch 4/6 Installing : mailcap-2.1.41-2.el7.noarch 5/6 Installing : httpd-2.4.6-40.el7.centos.4.x86_64 6/6 Verifying : apr-1.4.8-3.el7.x86_64 1/6 Verifying : httpd-tools-2.4.6-40.el7.centos.4.x86_64 2/6 Verifying : apr-util-1.5.2-6.el7.x86_64 3/6 Verifying : httpd-2.4.6-40.el7.centos.4.x86_64 4/6 Verifying : mailcap-2.1.41-2.el7.noarch 5/6 Verifying : centos-logos-70.0.6-3.el7.centos.noarch 6/6 Installed: httpd.x86_64 0:2.4.6-40.el7.centos.4 Dependency Installed: apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 centos-logos.noarch 0:70.0.6-3.el7.centos httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 mailcap.noarch 0:2.1.41-2.el7 Complete! ---> 3ce9abf4dfea Removing intermediate container 3d37e4919fa9 Step 4 : RUN echo "Hello LinuxProbe DockerFile" > /var/www/html/index.html ---> Running in 297d8d666c8d ---> 3d185363045b Removing intermediate container 297d8d666c8d Step 5 : EXPOSE 80 ---> Running in 017db517e06a ---> 5c855e478c3c Removing intermediate container 017db517e06a Step 6 : CMD -D FOREGROUND ---> Running in 6add13fca3cb ---> 7a219d9fa6e1 Removing intermediate container 6add13fca3cb Step 7 : ENTRYPOINT /usr/sbin/httpd ---> Running in da4671709ee1 ---> c0d84e256068 Removing intermediate container da4671709ee1 Successfully built c0d84e256068 [root@linuxprobe ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 0584b3d2cf6d Less than a second ago 196.5 MB web_server latest c0d84e256068 36 seconds ago 338.3 MB my_image/centos_httpd latest b0be2940865a 4 hours ago 338.3 MB [root@linuxprobe ~]# docker run -d -p 80:80 web_server c37d25a405a8e0599bf54fe77d78c807a520242a21ccb15b18d6b6ee4d13415b [root@linuxprobe ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c37d25a405a8 web_server "/usr/sbin/httpd -D F" 6 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp condescending_knuth 2f0d06526d42 my_image/centos_httpd "/bin/bash" About an hour ago Up About an hour 0.0.0.0:8081->80/tcp hopeful_gat
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
樹(shù)莓派4b ubuntu19 server 安裝docker-ce的安裝步驟
這篇文章主要介紹了樹(shù)莓派4b ubuntu19 server 安裝docker-ce的安裝步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Docker安裝MySQL8.0的詳細(xì)步驟(附圖文!)
Windows上安裝MySQL相對(duì)來(lái)說(shuō)會(huì)較為簡(jiǎn)單,但是在Docker安裝就沒(méi)那么簡(jiǎn)單了,下面這篇文章主要給大家介紹了關(guān)于Docker安裝MySQL8.0的詳細(xì)步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02Docker基礎(chǔ)學(xué)習(xí)之?dāng)?shù)據(jù)管理
我們?cè)谑褂肈ocker 的時(shí)候,會(huì)產(chǎn)生很多數(shù)據(jù),比如web服務(wù)器啊,數(shù)據(jù)庫(kù)之類(lèi)的,有時(shí)我們還需要備份或復(fù)制這些數(shù)據(jù),這就需要涉及到Docker的數(shù)據(jù)管理了。這篇文章就給大家詳細(xì)的介紹Docker的數(shù)據(jù)管理,感興趣的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-10-10docker?swarm快速部署redis分布式集群的詳細(xì)過(guò)程
這篇文章主要介紹了docker?swarm快速部署redis分布式集群,只需要通過(guò)docker-compose.yml文件和一個(gè)啟動(dòng)命令就完成redis分布式部署的方式,讓其分別部署在不同機(jī)器上,并實(shí)現(xiàn)集群搭建,需要的朋友可以參考下2022-10-10docker環(huán)境下數(shù)據(jù)庫(kù)的備份(postgresql, mysql) 實(shí)例代碼
這篇文章主要介紹了docker環(huán)境下數(shù)據(jù)庫(kù)的備份(postgresql, mysql) ,需要的朋友可以參考下2019-05-05Docker數(shù)據(jù)管理與網(wǎng)絡(luò)通信的使用
這篇文章主要介紹了Docker數(shù)據(jù)管理與網(wǎng)絡(luò)通信的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11docker中通過(guò)nginx+confd動(dòng)態(tài)生成配置的解決方案
這篇文章主要介紹了docker:nginx+confd動(dòng)態(tài)生成配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03docker start啟動(dòng)容器后仍然exit狀態(tài)的解決
這篇文章主要介紹了docker start啟動(dòng)容器后仍然exit狀態(tài)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn)
本文主要介紹了Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08