






















含义:在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
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。