惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - zzzp0755

Docker集群 + 运维 + 镜像仓库 linux常用命令 SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为:010f28a5,但实际为:0xcaf47a0c)。 ABP vNext学习 及问题记录 winform datagridview 勾选复选框 和点击单元格事件区分 Vol.NET 开发步骤 .net6.0 新知识学习 英语2025-02 FLOAT:浮点数值数据的大致数值数据类型 Dev 案例 css 积累 20240423 JSON.NET JObject键比较不区分大小写 jsfiddle.net js在线调试 sql 时间日期函数 ele admin plus 添加dev插件 .NET Core Web API 实现图形验证码 DataGridView 保存编辑的行 .net webapi 返回类型
Docker安装和应用
zzzp0755 · 2026-03-07 · via 博客园 - zzzp0755

1、安装

​ 含义:在Centos7.6 安装Docker

docker安装
1、安装docker仓库
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo

2、安装docker
yum -y install docker-ce

3、启动docker
systemctl start docker

4、开机自启动docker
systemctl enable docker

镜像操作(image)

镜像仓库:docker images

创建镜像:docker build -t docker1 .

运行镜像:docker run -p5001:80 docker1 (每运行一次就会产生一个容器,通过docker ps -a查看)

查看镜像详细:docker inspect

查看所有容器:docker ps -a

删除镜像:docker image rm 18e064c69c6b 镜像Id(删除前要先删除镜像的所有容器:docker 【docker ps -a 出来关联的容器Id】)

下载镜像:docker pull nginx(默认镜像仓库无法访问,需用的下边的配置)

镜像仓库源:vi /etc/docker/daemon.json

{
 "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de",
    "https://docker-0.unsee.tech",
    "https://docker.hlmirror.com",
    "https://docker.1ms.run",
    "https://func.ink",
    "https://lispy.org",
    "https://docker.xiaogenban1993.com",
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ]
}

重启docker: systemctl restart docker

容器操作(container)
容器概念:运行的Linux+运行的webapi;
镜像概念:静态的Linux+静态的webapi
镜像和容器的关系:一对多关系。一个镜像多次运行,可以得到多个容器,例如:类和对象的关系,一个类多次new可以得到多个对象。
应用:部署集群 的效率提高

容器命令说明:docker container
运行容器:docker container run -p5001:80 docker3 (前台运行) docker container run -d -p5001:80 docker3(后台运行)。(运行多次即发布多个webapi)
关闭容器:docker container stop 1f63009390db(通过docker container ls查找id)
开始容器docker container start 1f63009390db(运行一个已存在且关闭的的容器)
删除容器:docker container rm 1f63009390db(通过docker container ls查找id)

正在运行的容器:docker container ls
容器的详细信息:docker container inspect 0ba4f92a0c3b
查看所有容器:docker container ls -a
进入容器:docker container exec -it 1f63009390db /bin/bash(退出容器:exit)

容器的日志:docker container logs 5eb9ab5b639d 实时显示日志:docker container logs -f 5eb9ab5b639d

关系:
1、镜像和容器:一对多
2、容器和项目:一对一
目标实现项目部署
3、Linux(5002)+容器(80)+项目(80)关系:http://192.168.40.168:5002/weatherforecast
容器端口(80)和项目端口(80)的端口必须一致

