docker

一、Docker簡介

Docker是基於GO語言實現的雲開源項目,誕生於2013年初。

Docker引擎的基礎是linux容器(LXC)技術。

Docker的好處:通過容器打包應用。遷移的話節約時間,降低部署過程中出現風險。

Docker在運維中的優勢:一次創建或配置,終身可以使用

Docker與虛擬機的比較:更快、對資源需求更少、指令簡單,學習成本低、Dockerfile


二、Docker鏡像

Docker鏡像是一個面向Docker引擎的只讀模板,它是創建Docker容器的基礎。


可以下載一個centos的系統鏡像

也可以下載一個包含lamp軟件的鏡像



三、Docker容器

Docker利用容器來運行和隔離應用

容器是鏡像的實例。可以啓動、開始、停止、刪除。

鏡像自身是隻讀的,容器從鏡像啓動,Docker會在鏡像最上層創建一個可寫層,鏡像本身保持不變。



四、Docker倉庫

Docker集中存放鏡像的文件的地方。

分爲兩種:共有的、私有的。



五、Docker安裝

我用的是centos7 的系統。

直接使用系統自帶的yum源就可以,redhat需要自己設置。

[root@docker ~]# yum install docker -y


測試:


[root@docker ~]# docker

Usage: docker [OPTIONS] COMMAND [arg...]

docker daemon [ --help | ... ]

docker [ --help | -v | --version ]


直接在命令行敲dokcer會有很多輸出,爲了節省篇幅,我只截取了一部分



六、Docker鏡像查找

docker查找鏡像命令很簡單

首先要啓動docker

/bin/systemctl start docker.service


查找某一個我們需要的鏡像


[root@docker ~]# docker search lamp

INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED

docker.io docker.io/reinblau/lamp Dockerfile for PHP-Projects with MySql client 15 [OK]


會有很多輸出,但是我爲了省地方,那個數字(15)越大 它越受歡迎!



七、Docker鏡像獲取

獲取docker鏡像 docker pull name[:tag] tag標籤是版本號。


[root@docker ~]# docker pull ubuntu

Using default tag: latest

Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from library/ubuntu

。。。。。


可以看到,如果不加標籤 默認是 latest



八、Docker查看那本地鏡像信息


我們可以利用docker images 查看本地鏡像信息,方便我們使用

[root@docker ~]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

docker.io/ubuntu latest af88597ec24b 39 hours ago 187.9 MB

[root@docker ~]#


列出的信息有 鏡像名、標籤、鏡像id、創建的時間、 大小。




九、Docker鏡像使用


當鏡像從鏡像站下載到本地以後我們就可以使用了


[root@docker ~]# docker run -t -i docker.io/ubuntu /bin/bash

root@5dbb944ba21f:/#


-t選項讓docker分配一個僞終端並且綁定到容器的標準輸入上,-i 讓標準輸入保持打開。


讓你體驗一下docker的神奇之處!!!!!


root@5dbb944ba21f:/# top

top - 10:29:55 up 1:02, 0 users, load average: 0.01, 0.06, 0.09

Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 1003164 total, 832668 used, 170496 free, 1820 buffers

KiB Swap: 1048572 total, 0 used, 1048572 free. 389104 cached Mem


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1 root 20 0 18164 1976 1496 S 0.0 0.2 0:00.08 bash

16 root 20 0 19740 1316 1012 R 0.0 0.1 0:00.00 top


看到沒 就bash 和top兩個進程!!!!!





十、Docker鏡像刪除


對於我們不再使用的鏡像我們可以刪除節省空間。

[root@docker ~]# docker rmi -f docker.io/ubuntu

Untagged: docker.io/ubuntu:latest

Deleted: af88597ec24be1eb2028ec63fadae21be693428196a917fa24632ec41a791754

Deleted: b2ae0a712b396bf106bd301a41bbff642bd6dfa861596092ac34513b36425241

Deleted: 02e5bca4149be0f122442345d3aa3bcec2498b07692c48415bcaeaeb970c712c

Deleted: 895b070402bd7d26d9595e939422c598e8cc1f4ade1b34e2a9659138ffe3c5c9


測試:

[root@docker ~]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

[root@docker ~]#


再次查看那本地的鏡像我們可以發現原來的那個 鏡像被刪除了。



十一、Docker利用已有的鏡像容器創建你自己的鏡像


首先利用docker.io/ubuntu:latest鏡像進入一個容器

