文章目錄
- sc-hw11 容器化技術與容器服務
- 實驗環境
- 部署docker環境
- docker 基本操作
- MySQL與容器化
- 部署MySQL
- 構建 docker 鏡像練習
- 使用 MySQL 容器
- 創建卷并掛載
- 啟動客戶端容器鏈接服務器
- Docker compose 與多容器應用自動化部署
- Docker網路
- 管理容器網路
- 備制支持 ifconfig 和 ping 命令的 ubuntu 容器
- 啟動另一個命令視窗,由容器制作鏡像
- 創建自定義網路
- Docker 倉庫
- 搭建私有容器倉庫
- 阿里云容器鏡像服務(免費)實踐
- 常用倉庫操作
- 容器監控與日志
- docker圖形化管理工具
- Docker Engine API與開發
- 用 curl 發 docker 客戶端命令
sc-hw11 容器化技術與容器服務
實驗環境
Ubuntu 18.04
部署docker環境
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的 Linux或Windows 機器上,也可以實作虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面,
首先保險起見,嘗試清理一下系統中的 Docker 舊組件或版本:
sudo apt-get remove docker docker-engine docker.io containerd runc
嘗試更新一下軟體源索引:
sudo apt-get update
安裝一些系統依賴組建:
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
添加 Docker 官方的公鑰:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
這一步如果失敗并提示以下錯誤資訊:

這是由于GitHub release檔案被墻導致下載失敗了,
解決辦法:
百度ipaddress,查找被墻網址的ip:

然后 vi /etc/hosts命令在 hosts檔案末尾中加入以下內容:
52.216.107.188 github-com.s3.amazonaws.com
重新執行上述添加公鑰的命令即可成功,
驗證一下公鑰,輸出應該為: 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
sudo apt-key fingerprint 0EBFCD88
添加 Docker 官方的軟體源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
再次更新軟體源索引:
sudo apt-get update
可以開始安裝 Docker,執行命令后等待就可以:
sudo apt-get install docker-ce docker-ce-cli containerd.io
如果你不是root用戶,請將用戶加入docker用戶組:
sudo usermod -aG docker $(whoami)
重啟虛擬機即可生效,
最后就是安裝 docker-composer 輔助命令了,如果專案要使用到多個 docker 容器,那它就是你的福音,安裝方式有點特殊,也很簡單,就是直接下載檔案,放入系統命令目錄,賦予執行權限就可以了:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker 基本操作
檢查docker的安裝
docker version

運行第一個容器
docker run hello-world

docker run -it ubuntu bash

-it引數:通過終端與行程(容器)互動,stdin,stdout,stderr定向到 TTY
如果沒有-it引數,執行上述命令無法為容器分配偽輸入終端,無法開啟互動模式,
顯示本地鏡像內容:
docker images

顯示運行中容器:
docker ps

顯示所有容器(包括已中止):
docker ps -a

MySQL與容器化
部署MySQL
拉取MySQL鏡像:
這一步比較曲折,試了好幾種辦法都失敗了,記錄一下沒能成功的嘗試程序,
直接拉取:
docker pull mysql:5.7
結果:連接失敗,提示TLS hand handshake timeout,
在docker檔案夾下配置daemon.json, 修改docker的registry-mirrors:
{"registry-mirrors": ["http://hub-mirror.c.163.com"]}
或
{"registry-mirrors": ["http://4e70ba5d.m.daocloud.io"]}
然后service restart docker重啟服務器
結果:可以下載,一開始速度挺快,然后越來越慢,到最后直接卡住,
最后一種辦法拉取成功了:通過國內鏡像daocloud.io/library庫下載
docker pull daocloud.io/library/mysql:5.7


構建 docker 鏡像練習
~] mkdir mydock && cd mydock
mydock]# vi dockerfile
錄入一下內容:
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
構建鏡像:
docker build . -t hello

查看構建的鏡像:
docker images hello

運行鏡像:
docker run -it --rm hello -H

使用 MySQL 容器
啟動服務器:
sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d daocloud.io/library/mysql:5.7
docker ps

啟動 MySQL 客戶端:
docker run -it --net host daocloud.io/library/mysql:5.7 "sh"
mysql -h127.0.0.1 -P3306 -uroot -proot

創建卷并掛載
docker rm $(docker ps -a -q) -f -v
docker volume create mydb
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d daocloud.io/library/mysql:5.7



