天天看點

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

服務計算:容器化技術

  • 1:Docker安裝:
    • 1.1解除安裝舊版本的docker:
    • 2.1:支援使用https協定的倉庫:
    • 2.2 添加GPG key:
    • 2.3:添加docker鏡像源:
    • 2.4安裝指定版本的docker-ce:
    • 2.5設定docker啟動參數:
    • 2.6檢查docker的安裝:
  • 3:Docker基本操作:
    • 3.1 運作鏡像:
    • 3.2基本操作:
  • 4:MySQL與容器化
    • 4.1拉取鏡像:
    • 4.2配置容器建構檔案Dockerfile
    • 4.3 使用MySQL容器:
    • 4.4檢視資料庫檔案:
  • 4.5volume建立卷并挂載:
  • 5:Docker compose 多容器自動化部署:
    • 5.1:下載下傳docker compose:
  • 6:容器監控與日記:
  • 7:Dockers容器化部署:
    • 7.1編寫go程式和編譯:
    • 7.2 運作鏡像ubuntu
    • 7.3在容器中執行檔案:
    • 7.4将容器儲存為鏡像:
    • 7.5 将鏡像打包:
    • 7.6本地導入鏡像包:

1:Docker安裝:

1.1解除安裝舊版本的docker:

sudo apt-get remove docker docker-engine docker.io containerd runc
  • 同時還需要解除安裝Docker Engine和删除以前的配置檔案、容器和卷等等:

sudo apt-get purge docker-ce docker-ce-cli containerd.io

sudo rm -rf /var/lib/docker

sudo rm -rf /etc/systemd/system/docker.service.d

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2.1:支援使用https協定的倉庫:

  • 更新apt 包以及安裝包使得apt指令可以使用來自https的源倉庫:
    $ sudo apt-get update
      	$ sudo apt-get install \
      	    apt-transport-https \
      	    ca-certificates \
      	    curl \
      	    gnupg-agent \
      	    software-properties-common
               
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2.2 添加GPG key:

官方:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

驗證密鑰:

sudo apt-key fingerprint 0EBFCD88

如果通路官方的網站不穩定,使用阿裡雲的:

$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2.3:添加docker鏡像源:

  • 建議使用阿裡雲的鏡像源:
    $ sudo add-apt-repository \
         "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
         $(lsb_release -cs) \
         stable"
               
  • 官方的鏡像源如下:
    sudo add-apt-repository \
         "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
         $(lsb_release -cs) \
         stable"
               
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2.4安裝指定版本的docker-ce:

  • 1:檢視可用版本:
apt-cache madison docker-ce
  • 2:選擇安裝版本18.03.1:
$ sudo apt-get install -y docker-ce=18.03.1ce3-0~ubuntu
  • 3:啟動并設定開機自啟動docker:
$ sudo systemctl enable docker && sudo systemctl start docker
  • 4:将目前登入使用者添加入docker使用者組中:
$ sudo usermod -aG docker yymy
  • 5:運作鏡像hello-world以檢測docker是否成功安裝:成功運作:
sudo docker run hello-world

1:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

3:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

4:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

5:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2.5設定docker啟動參數:

  • 設定阿裡雲鏡像庫加速dockerhub的鏡像。國内通路dockerhub不穩定,将對dockerhub的鏡像拉取代理到阿裡雲鏡像庫
  • 配上1.3.2的禁用iptables的設定
  • 如果想讓podIP可路由的話,設定docker不再對podIP做MASQUERADE,否則docker會将podIP這個源位址SNAT成nodeIP
  • 設定docker存儲驅動為overlay2(需要linux kernel版本在4.0以上,docker版本大于1.12)
  • 根據業務規劃修改容器執行個體存儲根路徑(預設路徑是/var/lib/docker)

配置如下:

$ sudo tee /etc/docker/daemon.json <<-'EOF'
		{
		 "registry-mirrors":[
		 "https://kfwkfulq.mirror.aliyuncs.com",
		 "https://2lqq34jg.mirror.aliyuncs.com",
		 "https://pee6w651.mirror.aliyuncs.com",
		 "https://registry.docker-cn.com",
		 "http://hub-mirror.c.163.com"
		],
		 "iptables": false,
		 "ip-masq": false,
		 "storage-driver": "overlay2",
		 "graph": "/home/yymy/docker"
		}
		EOF
		
		$ sudo systemctl restart docker
           
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2.6檢查docker的安裝:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

3:Docker基本操作:

3.1 運作鏡像:

  • 運作一個簡易的ubuntu系統鏡像:
  • it 參數,通過終端與程序(容器)互動,stdin,stdout,stderr定向到 TTY
  • 通過指令exit退出
docker run -it ubuntu bash
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

3.2基本操作:

1:顯示本地鏡像庫内容:

docker images

2:獲得幫助:

docker help

3:顯示運作中的容器:

docker ps

4:顯示所有的容器(包括已停止)

docker ps -a

5:删除鏡像:

docker rmi

6: 删除容器:

docker rm container-id/name

7: 重新開機容器:

docker restart container-id/name

8:停止容器:

docker stop container-id
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

4:MySQL與容器化

4.1拉取鏡像:

使用如下指令拉取,可以看到成功拉到本地:

docker pull mysql:5.7
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

4.2配置容器建構檔案Dockerfile

  • 1:建立檔案dockerfile:

mkdir /home/yymy/docker &&cd docker

gedit dockerfile

  • 2:錄入如下内容:
    FROM ubuntu
      ENTRYPOINT ["top", "-b"]
      CMD ["-c"]
               
  • 3:在該目錄下建構鏡像:
sudo doker build -t hello .
  • 4:運作鏡像:
docker run -it --rm hello -H

1:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

4.3 使用MySQL容器:

1:啟動伺服器:

sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

-p:端口映射。将容器的3306端口映射到主控端的3306端口。[主控端]:[容器]

-e:設定環境變量。這裡是設定root賬号的密碼為root

–name:将容器命名為mysql2

2:啟動MySQL用戶端:

dockerrun -it --net host mysql:5.7 “sh”

mysql -h127.0.0.b1 -P3306 -uroot-proot

-it 等價于 -i -t ,表示使用目前 stdin 和 stdout 作為該程序的 io

–rm , 當該程序結束時,自動清理該容器的檔案系統空間

–net host,表示容器使用目前主機的網絡環境

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:
  • 3:mysql用戶端基本操作:

    建立資料庫:

    create database test;

    使用資料庫:

    use test;

    展示資料庫的表:

    show tables;

    建立表:

    CREATE TABLE

    tablename

    (… )
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

4.4檢視資料庫檔案:

1:通過指令docker info,檢視如下條目可得到檔案儲存的相關資訊;

Docker Root Dir: /home/yymy/docker

也就是說檔案是挂載在路徑/home/yymy/docker下:

運作容器,

docker restart mysql2

docker exec -it mysql2 bash

檢視檔案:

ls /var/lib/mysql
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2:删除不使用的容器和卷:

dockercontainer prune -f

dockervolume prune

dockervolume ls

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

4.5volume建立卷并挂載:

建立卷mydb:

docker rm $(docker ps -a -q) -f -v

dockervolume create mydb

再次運作,挂載了新建立的卷

docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7

檢查卷,發現新建立了卷mydb,并挂載在/home/yymy/docker/volumes下面:

docker volume ls

1:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

3:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

5:Docker compose 多容器自動化部署:

5.1:下載下傳docker compose:

  • Linux 上我們可以從 Github 上下載下傳它的二進制包來使用,最新發行的版本位址:https://github.com/docker/compose/releases。

    運作以下指令以下載下傳 Docker Compose 的目前穩定版本:

sudo curl -L “https://github.com/docker/compose/releases/download/1.24.1/docker-compose- ( u n a m e − s ) − (uname -s)- (uname−s)−(uname -m)” -o /usr/local/bin/docker-compose

要安裝其他版本的 Compose,請替換 1.24.1。将可執行權限應用于二進制檔案:

sudo chmod +x /usr/local/bin/docker-compose

建立軟鍊:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

測試是否安裝成功:

$ docker-compose --version

編寫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
           

1:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

2:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

6:容器監控與日記:

1:檢查docker的狀态:

docker info

2:檢查版本

docker info --format{{.ServerVersion}}

檢查容器狀态:

docker inspect container-name

docker inspect -f ‘{{.NetworkSettings.IPAddress}}’ id

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

7:Dockers容器化部署:

7.1編寫go程式和編譯:

在路徑:/home/yymy/gowork/test/test.go編寫一個簡單代碼:

生成可執行檔案test:

go build test.go
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

7.2 運作鏡像ubuntu

檢視是否有該鏡像以及鏡像id

docker images

docker ps -a

運作,生成容器godocker;

docker run -p 8888:80 --name godocker -e ENV=“dev” -it f643c /bin/bash

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

7.3在容器中執行檔案:

1:複制檔案到容器中:

docker cp /home/yymy/gowork/test/test godocker:/var

2:重新運作容器:并執行可執行檔案;輸出了資訊

docker restart godocker

docker exec -it godocker /bin/bash

./var/test

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

7.4将容器儲存為鏡像:

使用指令docker commit可以将容器轉化為鏡像:

docker commit -m “my godocker” -a “yymy” 44b78992eb61 yymy/test-go:1.0.0

-m 送出的附加資訊

-a 使用者

檢視鏡像,可以看到新生成的鏡像:

docker images
服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

7.5 将鏡像打包:

使用如下指令進行打包,

-o為打包的輸出路徑

docker save -o /home/yymy/docker/test-go.v1.0.0.tar 913945e94e2e

可以看到成功輸出鏡像的打封包件:

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

7.6本地導入鏡像包:

1: 先删除正在運作的容器和鏡像:

docker stop

docker rm

docker rmi

2:導入鏡像:

docker load < /home/yymy/docker/test-go.v1.0.0.tar

docker images

3:再次運作可執行檔案

docker run -it 913945e994e2e /bin/bash

./var/test

服務計算:容器化技術1:Docker安裝:3:Docker基本操作:4:MySQL與容器化4.5volume建立卷并挂載:5:Docker compose 多容器自動化部署:6:容器監控與日記:7:Dockers容器化部署:

繼續閱讀