Docker 快速入門
一、 Docker 概念與安裝
1. Docker是什么:
- 使用最廣泛的愛看i元容器引擎
- 一種操作系統級的虛擬化技術
- 依賴于linux內核特性:Namespace(資源隔離)和cgroups(資源限制)
- 一個簡單的應用程序打包工具
- Docker client: 客戶端命令
- Host: 安裝docker的虛擬機,用于創建容器
- Docker registry: 鏡像
2. Docker 基本組成:
- Docker client: 客戶端命令
- Host: 安裝docker的虛擬機,用于創建容器
- Docker registry: 鏡像
3. 版本與支持的平臺:
- Docker版本:
社區版(Commuity Edition,CE)
企業版(Enterprise Edition,EE)
- 支持平臺:
Linux (centos、debian、fedora、oracle linux、RHEL、SUSE、和Ubuntu)
Mac
Windows
官方文檔: https://docs.docker.com/
阿里云源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
注:安裝docker 先關閉防火墻和selinux
4. Docker 安裝
- 二進制安裝:
https://download.docker.com/linux/static/stable/x86_64/
解壓:
tar xzvf /path/to/<FILE>.tar.gz
復制到bin下:
cp docker/* /usr/bin/
- yum安裝:
https://docs.docker.com/engine/install/centos
卸載之前舊的版本
yum remove docker\
docker-client\
docker-client-latest\
docker-common\
docker-latest\
docker-latest-logrotate\
docker-logrotate\
docker-engine
添加新yum源
yum install-yyum-utils
yum-config-manager\
--add-repo\
https://download.docker.com/linux/centos/docker-ce.repo(可以替換為阿里源)
安裝docker-ce
yum install docker-ce
systemctl start docker
systemctl enable docker
查看docker 可用的版本
yum list docker-ce--showduplicates| sort-r
二、 鏡像管理
1. 鏡像是什么
- 一個分層存儲的文件,不是一個單一的文件
- 一個軟件的環境
- 一個鏡像可以創建N個容器
- 一種標準化的交付
- 一個不包含Linux內核而又精簡的Linux操作系統
2. 配置加速器
Docker Hub室友Docker公司負載維護的公共鏡像倉庫,包含大量的容器鏡像,Docker工具默認從這個公共鏡像下載鏡像。地址:https://hub.docker.com
3. 配置鏡像加速器:
vi /etc/docker/daemon.json
{
“registru-mirrors”: [“https://b9pmyelo.mirror.aliyuncs.com”]
}
systemctl daemon-reload
systemctl restart docker
常見管理命令
|
指令 |
描述 |
|
ls |
列出鏡像 |
|
build |
構建鏡像來自Dockerfile |
|
inspect |
顯示一個或多個鏡像詳細信息 |
|
pull |
從鏡像倉庫拉取鏡像 |
|
push |
推送一個鏡像到鏡像倉庫 |
|
rmi或rm |
刪除一個或多個鏡像 |
|
prune |
移除沒有被標記或者沒有被任何容器引用的鏡像 |
|
tag |
創建一個引用源鏡像標記目標鏡像 |
|
save |
保存一個或多個鏡像到一個tar歸檔文件 |
|
load |
加載一個來自tar歸檔或標準輸入 |
|
history |
查看鏡像的歷史 |
|
--help |
Docker 命令幫助 |
4. Docker工作目錄
默認路徑/var/lib/docker

root@k8s-master:/var/lib/docker# tree -L 1 /var/lib/docker
/var/lib/docker
├── builder
├── buildkit
├── containers #存儲容器得目錄
├── image #存儲鏡像得元數據信息等
├── network #存儲網絡
├── overlay2 #根據存儲驅動名字,存方鏡像得目錄
├── plugins #插件相關
├── runtimes
├── swarm
├── tmp
├── trust
└── volumes #存儲數據卷
修改工作目錄方法:
方法一:新建或者編輯 /etc/docker/daemon.json
{
"data-root": "/data/docker"
}
方法二:編輯文件 /usr/lib/systemd/system/docker.service
[Service]
。。。。。。
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root=/data/docker
ExecReload=/bin/kill -s HUP $MAINPID
。。。
。。。
重啟docker(不管方法幾都要重啟)
systemctl daemon-reload
systemctl restart docker
注意:目前網上大多數配置參數是 --graph ,其實這是老版本中的使用方法,新版本已經拋棄,改用了 --data-root ,具體可以通過命令 dockerd --help 查看使用的參數。
三、 容器管理
1. 創建容器常用的命令
docker run 【選項】
-d 后臺允許
-it 分配一個偽終端的運行
例: -d 和-it區別,因不加-it centos是啟動不了的,因沒有進程運行所以退出,加-it是給centos容器啟動一個偽終端,又進程運行所有可以運行
docker run -d centos 退出
docker run -d -it centos 啟動
-e 設置環境變量
-p 指定一個端口映射容器的端口
-P 自動分配一個宿主機的端口映射容器端
-v 掛載目錄,實現數據持久化
--mount (新方式)
--name 指定容器名字
-h 指定容器主機名
--ip 指定容器id,只能用于自定義網絡
--network 連接容器的一個網絡
--restart 容器退出時重啟策略,默認時no可選值:always,on-failure
Always:會無限嘗試重啟退出的容器(無論以什么退出碼退出)。手動停止容器后,容器策略不再生效。除非重啟docker daemon
on-failure:重啟因出錯停止的容器(非0退出碼)。可以通過指定max-retries來限定docker daemon的最大嘗試重啟次數
on: 不自動重啟(默認模式)
unless-stopped: 與always類似,區別在于手動停止容器后,就算重啟docker daemon,容器策略也不再生效。
資源限制:
-m,-memory 容器可以使用的最大內存量
--memory-swap 允許交換到磁盤的內存量
--memory-swappiness=<0-100> 容器使用SWAP分區交換的百分比(0-100,默認為-1)
--oom-kill-disable 禁止OOM killer
--cpus 可以使用的CPU數量
--cpuset-cpus 限制容器使用特定的CPU核心,如:0-3,0,1
--cpu-shares CPU共享(相對權重)
例:限制容器最多使用500M內存,1顆cpu
docker run -itd -p 8080:8080 -m=”500m” --cpus=”1” java
2. 常用管理命令
docker container 【選項】
|
選項 |
描述 |
|
ls |
列車容器 |
|
inspect |
查看一個或多個容器詳細信息 |
|
commit |
創建一個新鏡像來自一個容器 |
|
exec |
在運行容器中執行命令 |
|
cp |
拷貝文件/文件夾到一個容器 |
|
logs |
獲取容器的日志 |
|
port |
列出容器的端口映射 |
|
top |
查看容器運行的進程 |
|
stats |
顯示容器資源使用統計 |
|
stop/start/restart |
停止/啟動/重啟命令 |
|
rm |
刪除容器 |
|
ps |
列出容器-a參數列出所有容器包含退出的,-q列出容器id |
|
prune |
移除已停止的容器 |
stats 參數 –no-stream 只顯示一次信息例
docker stats web --no-stream
3. 容器數據持久化
Docker 提工三種方式將數據從宿主機掛載到容器:
volume:docker 管理宿主機文件系統的一部分(/var/lib/docker/volumes)保存數據的最佳方式。volume本質和bind mount的操作方式一樣,只不過在volume這種方式中,宿主機目錄是由docker進行管理的,然后再掛載到容器中,不會覆蓋容器中的對應目錄文件,是共享的。
bind mounts: 將宿主機上的任意為止的文件或者目錄掛載到容器,會覆蓋容器中的對應目錄文件。推薦
tmpfs mount:是將宿主機的內存掛載到容器中
1. volumes 示例:
創建數據卷
docker volume create nginx-vol
docker volume ls
docker volume inspect nginx-vol
使用數據卷
docker run -d --name=nginx-test --mont src=nginx-vol,dst=/usr/share/nginx/html nginx
docker run -d –name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
2. bind mounts示例(最常用)
掛載宿主機目錄到容器
方法1:
docker run -d --name=nginx-test –mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
方法2:
docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
3. 容器網絡
veth pair: 成對出現的一種虛擬網絡設備,數據從一端進,從另一端出,用于解決網絡命名空間之間的隔離。
docker0: 網橋是一個二層網絡設備,通過網橋可以將lingx支持的不通端口連接起來,并實現類型交換機那樣的多對多的通信。

Docker使用iptables實現網絡通訊

四、 Dockerfile 構建鏡像
Docker通Dockerfile自動構建鏡像,Dockerfile是一個包含用于組建鏡像的文本文件,有一條條的指令組成。

五、 Harbor鏡像倉庫搭建與使用
Harbor是由vmware公司開源的容器鏡像倉庫。事實上harbor是在docker registry 上進行了相應企業級擴展,從而獲得了更加廣泛應用,這些新的企業級特性包括:管理用戶界面,基于角色的訪問控制,AD/LDAP集成以及審計日志等,足以滿足基本企業需求。
Github: https://github.com/goharbor/harbor
服務器硬件配置:
最低要求: CPU核/內存4G/硬盤40GB
推薦: CPU4核/內存8G/硬盤160GB
軟件:
Docerk CE 1.7.06版本+
Docker Compose 1.18版本+
Harbor 安裝有2中方式:
在線安裝:從Docker Hub下載相關鏡像,因此安裝軟件包非常小
離線安裝:安裝包包含部署的相關鏡像,因此安裝包比較大
1. 安裝
采用離線安裝:下載鏡像

下載離線包:wget https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-offline-installer-v2.1.3.tgz
先安裝docker和docker compose
https://github.com/docker/compose/releases
2. 部署harbor
解壓
tar xf harbor-offline-installer-v2.1.3.tgz
進入解壓目錄
cd harbor
cp harbor.yml.tmpl harbor.yml
修改配置
vi harbor.yml
hostname:xxxx #指定訪問的域名
htts: #先注釋https相關配置
安裝:
./prepare
./install.sh
harbor 默認登錄賬號
admin/Harbor12345
3. harbor基本使用
配置http鏡像倉庫可信任
Vim /etc/docker/daemon.json
{
“insecure-registries”: [“域名或ip”]
}
打標簽
docker tag centos:7 xxxx/library/centos:7
上傳
docker push xxxx/library/centos:7
下載
docker pull xxxx/library/centos:7

浙公網安備 33010602011771號