文章目錄
容器生態系統&容器架構
環境選擇
容器需要管理工具、runtime 和操作系統,我們的選擇如下:
- 管理工具 - Docker Engine
因爲 Docker最流行使用最廣泛。- runtime - runc
Docker 的默認 runtime- 操作系統 - Ubuntu
雖然存在諸如 CoreOS的容器 OS,因考慮到我們目前處於初學階段,選擇大家熟悉的操作系統更爲合適。等具備了紮實的容器基礎知識後再使用容器 OS 會更有利。
安裝Docker
配置 Docker 的 apt 源
- 安裝包,允許 apt 命令 HTTPS 訪問 Docker 源。
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
- 添加 Docker 官方的 GPG
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 將 Docker 的源添加到
/etc/apt/sources.list
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
安裝Docker
$ sudo apt-get update
$ sudo apt-get install docker-ce
運行第一個容器
運行容器
$ sudo docker run -d -p 80:80 httpd
在瀏覽器中輸入 http://[your ubuntu host IP]
查看下載的httpd鏡像
$ sudo docker images
查看正在運行的容器
$ sudo docker ps
或
$ sudo docker container ls
鏡像
hello-world鏡像
下載hello-world鏡像
$ sudo docker pull hello-world
運行hello-world鏡像
$ sudo docker run hello-world
通過docker commit 命令構建鏡像
下載CentOS的鏡像
$ sudo docker pull centos
運行容器
$ sudo docker run -it centos
安裝vi
- 確認vi沒有安裝
- 安裝vi
# yum install vim
保存爲新鏡像
- 在新窗口中查看當前運行的容器
$ sudo docker ps
- 將容器保存爲鏡像(centos-with-vi)
$ sudo docker commit peaceful_black centos-with-vi
- 查看新鏡像屬性
$ sudo docker images
- 從新鏡像啓動容器,驗證 vi 已經可以使用
$ sudo docker run -it centos-with-vi
通過 Dockerfile 構建鏡像
用 Dockerfile 創建上節的 centos-with-vi
$ touch Dockerfile
Dockerfile的內容爲
FROM centos
RUN yum install vim -y
運行docker build命令
$ sudo docker build -t centos-with-vi-dockerfile .
查看新鏡像屬性
$ sudo docker images
查看新鏡像的構建歷史
$ sudo docker history centos-with-vi-dockerfile
搭建本地 Registry
啓動registry容器
$ sudo docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
查看正在運行的容器
$ sudo docker ps
查看倉庫內容
打開瀏覽器,訪問http://127.0.0.1:5000/v2/_catalog
,可以查看到repositories: []
,表示現在倉庫中沒有鏡像。
重命名鏡像,使之與 registry 匹配
$ sudo docker tag httpd 127.0.0.1:5000/cccxxmo/httpd:v1
上傳鏡像
$ sudo docker push 127.0.0.1:5000/cccxxmo/httpd
刪除鏡像,重新從本地下載
$ sudo docker rmi 127.0.0.1:5000/cccxxmo/httpd:v1
$ sudo docker pull 127.0.0.1:5000/cccxxmo/httpd:v1
查看倉庫內容
打開瀏覽器,再次訪問http://127.0.0.1:5000/v2/_catalog
,可以看到上傳的鏡像。
網絡
創建自定義網絡
創建bridge網絡
創建時可以通過指定--subnet
和--gateway
參數指定IP網段,否則會使用Docker 自動分配的 IP 網段。
$ sudo docker network create --driver bridge my_net
查看當前 host 的網絡結構變化
$ brctl show
查看my_net的配置信息
$ sudo docker network inspect my_net
之後若需要使用新創建的網絡,在啓動容器時通過--network
指定該網絡即可。
存儲
需創建$HOME/htdocs/index.html
bind mount
將$HOME/htdocs
mount到httpd容器
$ sudo docker run -d -p 80:80 -v $HOME/htdocs:/usr/local/apache2/htdocs httpd
驗證修改是否生效
$ echo "update index page!" > $HOME/htdocs/index.html
$ curl 127.0.0.1:80
docker managed volume
通過指明mount point運行容器
$ sudo docker run -d -p 80:80 -v /usr/local/apache2/htdocs httpd
更新數據
# echo "update volume from host!" > /var/lib/docker/volumes/ea4fa97ea0ec00dff3d4a22e959ddaf207c3b99c806048a623c72018580e43d5/_data/index.html
# curl 127.0.0.1:80
volume container
創建一個volume container
$ sudo docker create --name vc_data -v $HOME/htdocs:/usr/local/apache2/htdocs -v $HOME/vc_test busybox
查看volume和bind
$ sudo docker inspect vc_data
使用volume container
$ sudo docker run -d -p 80 --volumes-from vc_data httpd
查看volume和bind是否一致
$ sudo docker inspect 7f3345ef4860
更新數據
$ echo "This content is from a volume container!" > $HOME/htdocs/index.html
$ curl 127.0.0.1:32768
data-packed volume container
用Dockfile構建鏡像
Dockfile內容如下:
FROM busybox:latest
ADD htdocs /usr/local/apache2/htdocs
VOLUME /usr/local/apache2/htdocs
htdocs/index.html
內容如下:
This content is from a data packed volume container!
build 新鏡像 datapacked
$ sudo docker build -t datapacked .
用新鏡像創建 data-packed volume container
$ sudo docker create --name vc_data datapacked
啓動 httpd 容器並使用 data-packed volume container
$ sudo docker run -d -p 80:80 --volumes-from vc_data httpd
$ curl 127.0.0.1:80