https://www.cnblogs.com/pyyu/p/9485268.html#
Linux容器不是模擬一個完整的操作系統(tǒng)福扬,而是對進程進行隔離那槽。
容器里面的應用或听,直接就是底層系統(tǒng)的一個進程闽烙。
多個容器可以共享資源。
容器只包含他用到的組件候引。
docker創(chuàng)建的所有虛擬實例共有一個Linux內(nèi)核韧拒。
docker三大概念:鏡像楼眷,容器,倉庫
鏡像就是一個只讀模板斤富,鏡像可以用來創(chuàng)建容器膏潮。
union FS技術,分層存儲满力,
鏡像和容器的關系焕参,就像類和實例一樣屋谭,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體龟糕。
容器可以被創(chuàng)建桐磁,啟動,停止讲岁,刪除我擂,暫停
docker利用容器來運行應用程序
容器是從鏡像創(chuàng)建的運行實例,每個容器之間是隔離的缓艳。
可以把容器看作一個簡易版的Linux環(huán)境和運行在其中的應用程序校摩。
倉庫是集中存放鏡像的地方,倉庫分為公開倉庫public和私有倉庫private阶淘。最大的公開倉庫是docker hub衙吩,存放了數(shù)量龐大的鏡像供用戶下載。
當用戶創(chuàng)建的了自己的鏡像后就可以使用push命令將他上傳到公有或私有倉庫溪窒。
國內(nèi)的一些云服務商提供了針 對 Docker Hub 的鏡像服務(Registry Mirror)坤塞,這些鏡像服務被稱為加速器。
使用加速器會直接從國內(nèi)的地址下載 Docker Hub 的鏡像澈蚌,比直接從官方網(wǎng)站下載速度會提高很多摹芙。
官方教程如下,最正確安裝docker姿勢
docker最低支持centos7且在64位平臺上宛瞄,內(nèi)核版本在3.10以上
[root@oldboy_python ~ 10:48:11]#uname -r
3.10.0-693.el7.x86_64
1.卸載舊版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
2.設置存儲庫
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3.安裝docker社區(qū)版
sudo yum install docker-ce
4.啟動關閉docker
systemctl start docker
Docker鏡像加速器
一條命令加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
docker基礎命令注釋
[root@docker ~]# docker --help
使用docker鏡像
從倉庫獲取鏡像
管理本地主機的鏡像
獲取鏡像
從docker registry獲取鏡像的命令是docker pull浮禾。命令格式是:
docker pull [選項][docker registry地址] 倉庫名:標簽
image文件是通用,可以共享的
列出所有的image文件
docker image ls
刪除image文件
docker image rm [imagename]
[root@docker ~]# docker search centos #搜索所有centos的docker鏡像
可以使用docker pull命令來從倉庫獲取所需要的鏡像份汗。
[root@docker ~]# docker pull centos #獲取centos鏡像
[root@docker ~]# docker run -it centos /bin/bash #完成后可以使用該鏡像創(chuàng)建一個容器
鏡像的ID唯一標識了鏡像盈电,如果ID相同,說明是同一鏡像。
TAG信息來區(qū)分不同發(fā)行版本杯活,如果不指定具體標記,默認使用latest標記信息匆帚。
[root@docker ~]# docker images #查看docker鏡像
如果要移除本地的鏡像,可以使用docker rmi命令(在刪除鏡像之前先用docker rm刪除依賴于這個鏡像的所有容器)。注意docker rm 命令是移除容器轩猩。
[root@docker ~]# docker rmi imageID #刪除docker鏡像
如果要導出鏡像到本地文件,可以使用docker save命令卷扮。
[root@docker ~]# docker save centos > /opt/centos.tar.gz #導出docker鏡像至本地
可以使用docker load從本地文件中導入到本地docker鏡像庫
[root@docker ~]# docker load < /opt/centos.tar.gz #導入本地鏡像到docker鏡像庫
[root@docker~]# docker images #查看鏡像導入情況
啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動均践,另外一個是將在停止狀態(tài)(stopped)的容器重新啟動晤锹。
[root@docker ~]# docker run centos /bin/echo "hehe"
[root@docker ~]# docker run --name mydocker -it centos /bin/bash#啟動一個終端,允許用戶進行交互。
--name:給容器定義一個名稱
-i:則讓容器的標準輸入保持打開彤委。
-t:讓Docker分配一個偽終端,并綁定到容器的標準輸入上
/bin/bash:執(zhí)行一個命令
當利用docker run來創(chuàng)建容器時鞭铆,Docker在后臺運行的標準操作包括
檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
利用鏡像創(chuàng)建并啟動一個容器
分配一個文件系統(tǒng),并在只讀的鏡像層外面掛在一層可讀寫層
從宿主主機配置的網(wǎng)橋接口中橋接一個虛擬接口到容器中去
從地址池配置一個ip地址給容器
執(zhí)行用戶指定的應用程序
執(zhí)行完畢后容器被終止
獲取鏡像 hello-world
docker pull hello-world
檢查鏡像
docker images
運行image文件,可以用容器id
docker run hello-world
檢查docker容器進程
docker ps
檢查所有運行過的容器
docker ps -a
運行一個Ubuntu容器
[root@oldboy_python ~ 11:52:22]#docker pull ubuntu:14.04
下載過程可以看出鏡像是由多層存儲構成的车遂。下載也是一層一層封断,并非單一的文件。
下載過程中給出每一層的前12位ID舶担。下載結(jié)束后會給出sha246的文件一致性校驗值坡疼。
運行Ubuntu容器
[root@oldboy_python ~ 12:18:53]#docker run -it --rm ubuntu:14.04 bash
root@3efbb2749d7c:/# cat /etc/os-release
使用exit退出容器
docker run就是運行容器的命令。
參數(shù)
-it : -i 是交互式操作衣陶,-t是終端
-rm : 容器退出后將其刪除柄瑰。也可以不指定參數(shù),手動docker rm剪况,使用-rm可以避免浪費空間教沾。
ubuntu:14.04 這指的是鏡像文件
bash : 指定用交互式的shell,因此需要bash命令
-d參數(shù):后臺運行容器译断,返回容器ID
[root@oldboy_python ~ 15:58:14]#docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done"
docker start c02
docker stop c02
docker logs c02
docker rm c02
docker ps
docker images #列出所有本級鏡像
docker pull centos #獲取新的centos鏡像
docker search nginx #搜索nginx鏡像
構建鏡像
1.通過commit修改鏡像
2.編寫dockerfile
進入容器
使用-d參數(shù)時授翻,容器啟動后會進入后臺。某些時候需要進入容器進行操作,有很多種方法孙咪,包括使用docker attach命令或nsenter工具等堪唐。
docker exec -it 容器id
docker attach 容器id
提交創(chuàng)建自定義的鏡像(docker container commit)
1.我們進入交互式的centos容器中,發(fā)現(xiàn)沒有vim命令
docker run -it centos
2.在當前容器中该贾,安裝一個vim
yum install -y vim
3.安裝好vim之后羔杨,exit退出容器
exit
4.查看剛才安裝好vim的容器記錄
docker container ls -a
5.提交這個容器,創(chuàng)建新的image
docker commit 059fdea031ba chaoyu/centos-vim
6.查看鏡像文件
[root@master /home]docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
chaoyu/centos-vim latest fd2685ae25fe 5 minutes ago 348MB
外部訪問容器
容器中可以運行網(wǎng)絡應用杨蛋,但是要讓外部也可以訪問這些應用,可以通過-p或-P參數(shù)指定端口映射理澎。
-P 參數(shù)會隨機映射端口到容器開放的網(wǎng)絡端口
[root@oldboy_python ~ 16:31:37]#docker run -d -P training/webapp python app.py
檢查映射的端口
宿主機ip:32768 映射容器的5000端口
[root@oldboy_python ~ 16:34:02]#docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cfd632821d7a training/webapp "python app.py" 21 seconds ago Up 20 seconds 0.0.0.0:32768->5000/tcp brave_fermi
也可以通過-p參數(shù)指定映射端口
指定服務器的9000端口逞力,映射到容器內(nèi)的5000端口
[root@oldboy_python ~ 16:46:13]#docker run -d -p 9000:5000 training/webapp python app.py
查看指定容器的端口映射
[root@oldboy_python ~ 16:49:01]#docker port c0b
5000/tcp -> 0.0.0.0:9000
查看容器內(nèi)的進程
[root@oldboy_python ~ 16:49:05]#docker top c0b
利用dockerfile定制鏡像
鏡像是容器的基礎,每次執(zhí)行docker run的時候都會指定哪個鏡像作為容器運行的基礎糠爬。我們之前的例子都是使用來自docker hub的鏡像寇荧,直接使用這些鏡像只能滿足一定的需求,當鏡像無法滿足我們的需求時执隧,就得自定制這些鏡像揩抡。
鏡像的定制就是定制每一層所添加的配置、文件镀琉。如果可以把每一層修改峦嗤、安裝、構建屋摔、操作的命令都寫入到一個腳本烁设,用腳本來構建、定制鏡像钓试,這個腳本就是dockerfile装黑。
Dockerfile 是一個文本文件副瀑,其內(nèi)包含了一條條的指令(Instruction),每一條指令 構建一層恋谭,因此每一條指令的內(nèi)容糠睡,就是描述該層應當如何構建。