[root@docker ~]# docker run -ti docker.io/ubuntu:latest /bin/bash


然後在裏面創建一個fwc的目錄


root@6378eb77bbdf:/# mkdir fwc


查看我們的創建


root@6378eb77bbdf:/# ls

bin dev fwc lib media opt root sbin sys usr

boot etc home lib64 mnt proc run srv tmp var


推出容器,記住容器id

root@6378eb77bbdf:/# exit


容器id不用全部記住,記一部分就行!


利用提交,創建一個新的鏡像


[root@docker ~]# docker commit -m "mkdir fwc dirctory" -a "fuchao" 6378eb77b fuchao

上面的是命令,下面的是輸出。

8be9f7652ab5d402033dda3d0ba661f540a5111371b7ef03241407f8418d2fd3


-m:後面跟的是提交的信息

-a:後面跟的是作者。


現在我們可以查看本地的鏡像了


[root@docker ~]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

fuchao latest 8be9f7652ab5 11 seconds ago 202.3 MB

docker.io/ubuntu latest af88597ec24b 41 hours ago 187.9 MB


可以看到多了一個fuchao的鏡像。




十二、Docker把鏡像存成本地文件


我們可以把上一篇教程中的fuchao 鏡像存成本地文件。


[root@docker ~]# docker save -o fuchao_latest fuchao:latest


測試:


[root@docker ~]# ls

anaconda-ks.cfg fuchao_latest

[root@docker ~]#


可以看到本地已經生成了 fuchao_latest文件。




十三、Docker把本地文件導入本地鏡像庫


首先刪除原有的鏡像


[root@docker ~]# docker rmi fuchao

Untagged: fuchao:latest

Deleted: 8be9f7652ab5d402033dda3d0ba661f540a5111371b7ef03241407f8418d2fd3


查看那本地鏡像庫


[root@docker ~]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

docker.io/ubuntu latest af88597ec24b 41 hours ago 187.9 MB

docker.io/centos latest 60e65a8e4030 12 days ago 196.6 MB


把本地文件導入到本地鏡像庫


[root@docker ~]# docker load < fuchao_latest


測試:


[root@docker ~]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

fuchao latest 8be9f7652ab5 19 minutes ago 202.3 MB

docker.io/ubuntu latest af88597ec24b 41 hours ago 187.9 MB

docker.io/centos latest 60e65a8e4030 12 days ago 196.6 MB




十四、Docker給鏡像創建標籤


給鏡像創建標籤

[root@docker ~]# docker tag fuchao:latest fuchao_push:latest


測試:查看


[root@docker ~]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

fuchao latest 8be9f7652ab5 40 minutes ago 202.3 MB

fuchao_push latest 8be9f7652ab5 40 minutes ago 202.3 MB




十五、Docker中上傳本地鏡像到DockerHub中


首先,你需要註冊一個帳號。


想要上傳的話首先要登錄

[root@docker ~]# docker login

Username: fwc521

Password:

Email: [email protected]

WARNING: login credentials saved in /root/.docker/config.json

Login Succeeded

[root@docker ~]#


登錄成功,接下來就可以了


[root@docker ~]# docker push fwc521/latest


Do you really want to push to public registry? [y/n]: y

The push refers to a repository [docker.io/fwc521/latest] (len: 0)

8be9f7652ab5: Pushed


fwc521 是我的帳號




十六、Docker創建容器


Docker創建容器

root@docker ~]# docker create -it docker.io/ubuntu:latest

5bd73ca9dcdb9f5ba8b01ad56662ef16482044801e1224528ded8b4bff42becc


查看容器進程

