容器化技術與容器服務
-
- Docker環境配置
-
- 準備Docker環境
- 運作Docker
- 運作鏡像
- Docker基本操作
-
- 顯示本地鏡像庫内容
- 獲得幫助
- 顯示運作中的容器
- 顯示所有容器(包含已中止)
- 繼續運作原容器并進入
- mysql容器建構與應用容器化
-
- 拉取 MySQL 鏡像
- 建構Docker鏡像
- 使用mysql容器
- Docker compose 與多容器應用自動化部署
- Docker網絡
- 容器監控與與日志
- Docker圖形化管理工具
- Docker Engine API與開發
Docker環境配置
準備Docker環境
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 --nogpgcheck
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo --nogpgcheck
sudo yum install docker-ce --nogpgcheck
運作Docker
systemctl enable docker
systemctl start docker
sudo docker version
運作鏡像
sudo docker run hello-world
Docker基本操作
顯示本地鏡像庫内容
sudo docker images
獲得幫助
sudo docker --help
顯示運作中的容器
顯示所有容器(包含已中止)
sudo docker ps -a
繼續運作原容器并進入
mysql容器建構與應用容器化
拉取 MySQL 鏡像
sudo docker pull mysql:5.7
sudo docker images
建構Docker鏡像
mkdir mydock && cd mydock
vi dockerfile
儲存以下内容
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
建構鏡像
sudo docker build . -t hello
運作鏡像
sudo docker run -it --rm hello -H
使用mysql容器
啟動伺服器
sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
啟動 MySQL 用戶端
mysql -h127.0.0.1 -P3306 -uroot -proot
使用MySQL容器(挂載卷儲存db)
資料庫檔案在哪裡?
ls /var/lib/mysql
Dockerfile 的 VOLUME /var/lib/mysql 的含義
sudo docker container prune -f
sudo docker volume prune
- 每次啟動 mysql 容器,docker 建立一個檔案卷挂載在容器内/var/lib/mysql位置
- 這個卷在主機(host)的 /var/lib/docker/volumes/ 目錄下
建立卷并挂載
sudo docker rm $(sudo docker ps -a -q) -f -v
sudo docker volume create mydb
sudo docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7
啟動用戶端容器連結伺服器
mysql -hmysql -P3306 -uroot -proot
Docker compose 與多容器應用自動化部署
下載下傳:docker-compose(容器編排的原型)
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
編寫:stack.yml
mkdir comptest && cd comptest
vi stack.yml
version: '3.1'
services:
db:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8080:8080
啟動服務
sudo docker-compose -f stack.yml up
Docker網絡
備制支援 ifconfig 和 ping 指令的 ubuntu 容器
apt-get update
apt-get install net-tools
apt-get install iputils-ping -y
啟動另一個指令視窗,由容器制作鏡像
sudo docker commit unet ubuntu:net
建立自定義網絡
sudo docker network create mynet
在兩個視窗建立 u1,u2 容器網絡,并使用以下指令
兩者可以ping通。
執行以下兩條指令:
sudo docker network connect bridge u1
sudo docker network disconnect mynet u1
兩個容器直接就ping不通了。
容器監控與與日志
檢查docker的狀态
sudo docker info
Docker圖形化管理工具
單節點運作
sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
Docker Engine API與開發
用 curl 發 docker 用戶端指令
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/08ade47e480e84c4296f4e775a95eb3d11350bad585318c33e3f82559cf5b4a0/start
sudo curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.41/containers/08ade47e480e84c4296f4e775a95eb3d11350bad585318c33e3f82559cf5b4a0/wait