Docker
1|0Docker安装
#添加阿里云的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
2|0Docker配置
修改启动文件,监听远程端口
#修改,开启远程管理端口(注意:外网要限制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
3|0Docker镜像加速器
使用阿里云镜像加速器提升获取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
4|0Docker镜像仓库
4|1选择一:阿里云ACR
地址:https://www.aliyun.com/product/acr
#登录仓库 sudo docker login --username=用户名 registry.cn-shanghai.aliyuncs.com #按提示输入用户名密码登录
#pull / tag / push
4|2选择二:使用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
4|3选择三: 使用Harbor自建Docker仓库
参考:
5|0Docker常用操作
镜像 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
6|0DockerFile
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 内容
1 2 3 4 5 6 | <? 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 > |
7|0Docker容器编排
7|1使用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 :详见后续步骤
#进入文件目录
1 2 3 4 5 | #启动 docker-compose up #后台启动: docker-compose up -d #停止:docker-compose stop |
7|2使用docker stack编排容器(推荐)
Docker Stack 和 Docker Compose 的一个区别是,Stack 不支持构建。这意味着在部署 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。移除操作执行前并不会进行二次确认。
7|3Compose 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
8|0Docker容器集群
参考: Kubernetes vs. Docker Swarm:完整的比较指南
8|1Docker 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 中删除某服务。该命令会在不做确认的情况下删除服务的所有副本,所以使用时应保持警惕。
8|1Kubernetes
全局参考
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
__EOF__
作 者:码农搞事情
出 处:https://www.cnblogs.com/fmp/p/11463319.html
关于博主:一本正经写程序&不务正业搞事情
版权声明:欢迎分享,转载请注明出处。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?