Docker极简入门
Docker極簡入門
2018年05月22日 20:25:12 閱讀數(shù):44一、Docker概述
Docker通過一個包括應用程序運行時所需的一切的可執(zhí)行鏡像啟動容器,包括配置有代碼、運行時、庫文件、環(huán)境變量和配置文件等。
1.文件系統(tǒng)隔離:每個容器都有自己得root文件系統(tǒng)。
2.進程隔離:每個容器都運行再自己得進程環(huán)境中。
3.容器間得虛擬網絡接口和IP地址都是分開的。
4.資源隔離和分組:使用cgroup將CPU和內存之類的資源獨立分配給每個Docker容器。
5.寫時復制:文件系統(tǒng)都是通過寫時復制創(chuàng)建的,這就意味著文件系統(tǒng)是分層的、快速的,并且占用磁盤空間小。
6.日志:容器產生的STDOUT、STDIN和STDERR這些IO流都會被收集并記入日志,用來進行日志分析和故障排除。
7.交互式shell:用戶可以創(chuàng)建一個偽tty終端、將其連接到STDIN,為容器提供一個交互式shell。
8.靈活性:大多數(shù)應用程序均能被裝箱。
9.輕量級:容器利用并共享主機內核。
10.可交互:可以即時的更新和升級。
11.可移植:一處構建,到處運行。
12.可擴展性:可以增加和分發(fā)容器副本。
二、Docker容器的安裝與入門
1.Docker的安裝過程很簡單,本次試驗是在CentOS7.4中進行的,因此不存在內核版本及系統(tǒng)平臺不支持的情況。簡單的安裝配置如下:
[root@ChatDevOps ~]# yum -y install docker [root@ChatDevOps ~]# docker --version Docker version 1.13.1, build 94f4240/1.13.1 [root@ChatDevOps ~]# systemctl start docker [root@ChatDevOps ~]# systemctl status docker [root@ChatDevOps ~]# systemctl enable docker [root@ChatDevOps ~]# docker info2.docker info:返回所有容器和鏡像的數(shù)量、Docker使用的執(zhí)行驅動和存儲驅動及Docker的基本配置。
[root@ChatDevOps ~]# docker info Containers: 15Running: 1Paused: 0Stopped: 14 Images: 4 Server Version: 1.13.13.docker images:列出當前系統(tǒng)中本地鏡像。例如,列出本地鏡像中REPOSITORY為ubuntu的鏡像:
[root@ChatDevOps ~]# docker images ubuntu REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest 452a96d81c30 3 weeks ago 79.6 MB- 1
- 2
- 3
這個命令也相當于:
[root@ChatDevOps ~]# docker image ls- 1
4.docker ps:列出所有正在運行的容器。
[root@ChatDevOps ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e93e508dbc38 centos "/bin/bash" 2 hours ago Up 2 minutes fervent_turing?
這個命令也類似于:
[root@ChatDevOps ~]# docker container ls?
加上選項-a則列出的是所有的容器,包括正在運行的和未運行的。加選項-n則代表列出前n個容器,n后面跟需要列出的容器的個數(shù)。
[root@ChatDevOps ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfd4fe17d6ce httpd "/bin/bash" 2 hours ago Exited (0) 43 minutes ago stoic_gates 7b4ddbb18811 ubuntu "/bin/bash" 2 hours ago Exited (0) 43 minutes ago priceless_bassi e93e508dbc38 centos "/bin/bash" 2 hours ago Up About a minute fervent_turing [root@ChatDevOps ~]# docker ps -n 10?
同樣,加了選項-a也類似于:
[root@ChatDevOps ~]# docker container ls --all -n 10 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07939dcd012d centos "/bin/bash" 15 hours ago Exited (0) 15 hours ago eloquent_engelbart [root@ChatDevOps ~]# docker container ls -a -n 1 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07939dcd012d centos "/bin/bash" 15 hours ago Exited (0) 15 hours ago eloquent_engelbart?
docker run:創(chuàng)建一個新的容器并運行一個命令。
[root@ChatDevOps ~]# docker run --name ivandu -i -t centos /bin/bash [root@009c8df5e30d /]#?
上面例子中創(chuàng)建了一個名為ivandu的容器。Docker首先檢查本地是否存在鏡像centos,如果不存在,則會連接到Docker官方維護的Docker Hub Registry,查看Docker Hub是否存在該鏡像,如果存在則下載該鏡像并保存到本地宿主機。選項-i表示容器的stdin是開啟的,選項-t表示為要被創(chuàng)建的容器分配一個偽tty終端,centos表示創(chuàng)建這個容器使用的是centos這個鏡像,/bin/bash表示容器創(chuàng)建完成之后執(zhí)行容器中的該命令。選項-d則會將容器置于后臺運行。
5.docker start:啟動一個容器,可以是容器的ID和名稱(NAMES)。
[root@ChatDevOps ~]# docker start dfd4fe17d6ce dfd4fe17d6ce [root@ChatDevOps ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfd4fe17d6ce httpd "/bin/bash" 4 hours ago Up www.feifanyule.cn/ 10 seconds 80/tcp stoic_gates e93e508dbc38 centos "/bin/bash" 4 hours ago Up www.yigouyule2.cn? 2 hours fervent_turing [root@ChatDevOps ~]# docker start stoic_gates stoic_gates [root@ChatDevOps ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfd4fe17d6ce httpd "www.uuweb.cn /bin/bash" 4 hours ago Up 8 minutes 80www.taohuayuan178.com /tcp stoic_gates e93e508dbc38 centos "www.vboyule66.cn/ /bin/bash" 5 www.120xh.cn hours ago Up 2 hours fervent_turing同理,docker stop及docker restart的用法大同小異。
6.docker attach:可以進入一個已經在運行的容器。命令后面的容器id也可以換成容器名稱。需要注意的是,如果退出容器的shell,容器也會隨之停止運行。
[root@ChatDevOps ~]# docker start 7b4ddbb18811 7b4ddbb18811 [root@ChatDevOps ~]# docker attach 7b4ddbb18811 root@7b4ddbb18811:/# cat /etc/issue Ubuntu 18.04 LTS \n \l root@7b4ddbb18811:/# exit [root@ChatDevOps ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES7.docker rm:刪除一個已經停止的容器。如果這個容器正在運行,需要先停止該容器的運行或者使用選項-f進行強制刪除。
[root@ChatDevOps ~]# docker rm -f 009c8df5e30d 009c8df5e30d- 1
- 2
一次性刪除所有的容器:
[root@ChatDevOps ~]# docker rm `docker ps -a -q`- 1
8.docker logs:獲取容器的日志,我們可以通過該日志了解容器內部正在進行什么樣的操作??梢愿x項-f,類似于tail命令,顯示日志最后部分。選項-t則為每條日志加上了時間戳。
[root@ChatDevOps ~]# docker logs -tf dfd4fe17d6ce 2018-05-22T05:35:24.196281000Z root@dfd4fe17d6ce:/usr/local/apache2# exit root@dfd4fe17d6ce:/usr/local/apache2# 2018-05-22T08:56:00.809591000Z root@dfd4fe17d6ce:/usr/local/apache2# ls 2018-05-22T08:56:00.811456000Z bin build cgi-bin conf error htdocs icons include logs modules 2018-05-22T08:56:06.779932000Z root@dfd4fe17d6ce:/usr/local/apache2# ps -aux 2018-05-22T08:56:06.782810000Z USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 2018-05-22T08:56:06.783173000Z root 1 0.0 0.1 20236 1980 ? Ss 08:40 0:00 /bin/bash 2018-05-22T08:56:06.783462000Z root 6 0.0 0.1 17492 1144 ? R+ 08:56 0:00 ps -aux 2018-05-22T08:56:19.520653000Z root@dfd4fe17d6ce:/usr/local/apache2# httpd -k start 2018-05-22T08:56:19.550996000Z AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message 2018-05-22T08:57:01.656035000Z root@dfd4fe17d6ce:/usr/local/apache2# cat /etc/issue 2018-05-22T08:57:01.656305000Z Debian GNU/Linux 8 \n \l 2018-05-22T08:57:01.656609000Z 2018-05-22T08:57:07.888609000Z root@dfd4fe17d6ce:/usr/local/apache2# exit 2018-05-22T08:57:07.888981000Z exit9.docker top:查看正在運行的容器內部的進程運行情況。停止的容器并不支持此法進行查看。
[root@ChatDevOps ~]# docker start 7bc9a41a53cd 7bc9a41a53cd [root@ChatDevOps ~]# docker top 7bc9a41a53cd UID PID PPID C STIME TTY TIME CMD root 6869 6855 0 17:26 pts/0 00:00:00 /bin/bash10.docker exec:在一個運行中的容器內部執(zhí)行命令或者進入一個正在運行的容器內。選項-d表示命令在后臺執(zhí)行,-d后跟容器名和要執(zhí)行的命令。也可以通過選項-i和-t搭配使用進入一個正在運行的容器,與attach不同的是,如果退出容器的shell,該容器并不會停止運行。
[root@ChatDevOps ~]# docker exec -d 7bc9a41a53cd touch /home/ChatDevOps.log [root@ChatDevOps ~]# docker exec -i -t 7bc9a41a53cd /bin/bash [root@7bc9a41a53cd /]# ll /home/ChatDevOps.log -rw-r--r--. 1 root root 0 May 22 09:40 /home/ChatDevOps.log11.docker inspect:返回一個低水平的Docker對象信息。可以用選項-f或–format來獲取選定結果。支持完整的go語音模板,可以充分利用go語音的優(yōu)勢。
[root@ChatDevOps ~]# docker inspect dfd4fe17d6ce [{"Id": "dfd4fe17d6ce1e17ca55e741c6979b16b32383c909ad2145f1c1fcb231612ecf","Created": "2018-05-22T04:03:10.289044219Z", "Path": "/bin/bash", "Args": [], "State": { ... ... [root@ChatDevOps ~]# docker inspect --format='{{.State.Running}}' dfd4fe17d6ce false [root@ChatDevOps ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' 7bc9a41a53cd 172.17.0.212.docker kill:殺死一個或多個正在運行的容器。
[root@ChatDevOps ~]# docker kill 7bc9a41a53cd 7bc9a41a53cd- 1
- 2
三、總結
通過本篇,我們了解了Docker的優(yōu)點及簡單入門知識。文中并未進行大量詳細的原理性的內容闡述,主要通過實踐來演示一入門常用的一些命令及其使用注意事項。以此來加深對Docker原理的理解。本篇博文是來北京工作后的第一篇文章,紀念一下。
總結
以上是生活随笔為你收集整理的Docker极简入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React 教程第六篇 —— 样式绑定
- 下一篇: AlwaysOn 2016 新特性和提升