1. Docker 容器學習
Docker依賴的Linux內核特性
1.Namespace 命名空間
2.Control groups (cgroups)控制組
1.Namespace命名空間
- PID (Progress ID) 進程隔離
- NET (Network) 管理網絡接口
- IPC (InterProcess Communication) 管理跨進程通信的訪問
- MNT (Mount) 管理掛載點
- UTS (Unix Timessharing System) 隔離內核和版本標識
Docker 容器的能力
- 文件系統隔離: 每個容器都有自己的root文件系統
- 進程隔離: 每個容器都運行在自己的進程環境中
- 網絡隔離: 容器間的虛擬網絡接口和IP地址都是分開的
- 資源隔離和分組: 使用 cgroups將CPU和內存之類的資源獨立分配給每個Docker容器
Docker 安裝與配置
安裝前的檢測
1.內核版本
$uname -a
2.檢測 Device Mapper
$ls -l /sys/class/misc/device-mapper
Docker 安裝
安裝 Docker Engine-Community
使用 Docker 倉庫進行安裝在新主機上首次安裝 Docker Engine-Community 之前,需要設置 Docker 倉庫。之後,您可以從倉庫安裝和更新 Docker。
設置倉庫
安裝所需的軟件包。yum-utils 提供了 yum-config-manager ,並且 device mapper 存儲驅動程序需要 device-mapper-persistent-data 和 lvm2。
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
安裝 Docker Engine-Community
安裝最新版本的 Docker Engine-Community 和 containerd,或者轉到下一步安裝特定版本
$ sudo yum install docker-ce docker-ce-cli containerd.io
啓動 Docker
sudo systemctl start docker
通過運行 hello-world 映像來驗證是否正確安裝了 Docker Engine-Community
sudo docker run hello-world
##2.容器的基本操作
啓動容器
$docker run IMAGE [COMMAND] [ARG...]
run 在新容器中執行命令
啓動交互式容器
$docker run -i -t IMAGE /bin/bash
-i --interactive=true | false 默認是 false
-t --tty=true | false 默認是 false
查看容器
$docker ps [-a] [-l]
$docker inspect [name]
自定義容器名
$docker run --name=[容器名] -i -t
重新啓動停止的容器
$docker start [-i] [容器名]
刪除停止的容器
$docker rm [容器名]
##3.守護式容器
#####什麼是守護式容器
- 能夠長期允許的容器
- 沒有交互式的會話
- 適合運行應用程序和服務
啓動守護式容器1
$docker run -i -t /bin/bash
Command+P Command+Q 組合鍵退出
啓動守護式容器2
$docker run -d 鏡像名 [COMMAND] [ARG...]
附加到運行中的容器
$docker attach [容器名]
查看容器日誌
$docker logs [-f] [-t] [--tail] 容器名
-f --follows=true | false 默認爲false #跟蹤變化
-t --timestamps=true | false 默認爲false #加上時間戳
--tail="all" #返回日誌結果的範圍
查看容器內的進程
$docker top [容器名]
在運行中的容器內啓動新進程
$docker exec [-d] [-i] [-t] 容器名 [COMMAND] [ARG...]
停止守護式容器
$docker stop 容器名 #發送信號給容器等待容器的停止
$docker kill 容器名 #直接將容器停止
查看和刪除鏡像
列出鏡像
$docker images [OPTIONS] [REPOSITORY]
-a, --all=fasle #顯示所有鏡像 默認不顯示中間層的鏡像
-f, --filter=[] #顯示的過濾條件
--no-trunc=false #指定不使用截斷式顯示 唯一ID
-q, --quiet=false #只顯示鏡像的唯一ID
REPOSITORY #鏡像所屬的倉庫地址
TAG #標籤名稱
IMAGE ID #鏡像的唯一ID 默認是截取的
CREATED #創建時間
SIZE #鏡像大小
查看鏡像的詳細信息
$docker inspect [OPTIONS] CONTAINER | IMAGE | [CONTAINER|IMAGE...]
-f, --format=""
刪除鏡像
$docker rmi[OPTIONS] IMAGE [IMAGES...]
-f, --force=false #強制刪除
--no-prune=false #保留鏡像中被打標籤的父鏡像
獲取和推送鏡像
查找鏡像
[Docker Hub](https://register.hub.docker.com)
$docker search [OPTIONS] TERM
--automated=false #是顯示自動化構建的docker
--no-trunc=false
-s, --stars=0 #顯示結果的最低星級
拉取鏡像
$docker pull [OPTION] NAME [:TAG]
-a, --all-tags=false #下載所有標籤的鏡像
使用 --registry-mirror 選項
1.修改: /etc/default/docker
2.添加: DOCKER_OPTS="–registry-mirror=http://MIRROR-ADDR"
推送鏡像
$docker push [IMAGE]
構建鏡像
- 保存對容器的修改, 並再次使用
- 自定義鏡像的能力
- 以軟件的形式打包並分發服務及運行環境
$docker commit #通過容器構建
$docker build #通過 Dockerfile文件構建
$docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a, --author="" #作者
-m, --message="" #提交信息
-p, --pause=true #不暫停正在提交的容器
使用Dockerfile構建鏡像
- 創建 Dockerfile
- 使用$docker build 命令
$docker build [OPTIONS] PATH | URL |
--force-rm=false
--no-cache=false
--pull=false
-q, --quiet=false
--rm=true
-t, --tag=""
##Docker的 C/S模式
連接方式
- unix:///var/run/docker.sock
- tcp://host:port
- fd://socketfd
Docker守護進程的配置和操作
- 查看守護進程
$ps -ef | grep docker
$sudo status docker
使用service命令管理
$sudo service docker start
$sudo service docker stop
$sudo service docker restart
Docker的啓動選項
運行相關的
-D, --debug=false
-e, --exce-driver="native"
-g, --graph="/var/lib/docker"
--icc=true
-l,--log-level="info"
--label=[]
-p,--pidfile="/var/run/docker.pid"
Docker服務器連接相關
-G, --group="docker" #用戶組
-H,--host=[] #主機列表
--tls=false #安全連接相關選項
--tlscacert="/home/sven/.docker/ca.pem"
--tlscert="/home/sven/.docker/cert.pem"
--tlskey="/home/sven/.docker/key.pem"
--tlsverify=false
RemoteAPI相關
--api-enable-cors=false
存儲驅動相關
-s, storage-driver=""
--selinux-enabled=fasle
--storage-opt=[]
Registry相關
--insecure-registry=[]
--reigstry-mirror=[]
網絡相關的配置
-b,--bridge=""
--bip=""
--fixed-cidr=""
--fixed-cidr-v6=""
--dns=[]
--dns-serach=[]
--ip=0.0.0.0
--ip-forward=true
--ip-masq=true
--iptables=true
--ipv6=false
--mtu=0