[root@docker ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 9 seconds ago Created


啓動創建的容器

[root@docker ~]# docker start 5bd73ca9dcd

5bd73ca9dcd

再次查看容器進程

[root@docker ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 3 minutes ago Up 8 seconds sad_brahmagupta


Docker新建並啓動容器


[root@docker ~]# docker run -t -i docker.io/ubuntu:latest /bin/bash

root@11c1437847cb:/#



十七、Docker終止容器


終止運行中的容器

[root@docker ~]# docker stop 5bd73ca9d

5bd73ca9d


要知道容器的id的一部分,(可以唯一的辨識出容器!)


測試:查看


[root@docker ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

11c1437847cb docker.io/ubuntu:latest "/bin/bash" 2 minutes ago Exited (0) 21 seconds ago mad_fermi

5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 10 minutes ago Exited (0) 9 seconds ago sad_brahmagupta


可以看到第二個 5d開頭的已經終止了。




十八、Docker啓動終止的容器


啓動終止狀態的容器

[root@docker ~]# docker start 5bd73

5bd73


測試:查看


[root@docker ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 19 minutes ago Up 8 seconds sad_brahmagupta

[root@docker ~]#


可以看到上一篇我們終止 的容器現在已經啓動了


重啓容器


[root@docker ~]# docker restart 5bd73

5bd73

[root@docker ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 22 minutes ago Up 4 seconds sad_brahmagupta

[root@docker ~]#




十九、Docker守護狀態進行

Docker以守護狀態運行

[root@docker ~]# docker run -d docker.io/ubuntu:latest /bin/sh -c "while true;do echo fwc; \


sleep 1;done"

9cd3a0312b95f3ff52138547a983ea16bb2fa3a0d5cb8f4b198a515ae0fd71e6

查看容器信息

[root@docker ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

9cd3a0312b95 docker.io/ubuntu:latest "/bin/sh -c 'while tr" 5 seconds ago Up 3 seconds elated_lalande


獲取容器輸出信息


[root@docker ~]# docker logs 9cd3a031

fwc

fwc

fwc

fwc

fwc

fwc



二十、Docker 進去到運行的容器裏


首先查找到一個運行的容器


[root@docker ~]# docker ps -a

5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 36 minutes ago Up 14 minutes sad_brahmagupta


進入


[root@docker ~]# docker exec -ti 5bd73ca9dcdb /bin/bash

root@5bd73ca9dcdb:/#




二十一、Docker刪除容器


刪除終止狀態的容器


首先找到一個終止 狀態的容器


[root@docker ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

9cd3a0312b95 docker.io/ubuntu:latest "/bin/sh -c 'while tr" 11 minutes ago Exited (0) 5 minutes ago elated_lalande


刪除


[root@docker ~]# docker rm 9cd3a0312b95

9cd3a0312b95


測試:查看


[root@docker ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

2424fa7a5346 docker.io/ubuntu:latest "/bin/sh -c top" 14 minutes ago Exited (1) 14 minutes ago dreamy_ritchie

8c8420123536 docker.io/ubuntu:latest "/bin/sh" 15 minutes ago Exited (0) 15 minutes ago modest_banach

11c1437847cb docker.io/ubuntu:latest "/bin/bash" 35 minutes ago Exited (0) 32 minutes ago mad_fermi

5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 42 minutes ago Up 20 minutes sad_brahmagupta

6378eb77bbdf docker.io/ubuntu:latest "/bin/bash" 3 hours ago Exited (0) 3 hours ago berserk_bhaskara

940e7ebbb19d docker.io/ubuntu:latest "/bin/bash" 3 hours ago Exited (127) 3 hours ago desperate_mayer

5dbb944ba21f docker.io/ubuntu "/bin/bash" 4 hours ago Exited (0) 4 hours ago hopeful_mahavira

[root@docker ~]#


可以發現已經沒有了。


刪除運行中的容器


首先找到一個運行中的容器,從上面的測試輸出可以發現 id是 5bd73ca9dcdb 的是運行狀態的。


刪除:


[root@docker ~]# docker rm -f 5bd73ca9dcdb

5bd73ca9dcdb

[root@docker ~]#


測試:查看


[root@docker ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

2424fa7a5346 docker.io/ubuntu:latest "/bin/sh -c top" 18 minutes ago Exited (1) 18 minutes ago dreamy_ritchie

8c8420123536 docker.io/ubuntu:latest "/bin/sh" 19 minutes ago Exited (0) 19 minutes ago modest_banach

11c1437847cb docker.io/ubuntu:latest "/bin/bash" 38 minutes ago Exited (0) 36 minutes ago mad_fermi

6378eb77bbdf docker.io/ubuntu:latest "/bin/bash" 3 hours ago Exited (0) 3 hours ago berserk_bhaskara

940e7ebbb19d docker.io/ubuntu:latest "/bin/bash" 3 hours ago Exited (127) 3 hours ago desperate_mayer

5dbb944ba21f docker.io/ubuntu "/bin/bash" 4 hours ago Exited (0) 4 hours ago hopeful_mahavira

[root@docker ~]#

發佈了50 篇原創文章 · 獲贊 7 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章