0x00 前言
一直使用過docker,但並不是太瞭解,於是開始學習瞭解一下
0x01 docker簡介
1、什麼是容器?
- 一種虛擬化的方案
- 操作系統級別的虛擬化
- 只能運行相同或相似內核的操作系統
- 依賴於Linux內核特性: Namespace和Cgroups (Control Group)
2、容器技術有哪些優點?
- 磁盤佔用空間少
- 提供更多的服務能力和服務更多的用戶
3、什麼是Docker?
Docker是能將應用程序自動部署到容器的開源引擎。
使用Go語言編寫(Go語言開源引擎) 項目地址
基於Apache2.0開源授權協議發行
docker的特別之處:
docker在虛擬化的容器執行環境中增加了一個應用部署引擎。該引擎目標提供一個輕量、快速的環境。
方便從開發者環境->測試環境->生產環境
4、Docker有哪些特點?(Docker的目標)
- 提供簡單輕量的建模方式
- 職責的邏輯分離
- 快速高效的開發生命週期
- 鼓勵使用面向服務的架構
5、Docker的使用場景
- 使用Docker容器開發、測試、部署服務
- 創建隔離的運行環境
- 搭建測試環境
- 構建多用戶的平臺即服務(PaaS)基礎設施
- 提供軟件即服務(SaaS)應用程序
- 高性能、超大規模的宿主機部署
6、Docker的基本組成
Docker Client 客戶端
Docker Daemon 守護進程
Docker Image 鏡像
Docker Container 容器
Docker Registry 倉庫
1.Docker客戶端/守護進程:
(1)C/S架構
(2)本地/遠程
2.Docker Image 鏡像:
(1)容器的基石
(2)層疊的只讀文件系統
(3)聯合加載(union mount)
3.Docker Container 容器:
(1)通過鏡像啓動
(2)啓動和執行階段
啓動時,在鏡像的最頂層加載一個讀寫文件系統(可寫層)
(3)寫時複製
4.Docker Registry 倉庫:
(1)公有:Docker Hub
(2)私有:可自己架設
0x02 安裝docker
1、驗證是否安裝curl
驗證是否安裝了curl
which curl
如果沒有安裝則進行安裝
sudo apt-get update
sudo apt-get install curl
2、使用官方腳本自動安裝docker
curl -fsSL https://get.docker.com/ubuntu/|sudo sh
或curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
3、通過版本庫安裝docker
1.在Ubuntu中建立ce存儲庫
(1)更新apt資源包
sudo apt-get update
(2)安裝軟件包以允許apt通過HTTPS使用存儲庫
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
(3)添加Docker的官方GPG密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
可使用以下命令進行驗證祕鑰指紋 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
sudo apt-key fingerprint 0EBFCD88
(4)可選設定穩定存儲庫,可不設置,則自動使用(deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable)
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
2.安裝docker-ce並配置docker
(1)更新apt資源包,並進行安裝docker-ce
sudo apt-get update
sudo apt-get -y install docker-ce
注:如果需要安裝特定版本,則使用以下命令獲取可用的版本號,使用要安裝的版本號進行安裝
apt-cache madison docker-ce
sudo apt-get install -y docker-ce=<VERSION>
例如:docker-ce=18.03.0~ce-0~ubuntu
(2)基礎安裝完成,可以先進行測試一下是否可用
sudo docker version
sudo docker run hello-world
4、配置與卸載docker
1.配置docker
(1)省略sudo命令(感覺sudo麻煩的,可以執行這一步)
如果執行時不想使用sudo命令,可以進行設置用戶組,並將當前用戶增加到該組中
sudo groupadd docker
sudo usermod -aG docker $USER
註銷一下,再執行以下命令
docker run hello-world
(2)添加阿里雲docker加速器和ip修改(不是必須的)
{
"registry-mirrors": ["https://(yourid).mirror.aliyuncs.com"],
"bip":"192.168.1.1/24"
}
2.卸載docker
(1)卸載docker-ce
sudo apt-get purge docker-ce
(2)刪除鏡像、容器、卷
sudo rm -rf /var/lib/docker
0x03 docker容器
1、容器的基本操作
1.啓動容器
docker run IMAGE [COMMAND][ARG..]
#IMAGE啓動容器所用鏡像
#COMMAND和ARG容器啓動後運行的命令和參數
如:輸出Hello World
root@qwzf:~# docker run ubuntu echo 'Hello World'
Hello World
2.啓動交互式容器
docker run -i -t IMAGE /bin/bash
#-i 始終打開標準輸入 --interactive=true|false 默認false
#-t 爲創建的容器分配一個僞tty終端 --tty=true|false 默認是false
如:
root@qwzf:~# docker run -i -t ubuntu /bin/bash
root@c12aa40c4376:/#
3.查看容器
docker ps [-a][-l]
#沒有參數時,列出正在運行的容器
#-a 列出所有容器
#-l 列出最新創建的容器
查看已經建立起的容器
docker inspect id/容器名
4.自定義容器名
docker run --name=自定義名 -i -t IMAGE /bin/bash
5.重新啓動停止的容器
docker start [-i] id/容器名
#-i可以以交互的方式來重新啓動
6.刪除停止的容器
docker rm id/容器名
2、守護式容器
1.什麼是守護式容器
- 長期運行
- 沒有交互式會話
- 適合運行應用程序和服務
2.以守護形式運行容器
運行:
docker run -i -t IMAGE /bin/bash
退出交互式bash(這樣容器就會在後臺運行):
Ctrl+P Ctrl+Q
3.附加到運行中的容器(再次進入容器)
docker attach id/容器名
4.啓動守護式容器
docker run -d IMAGE [COMMAND][ARG..]
#-d 啓用容器時使用後臺的方式執行命令
5.查看容器日誌
docker logs [-f][-t][--tail] 容器名
#-f 一直跟蹤logs變化並返回結果 --folloes=true|false 默認false
#-t 在返回的結果上加上時間戳 --timestamps=true|false 默認false
#--tail 返回結尾處多少數量的日誌 默認--tail="all"
如:顯示最新的日誌
root@qwzf:~# docker logs -tf --tail 0 容器名
6.查看容器內進程
docker top 容器名
7.在運行中的容器內啓動新進程
docker exec [-d][-i][-t] 容器名 [COMMAND][ARG..]
如:
docker exec -i -t c12aa40c4376 /bin/bash
退出:Ctrl+P Ctrl+Q
查看:docker top c12aa40c4376
8.停止守護式容器
docker stop 容器名
#發送一個信號給容器,等待容器的停止
docker kill 容器名
#直接停止容器
0x04 docker鏡像
存儲位置:/var/lib/docker
查看存儲驅動和存儲位置:docker info
1、查看和刪除鏡像
1.列出鏡像
docker images [選項] [REPOSITORY]
#-a 顯示所有鏡像,默認不顯示中間層鏡像,--all=false
#-f 顯示時的過濾條件,--filter=[]
#--no-trunc 不使用截斷的方式顯示數據
#-q 只顯示鏡像的唯一d,--quiet=false
2.鏡像標籤和倉庫
(1)鏡像的倉庫 REPOSITORY
REPOSITORY 倉庫:一系列鏡像的集合
REGISTRY 倉庫:docker鏡像的存儲服務
(2)鏡像標籤 TAG
不同鏡像以標籤進行區分
倉庫名+標籤名->鏡像名 對應一個鏡像的id
ubuntu:14.04
ubuntu:latest 默認
3.查看鏡像
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
#-f,--format=""
如:docker inspet ubuntu:14.04
4.刪除鏡像
docker rmi [OPTIONS] IMAGE [IMAGE...]
#-f 強制刪除鏡像
#--no-prune 保留被打標籤的父鏡像
如:
刪除單個:docker rmi 鏡像id
刪除多個:docker ubuntu:12.04 ubuntu:14.04
刪除對應的所有鏡像:
docker rmi $(docker images -q ubuntu)
2、獲取和推送鏡像
1.查找鏡像
(1)Docker Hub
(2)docker search [OPTIONS] TERM
–automated 自動化,只會顯示自動化構建的鏡像
–no-trunc 不使用截斷的方式顯示數據
-s,–stars=0 限制顯示的最低星級
docker search -s 3 ubuntu
2.拉取鏡像
docker pull [OPTIONS] NAME [:TAG]
#-a 匹配並下載所有標記的鏡像
如:docker pull ubuntu:14.04
3.推送鏡像
docker push NAME[:TAG]
3、構建鏡像
- 保存對容器的修改,並再次使用
- 自定義鏡像的能力
- 以軟件的形式打包並分發服務及其運行環境
docker commit 通過容器構建
docker build 通過Dockerfile文件構建
1.使用commit構建鏡像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
#-a 指定鏡像作者
#-m 記錄鏡像構建信息
#-p 不暫停正在運行的容器
如:
docker commit -a 'qwzf' -m 'nginx' 容器名 qwzf/test1(qwzf/test1 可以隨便填)
2.使用Dockerfile構建鏡像
Dockerfile文件:包含一切命令的文本文件
(1)創建Dockerfile
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER qwzf "註冊郵箱"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
(2)適用docker build
命令
docker build [OPTIONS] PATH |URL|-
#--force-rm
#--no-cache
#--pull
#-q
#--rm=true
#-t,tags="" 指定構建出鏡像的名字
如:docker build -t='qwzf/test2'
每執行一步返回唯一id,即中間層鏡像
0x05 docker的一些安裝
1、安裝LAMP
可能用到的命令
#拉取鏡像
docker pull tutum/lamp
#查看鏡像
docker images
#啓動容器並綁定端口
docker run -d -p 8080:80 -p 3306:3306 -v /var/www/app/:/var/www/html tutum/lamp
#查看運行的容器
docker ps
docker ps -a
#進入正在運行的容器
docker exec -it 'id/name' /bin/bash
#退出容器
exit
#開啓、重啓、停止容器
docker start 'id/name'
docker restart 'id/name'
docker stop 'id/name'
具體安裝過程如下:
1.查詢鏡像
root@qwzf:~# docker search lamp
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
linode/lamp LAMP on Ubuntu 14.04.1 LTS Container 179
mattrayner/lamp A simple LAMP docker image running the prere… 170 [OK]
tutum/lamp Out-of-the-box LAMP image (PHP+MySQL) 132
greyltc/lamp a super secure, up-to-date and lightweight L… 99 [OK]
fauria/lamp Modern, developer friendly LAMP stack. Inclu… 79 [OK]
2.拉取鏡像
docker pull tutum/lamp
3.啓動守護式容器並端口映射和掛載目錄
root@qwzf:~# docker run --name=lamp -d -p 8080:80 -p 3306:3306 -v /var/www/app/lamp/:/var/www/html tutum/lamp
#8080 宿主機端口 80 docker端口
#/var/www/app/lamp/ 宿主機要掛載的目錄
#/var/www/html docker上被掛載的位置
2、安裝LNMP
1.查詢鏡像
docker search lnmp
2.拉取鏡像
docker pull winstonpro/lnmp
3.啓動守護式容器並端口映射和掛載目錄
root@qwzf:~# docker run --name=lnmp -d -p 8000:80 -p 3000:3306 -v /var/www/app/lnmp/:/usr/share/nginx/html winstonpro/lnmp
3、安裝vim
方式一:默認源安裝
執行apt-get update更新源
root@dc3d333fc181:~# apt-get update
更新完過後我們就可以安裝了vim了
root@dc3d333fc181:~# apt-get install vim
以上的方式雖然可以實現安裝vim,但是速度很慢。下面是更快的方式
方式二:aliyun源安裝
因爲沒有vi,vim編輯工具,我這裏使用sed命令進行編輯文件內容。
首先查看默認源地址:
root@dc3d333fc181:~# cat /etc/apt/sources.list
# deb http://snapshot.debian.org/archive/debian/20200130T000000Z buster main
deb http://deb.debian.org/debian buster main
# deb http://snapshot.debian.org/archive/debian-security/20200130T000000Z buster/updates main
deb http://security.debian.org/debian-security buster/updates main
# deb http://snapshot.debian.org/archive/debian/20200130T000000Z buster-updates main
deb http://deb.debian.org/debian buster-updates main
從上面的輸出內容我們可以看出,默認會從deb.debian.org
去更新源信息。我們將其替換爲aliyun的源地址:
root@dc3d333fc181:~# sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
替換完源後我們就可以安裝vim了
root@dc3d333fc181:~# apt-get clean
root@dc3d333fc181:~# apt-get update
root@dc3d333fc181:~# apt-get install vim
0x06 後記
暫時就先學這麼多吧!本次學習Docker我學習了docker的安裝、docker容器和docker鏡像的一些操作,以及簡單的端口映射和目錄掛載。同時也學習了LAMP和LNMP環境的使用docker進行自動化安裝。總的來說,收穫很大,繼續努力!!!