天天看點

容器化技術與容器服務

容器化技術與容器服務

    • 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
           
容器化技術與容器服務