天天看點

Docker

Docker安裝

#添加阿裡雲的yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo      
#安裝docker ce
yum install docker-ce -y

#阿裡雲的centos 8 安裝docker 時提示:
#package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
#則先安裝containerd
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

#檢視docker版本
docker -v      

Docker配置

修改啟動檔案,監聽遠端端口

#修改,開啟遠端管理端口(注意:外網要限制2375端口)
vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://10.6.66.236:2375      
安全參考:https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface      
#重新開機 
systemctl daemon-reload 
systemctl enable docker.service 
systemctl restart docker.service

#檢視docker info
docker info       

Docker鏡像加速器

使用阿裡雲鏡像加速器提升擷取Docker官方鏡像的速度

#建立目錄  -p 不存在就建立  
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://rrn1rf2c.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker      

Docker鏡像倉庫

選擇一:阿裡雲ACR

位址:https://www.aliyun.com/product/acr 

#登入倉庫
sudo docker login --username=使用者名 registry.cn-shanghai.aliyuncs.com
#按提示輸入使用者名密碼登入

#pull / tag  / push      

選擇二:使用Registry自建Docker倉庫

#安裝加密工具
yum install httpd-tools  -y

#設定認證密碼   使用者名 fmp  密碼 123456
mkdir /opt/registry-var/auth/ -p
htpasswd  -Bbn fmp 123456  > /opt/registry-var/auth/htpasswd

#啟動容器,在啟動時傳入認證參數
docker run -d -p 5000:5000 --restart=always -v /opt/registry-var/auth/:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

#修改配置檔案,使之支援http ,否則登入的時候會報錯
vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries": ["10.6.66.229:5000"]
}      
#重新開機docker
systemctl restart  docker.service

#登入,輸入使用者名密碼
docker login 10.6.66.229:5000

#http通路:http://10.6.66.229:5000/v2/_catalog      

選擇三: 使用Harbor自建Docker倉庫

參考:

Harbor倉庫介紹與搭建過程

Harbor1.5.0倉庫使用教程

Docker常用操作

鏡像 pull/tag/push  容器 run    /*實際應用,更多使用dockerfile進行配置運作*/

#search
docker search nginx
#pull
docker pull nginx
#tag(注意最後一個參數,要和倉庫路徑一緻:倉庫位址/命名空間/倉庫名稱:鏡像版本号)
docker tag nginx  10.6.66.229:5000/fmp/mynginx:1.0
#push
docker push 10.6.66.229:5000/fmp/mynginx:1.0

#run -d 背景運作  -p  端口映射
docker run -d -p 80:80 nginx 
#run 啟動并進入容器  -it 互動式
docker run -it nginx:latest  /bin/bash
#run 啟動,并挂載卷
docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
#run 自動啟動
docker run  --restart=always 

#删除所有停止的容器
docker container prune

#如果run的時候,忘記加某個參數了,可以使用docker update指令
docker update redis --restart=always

#将容器送出為新的容器
docker commit -a "fmp" -m "mynginx" a404c6c174a2  mynginx:v1       
#檢視容器詳細資訊
docker container  inspect  容器名稱/id

#容器重命名
docker rename 原容器名  新容器名

#檢視容器日志
docker logs id      
#進入容器
docker exec -it nginx /bin/bash
#退出容器,回到主控端
ctrl+p & ctrl+q      

DockerFile

VS->項目上右鍵點選->添加-Docker支援

#Runtime
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80

#使用SDK編譯項目
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["xplan/xplan.csproj", "xplan/"]
RUN dotnet restore "xplan/xplan.csproj"
COPY . .
WORKDIR "/src/xplan"
RUN dotnet build "xplan.csproj" -c Release -o /app
#釋出
FROM build AS publish
RUN dotnet publish "xplan.csproj" -c Release -o /app

#運作
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "xplan.dll"]      

 參考:ASP.NET Core 2.1 使用Docker運作

加速鏡像建構的技巧

将本項目的DLL和第三方的DLL,分别使用多行COPY指令;

