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 内容
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
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