docker簡介及mac下安裝docker

最近系統(tǒng)的學(xué)習(xí)docker,參考資料Docker-從入門到實(shí)踐docker官網(wǎng)

docker是什么

Docker 使用 Google 公司推出的 Go 語言 進(jìn)行開發(fā)實(shí)現(xiàn),基于 Linux 內(nèi)核的 cgroupnamespace,以及 AUFS 類的 Union FS 等技術(shù),對進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。最初實(shí)現(xiàn)是基于 LXC,從 0.7 以后開始去除 LXC,轉(zhuǎn)而使用自行開發(fā)的 libcontainer,從 1.11 開始,則進(jìn)一步演進(jìn)為使用 runCcontainerd
Docker 在容器的基礎(chǔ)上,進(jìn)行了進(jìn)一步的封裝,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等,極大的簡化了容器的創(chuàng)建和維護(hù)。使得 Docker 技術(shù)比虛擬機(jī)技術(shù)更為輕便、快捷。

傳統(tǒng)虛擬機(jī)技術(shù)是虛擬出一套硬件后,在其上運(yùn)行一個(gè)完整操作系統(tǒng),在該系統(tǒng)上再運(yùn)行所需應(yīng)用進(jìn)程;而容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核,容器內(nèi)沒有自己的內(nèi)核,而且也沒有進(jìn)行硬件虛擬。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便。

mac下安裝docker

官方mac的安裝步驟

下載docker.dmg文件,然后點(diǎn)擊,一步步操作

步驟

檢測Docker Engine, Docker Compose, 和Docker Machine的版本

?  docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Tue Mar 28 00:40:02 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:00:50 2017
 OS/Arch:      linux/amd64
 Experimental: true
?  docker-compose --version
docker-compose version 1.11.2, build dfed245
?  docker-machine --version
docker-machine version 0.10.0, build 76ed2a6

配置加速器:

Docker 加速器是什么,我需要使用嗎?
使用 Docker 的時(shí)候,需要經(jīng)常從官方獲取鏡像,但是由于顯而易見的網(wǎng)絡(luò)原因,拉取鏡像的過程非常耗時(shí),嚴(yán)重影響使用 Docker 的體驗(yàn)。因此 DaoCloud 推出了加速器工具解決這個(gè)難題,通過智能路由和緩存機(jī)制,極大提升了國內(nèi)網(wǎng)絡(luò)訪問 Docker Hub 的速度,目前已經(jīng)擁有了廣泛的用戶群體,并得到了 Docker 官方的大力推薦。如果您是在國內(nèi)的網(wǎng)絡(luò)環(huán)境使用 Docker,那么 Docker 加速器一定能幫助到您。

注冊daocloud,然后在mac標(biāo)簽頁復(fù)制加速器url。

daocloud
配置

運(yùn)行官網(wǎng)提供的二個(gè)簡單列子

拉取hello-world鏡像

docker pull hello-world
hello-world

查看hello-world鏡像信息:

? docker images hello-world
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              1815c82652c0        5 days ago          1.84 kB

根據(jù)鏡像生成對應(yīng)容器

? docker run hello-world
根據(jù)鏡像生成容器

ps不加參數(shù)只會把當(dāng)前運(yùn)行的Community打印出來,查看當(dāng)前所有的Community,加上-a參數(shù)。

? docker ps -a
查看當(dāng)前所有容器

當(dāng)然也可以根據(jù)鏡像生成一個(gè)具體名稱的鏡像,先刪除當(dāng)前容器

docker rm 60
刪除容器

當(dāng)然如果當(dāng)前容器正在運(yùn)行,要?jiǎng)h除這個(gè)容器,則使用命令

docker rm -f 60

使用鏡像生成具體名稱的容器:

docker run --name miaozhihao hello-world
指定容器的名稱

關(guān)于更多的docker run的命令可以使用來查看

docker run --help

第二個(gè)examples,啟動docker的web服務(wù)

docker pull nginx
docker run -d -p 80:80 --name webserver nginx

-p參數(shù)是使用宿主機(jī)的80映射容器的80端口

? curl localhost:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a >nginx.org</a>.<br/>
Commercial support is available at
<a >nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

交互式終端方式進(jìn)入 webserver容器,

? docker exec -it webserver bash 

修改nginx的顯示頁面:

root@41b6804c716e:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@41b6804c716e:/# exit
exit

修改了容器的文件,也就是改動了容器的存儲層。我們可以通過 docker diff

? docker diff webserver
C /root
A /root/.bash_history
C /run
A /run/nginx.pid
C /usr/share/nginx/html/index.html
C /var/cache/nginx
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp

使用docker commit生成鏡像

? docker commit --author "zhihao.miao <1026145686@qq.com>" --message "修改了默認(rèn)網(wǎng)頁" webserver nginx:v2
sha256:0a34c054b8a826d85dddf4d1dbdd3028ab890feff4c8a0844e9b98dd146c2e07

--autho 指定作者 --message表示容器的一些信息

查看當(dāng)前nginx鏡像:

docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v2                  0a34c054b8a8        11 seconds ago      109 MB
nginx               latest              958a7ae9e569        4 weeks ago         109 MB

查看當(dāng)前所有的容器,包括運(yùn)行的和停止的