原理:docker 用戶端會把上下文中的所有檔案發送給 docker daemon,分多個指令,沒有變化的檔案,會使用上一次build的緩存

參考:https://www.cnblogs.com/sparkdev/p/9573248.html

dotnet restore 還原包的速度很慢,可以給dotnet restore 指令加上 :--configfile NuGet.Config

指定nuget 為 azure的cdn源

nuget.config 内容

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://nuget.cdn.azure.cn/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>
      

  

Docker容器編排

使用docker-compose編排容器

Docker-compose指令詳解

Docker系列之(五):使用Docker Compose編排容器 

#安裝
curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose      
#檢視版本
docker-compose --version

#編寫 docker-compose.yml  :詳見後續步驟
  
#進入檔案目錄      
#啟動
docker-compose up

#背景啟動:
docker-compose up -d  

#停止:
docker-compose stop       

使用docker stack編排容器(推薦)

Docker Compose和Docker Stack差別

docker stack 官方文檔

Docker Stack 和 Docker Compose 的一個差別是,Stack 不支援建構。這意味着在部署 Stack 之前,所有鏡像必須提前建構完成。

Docker Stack實踐

Docker Stack指令

1) docker stsack deploy
用于根據 Stack 檔案(通常是 docker-stack.yml)部署和更新 Stack 服務的指令。
2) docker stack ls
會列出 Swarm 叢集中的全部 Stack,包括每個 Stack 擁有多少服務。
3) docker stack ps
列出某個已經部署的 Stack 相關詳情。該指令支援 Stack 名稱作為其主要參數,列舉了服務副本在節點的分布情況,以及期望狀态和目前狀态。
4) docker stack rm
指令用于從 Swarm 叢集中移除 Stack。移除操作執行前并不會進行二次确認。      

Compose file

Compose file 官方文檔

使用Compose file,建立一個wordpress引用

#建立檔案目錄
mkdir /opt/my_wordpress/
cd /opt/my_wordpress/

#編寫編排檔案
vim docker-compose.yml      
version: '2'
services:
   db:
     image: mysql:5.7
     volumes:
       - /data/db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - /data/web_data:/var/www/html
     ports: 
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress       

 浏覽:http://ip:8000 

Docker容器叢集

 參考: Kubernetes vs. Docker Swarm:完整的比較指南

Docker Swarm

Docker Swarm常用指令

docker swarm init   用于建立一個新的 Swarm。執行該指令的節點會成為第一個管理節點,并且會切換到 Swarm 模式。

docker swarm join-token

  用于查詢加入管理節點和工作節點到現有 Swarm 時所使用的指令和 Token。

  要擷取新增管理節點的指令,請執行 docker swarm join-token manager 指令;

  要擷取新增工作節點的指令,請執行 docker swarm join-token worker 指令。

docker node ls   用于列出 Swarm 中的所有節點及相關資訊,包括哪些是管理節點、哪個是主管理節點。

docker service create   用于建立一個新服務。

docker service ls   用于列出 Swarm 中運作的服務,以及諸如服務狀态、服務副本等基本資訊。

docker service ps <service>   該指令會給出更多關于某個服務副本的資訊

docker service inspect   用于擷取關于服務的詳盡資訊。附加 --pretty 參數可限制僅顯示重要資訊。

docker service scale   用于對服務副本個數進行增減。

docker service update   用于對運作中的服務的屬性進行變更。

docker service logs   用于檢視服務的日志。

docker service rm   用于從 Swarm 中删除某服務。該指令會在不做确認的情況下删除服務的所有副本,是以使用時應保持警惕。

Kubernetes

全局參考

Docker 容器入門

Docker教程:Docker入門實踐(精講版)

Docker — 從入門到實踐

docker安裝mysql挂在資料卷至主控端 

#在主控端上建立資料目錄
mkdir /my/mysql/data

#運作mysql容器
sudo docker run --name mysqldb --restart=always  -d -v /my/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Pwd@159357 -p 3306:3306 mysql
      
Docker

鵬願科技

|

企業家

企業頭條

資本商學院

商業百科