Docker文件
含义:配置构造镜像的命令 Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:8.0.0 #父镜像【项目运行环境】
WORKDIR /publish #工作目录【运行项目的目录】
EXPOSE 80 #http协议 容器端口【端口和项目端口一致】
EXPOSE 443 #https协议 容器端口【端口和项目端口一致】
COPY publish/ /publish #复制项目文件 到 容器的/publish目录
ENV ASPNETCORE_URLS http://+:80 #项目的环境变量:项目的url,必须容器端口一致
ENTRYPOINT ["dotnet", "testAPI.dll"] #运行项目的指令

 FROM:指定基础镜像(FROM是必备的指令,并且必须为第一条指令)。

  RUN: 用来执行命令行命令。其基本格式:

      shell格式: RUN  <命令>  ,输入在bash环境中的命令即可,一个dockerfile允许使用RUN不得超过127层,所以,使用一次RUN, 使用 ‘ \ ’ 换行,使用‘ && ’执行下一条命令。一般使用此种格式;

      exec格式: RUN  <"可执行文件", "参数1", "参数2">,此种方式像是函数调用中的格式;

  COPY:  复制文件。 其基本格式:

      格式1:COPY <源路径>...<目标路径>

      格式2:COPY [“<源路径1>”,....."<目标路径>"]

  ADD: 更高级的复制文件,在COPY的基础上增加了一些功能,如果复制的是压缩包的话,会直接解压,而不需要在使用RUN解压;

  CMD:容器启动命令。其基本格式:

      shell格式: CMD <命令>

      exec格式: CMD ["可执行文件", "参数1", "参数2"...]

      参数列表格式: CMD [“参数1”, “参数2”...],在指定了ENTRYPOINT指令后,用CMD指定具体的参数

  ENTRYPOINT: 入口点。其基本格式分为exec和shell,

      ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。ENTRYPOINT在运行中可以替代,不过比CMD繁琐,需要通过docker run 的参数--entrypoint 来指定。当指定了ENTRYPOINT后,CMD的含义就发生了改变,不在是直接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令。其执行时就变成了:  <ENTRYPOINT> "<CMD>"

  ENV: 设置环境变量。(都可以使用这里使用的变量)其基本格式:

      格式1:ENV <key> <value>

      格式2:ENV <key1>=<value1> <key2>=<value>...

  ARG: 构建参数。构建参数和ENV的效果一样,都是设置环境变量,所不同的是ARG所构建的环境变量在将来容器运行时是不存在的。其基本格式:

      格式1: ARG <参数名> [=<默认值>]

      格式2: 该默认值可以在构建命令 docker build  中用 --build-arg <参数名>=<值> 来覆盖

  VOLUME: 定义匿名卷。 其基本格式:

      格式1: VOLUME ["<路径1>", "<路径2>"...]

      格式2: VOLUME <路径>

  EXPOSE:  暴露端口。EXPOSE指令是声明运行时容器所提供的端口,在启动容器时不会在因为这个声明而开启端口。 其基本格式:

      格式1: EXPOSE <端口1> [<端口2>...]

  WORKDIR: 指定工作目录。其基本格式:

      格式1: WORKDIR <工作目录路径>

  USER: 指定当前用户。USER是帮助你切换到指定用户。 其基本格式:

      格式1: USER <用户名>

  HEALTCHECK: 健康检查,判断容器的状态是否正常。 其基本格式:

      格式1: HEALTCHECK [选项] CMD <命令> :设置检查容器健康状况的命令

      格式2: HEALTCHECK NONE: 如果基础镜像有健康检查指令,使用此格式可以屏蔽掉其健康检查指令

Linux 运行.net8项目

docker docker1.dll --urls="http://+5006;http://+5007"

  无法访问时候,关闭防火墙 或者 防火墙开放端口

有状态:有状态数据存在本地,用数据挂载的方式部署
无状态:无状态数据存在数据库

镜像仓库
作用:实现镜像复用,防止创建重复镜像

自定义镜像
也就是手动创建镜像
构建镜像: docker build -t rmcore.
运行容器:docker run -d -p 2020:80 2021:443 rmcore(后台运行端口2020)
停止容器:docker stop rmcore
启动容器:docker start rmcore




容器编排 docker-compose

批量创建多个镜像,和多个容器就是docker-compose

目的:是方便镜像和容器的管理

使用docker-compose构建镜像

version: '3'
services:
  rmcore1:
    build: /root/ydt/nginx
    ports:
     - 8088:80
     - 8089:443
  nginx2:
    build: /root/ydt/productservice
    ports:
     - 8090:80	

运行docker-compose.yml文件

​ 1、切换docker-compose.yml目录

​ 2、运行yml文件

​ docker-compose up -d

docker network网络

为什么要进行容器互联
​ 容器之间由于是隔离的,导致网络是不通的。
​ 使用网络network来解决,内部使用Bridge桥接网络来解决!
在docker-compose.yml文件内使用network

version: '3'
services:
  ydtnginx:
    build: /root/ydt/nginx
    ports:
     - 8088:80
    networks:
     - microservice
  productservice:
    build: /root/ydt/productservice
    ports:
     - 8090:80
    networks:
     - microservice
networks:
 microservice:
      external: true

更新compose.yml配置文件
docker-compose up -d

数据挂载
docker volume数据卷
数据卷就是将容器的数据存储到主机上,方便进行持久化存储
先创建nginx.conf文件

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        proxy_pass  http://productservice:80;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
   }
 }

  然后在docker-compose.yml文件中配置

version: '3'
services:
  ydtnginx:
    build: /root/ydt/nginx
    ports:
     - 8088:80
    networks:
     - microservice
    volumes:
     - /root/ydt/compose/nginx.conf:/usr/local/nginx/conf/nginx.conf
  productservice:
    build: /root/ydt/productservice
    ports:
     - 8090:80
    networks:
     - microservice
networks:
 microservice:
      external: true

备注:

1、volumes:数据卷指令

2、/root/ydt/compose/nginx.conf :Linux主机nginx.conf文件地址

3、/usr/local/nginx/conf/nginx.conf :nginx容器nginx.conf地址

总结:涉及的文件:yaml文件 、Dockerfile、docker-compose.yaml