上述命令的作用就是將自己定義的資料卷掛載到 /var/lib/mysql 上,
啟動客戶端容器鏈接服務器
docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
env
mysql -hmysql -P3306 -uroot -proot

Docker compose 與多容器應用自動化部署
下載 Docker-compose 已經在部署 docker 時完成
Docker網路
管理容器網路
docker network ls

備制支持 ifconfig 和 ping 命令的 ubuntu 容器
docker run --name unet -it --rm ubuntu bash

apt-get update

apt-get install iputils-ping -y

ifconfig

ping <your host ip>

啟動另一個命令視窗,由容器制作鏡像
docker commit unet ubuntu:net

創建自定義網路
創建 mynet:
docker network create mynet
在兩個視窗創建 u1,u2 容器網路:
docker network create u1
docker network create u2
并使用以下命令:
docker run --name u1 -it -p 8080:80 --net mynet --rm ubuntu:net bash
docker run --name u2 --net mynet -it --rm ubuntu:net bash
u1 ,u2 兩個容器網路之間互相ping(u1 的 IP 是 172.21.0.2, u2 的 IP是172.21.0.3):


u1 / u2 ping 外部網路,如百度:

從結果可以看到,容器網路是可以連通外部網路的,
執行以下命令:
docker inspect u1
docker network connect bridge u1
docker network disconnect mynet u1
然后重新ping:


u1, u2之間無法ping通了,但依然可以ping通外部網路,
Docker 倉庫
搭建私有容器倉庫
運行一個本地倉庫:
docker run -d -p 5000:5000 --restart=always --name registry registry:2

從 Docker Hub 拉取鏡像 ubuntu:16.04:
docker pull ubuntu:16.04

標記鏡像:
docker tag ubuntu:16.04 localhost:5000/my-ubuntu
當標記的第一部分是主機名和埠時,Docker 在推送時將其解釋為倉庫的位置,
推送鏡像到本地倉庫:
docker push localhost:5000/my-ubuntu

洗掉本地快取和鏡像:
docker image remove ubuntu:16.04
docker image remove localhost:5000/my-ubuntu

之后可以從倉庫中拉取鏡像,
從倉庫中拉取鏡像:
docker pull localhost:5000/my-ubuntu

停止并洗掉本地倉庫:
docker container stop registry && docker container rm -v registry

阿里云容器鏡像服務(免費)實踐
訪問https://cr.console.aliyun.com/,
用淘寶或注冊一個賬號,
選擇“容器鏡像服務”,
常用倉庫操作
登錄:
docker login --username=<your account> registry.cn-shenzhen.aliyuncs.com

標簽:
docker tag hello-world registry.cn-shenzhen.aliyuncs.com/beikenken/hello-world
上傳:
docker push registry.cn-shenzhen.aliyuncs.com/beikenken/hello-world

運行:
docker run --rm hello-world

退出:
docker logout registry.cn-shenzhen.aliyuncs.com

容器監控與日志
檢查 docker 的狀態:
docker info


docker info --format {{.ServerVersion}}

查看容器內行程:
docker top

容器詳細資訊:
docker inspect

docker inspect -f '{{.NetworkSettings.IPAddress}}' 084f46eddf33

容器日志查看:
docker logs
ll

docker圖形化管理工具
Portainer是一個可視化的容器鏡像的圖形管理工具,利用Portainer可以輕松構建,管理和維護Docker環境, 而且完全免費,基于容器化的安裝方式,方便高效部署,
部署 portainer :
docker pull portainer/portainer

選擇 aliyun 的鏡像源很快,
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

訪問9000埠可以查看圖形化界面:


Docker Engine API與開發
用 curl 發 docker 客戶端命令
docker pull alpine

sudo curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \
-d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' \
-X POST http://localhost/v1.41/containers/create

sudo curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.41/containers/8ddb074cfada0fdffaee4ffbee9131bedf625b1e6d789f0e438106e7af96555c/start
sudo curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.41/containers/8ddb074cfada0fdffaee4ffbee9131bedf625b1e6d789f0e438106e7af96555c/wait

curl --unix-socket /var/run/docker.sock -o - "http://localhost/v1.41/containers/8ddb074cfada0fdffaee4ffbee9131bedf625b1e6d789f0e438106e7af96555c/logs?stdout=1"

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/241899.html
標籤:區塊鏈
上一篇:《金融學》期末考試考前筆記