? docker ps -a
\CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS                    PORTS                NAMES
41b6804c716e        nginx                                 "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes              0.0.0.0:80->80/tcp   webserver
85612b405cda        miaozhihao001dockerhub/commit_test1   "nginx -g 'daemon ..."   20 hours ago        Exited (0) 3 hours ago                         nginx_web
9ef1fb35d7aa        ubuntu:14.04                          "/bin/bash"              20 hours ago        Exited (0) 20 hours ago                        commit_test
bf8320b9e445        ubuntu:14.04                          "/bin/bash"              24 hours ago        Exited (0) 24 hours ago                        sharp_curie
9f9767eb8aaf        hello-world                           "/hello"                 10 days ago         Exited (0) 10 days ago                         miaozhihao

啟動新的容器

? docker run --name newwebserver -d -p 80:80 nginx:v2
3619b34ed347cf1ae2ee3ab32c419140871f3084b9a1325ab5d8c6155d43bf06
? curl localhost:80
<h1>Hello, Docker!</h1>

一些docker命令總結(jié)

  • docker images :查看當(dāng)前宿主機(jī)的所有鏡像。
  • docker images ubuntu:根據(jù)倉庫名列出鏡像
  • docker images ubuntu:14.04:指定倉庫名和標(biāo)簽
  • docker build -t webservice .:表示使用當(dāng)前目錄下的DockerFile來生成鏡像,-t參數(shù)的值表示鏡像的tagname,如果DockerFile在當(dāng)前路徑下則使用.,如果不在當(dāng)前路徑下則使用相對路徑。
  • docker ps -a: 沒有-a參數(shù)表示顯示當(dāng)前宿主機(jī)的正在運(yùn)行的容器,加上-a表示顯示當(dāng)前宿主機(jī)所有的容器,包括已經(jīng)退出的容器。
  • docker run -d -p 2222:22 --name base centos:7.1
    表示根據(jù)指定的鏡像后臺運(yùn)行容器,容器的名字是base(--name就是指定容器的名字),centos:7.1表示鏡像的名字,-p參數(shù)表示當(dāng)前宿主機(jī)的2222端口對應(yīng)容器的22端口。
    -d參數(shù)表示(Run container in background and print container ID)
  • docker exec -it base /bin/bash
    以交互式命令進(jìn)入base容器并且執(zhí)行/bin/bash命令
  • docker rmi webservice:刪除webservice鏡像
  • docker rm base: 刪除base容器,如果base正在運(yùn)行,則可以使用docker rm -f base進(jìn)行強(qiáng)行刪除

Docker 三個(gè)基本概念

  • 鏡像(Image)
    Docker 鏡像是一個(gè)特殊的文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。
  • 容器(Container)
    鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。
    容器的實(shí)質(zhì)是進(jìn)程,但與直接在宿主執(zhí)行的進(jìn)程不同,容器進(jìn)程運(yùn)行于屬于自己的獨(dú)立的 命名空間。因此容器可以擁有自己的 root文件系統(tǒng)、自己的網(wǎng)絡(luò)配置、自己的進(jìn)程空間,甚至自己的用戶 ID 空間。容器內(nèi)的進(jìn)程是運(yùn)行在一個(gè)隔離的環(huán)境里,使用起來,就好像是在一個(gè)獨(dú)立于宿主的系統(tǒng)下操作一樣。這種特性使得容器封裝的應(yīng)用比直接在宿主運(yùn)行更加安全。
  • 倉庫(Repository)
    鏡像構(gòu)建完成后,可以很容易的在當(dāng)前宿主上運(yùn)行,但是,如果需要在其它服務(wù)器上使用這個(gè)鏡像,我們就需要一個(gè)集中的存儲、分發(fā)鏡像的服務(wù),Docker Registry 就是這樣的服務(wù)。
    一個(gè) Docker Registry 中可以包含多個(gè)倉庫(Repository);每個(gè)倉庫可以包含多個(gè)標(biāo)簽(Tag);每個(gè)標(biāo)簽對應(yīng)一個(gè)鏡像。
    通常,一個(gè)倉庫會包含同一個(gè)軟件不同版本的鏡像,而標(biāo)簽就常用于對應(yīng)該軟件的各個(gè)版本。我們可以通過 <倉庫名>:<標(biāo)簽>的格式來指定具體是這個(gè)軟件哪個(gè)版本的鏡像。如果不給出標(biāo)簽,將以 latest作為默認(rèn)標(biāo)簽。

官網(wǎng)提供的優(yōu)秀的倉庫Docker Hub

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Docker — 云時(shí)代的程序分發(fā)方式 要說最近一年云計(jì)算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,636評論 15 147
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,544評論 0 120
  • 一、Docker 簡介 Docker 兩個(gè)主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,411評論 0 27
  • 0. 前言 docker是什么?docker是用GO語言開發(fā)的應(yīng)用容器引擎,基于容器化,沙箱機(jī)制的應(yīng)用部署技術(shù)。可...
    sessionboy閱讀 3,884評論 2 49
  • js中的三種判斷 if else if else 三元運(yùn)算符 switch case if(條件1){ 執(zhí)行 條件...
    放逐的帝王閱讀 849評論 0 0