Docker

docker介绍

Docker是一个客户端-服务器(C/S)架构程序。本质上是通过go语言对lxc技术的一个封装,遵守Restful规范

docker hub注册一个账号(用来拉取镜像):https://hub.docker.com/

docker分为docker-ce(免费)和docker-ee(收费)

# 各种软件用什么语言写的
zabbix(监控软件):php
ansible(批量管理主机,执行命令,无angent):python
openstack(云计算,管理虚拟机):python
jekins(ci/di):自动化部署,java
salstack(批量管理主机,执行命令,有angent):python
普罗米修斯(Prometheus,监控):go写的
docker:go
k8s:go # 虚拟化
vmware,kvm,openstack,docker,k8s
云服务器:vmware,kvm虚拟化出来的
阿里云,腾讯云:opensatck,阿里飞天,用来管理虚拟化出来的操作系统
docker:进程级别的隔离,装在虚拟机,云服务器上,一个云服务上开业跑出成几百个docker容器
k8s:管理不同机器的上万个容器
虚拟化:打破实体结构间的不可切割的障碍 # 两个重要概念
镜像(image)与容器(container)

docker架构图

docker安装

Docker 的安装包以及周边高速镜像:http://get.daocloud.io/

centos上安装(7.0以上)

# 0.卸载(纯净环境直接跳过)
yum remove docker docker-common docker-selinux docker-engine
rm -rf /var/lib/docker
# 1.更新yum
yum update -y
# 2.安装需要的软件包,yum-util
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3.执行(向你的yum源,增加一条记录)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4.安装
yum install docker-ce -y
# 5.验证安装(查看版本)
docker -v # 自从分了docker-ce和docker-ee以后,开始以年份命名版本(Docker version 23.0.1, build a5ee5b1)
# 6.启动docker服务
systemctl start docker
# 7.停止docker服务,重启docker服务
systemctl stop docker
systemctl restart docker
# 8.开机启动
systemctl enable docker
# 9.查看概要信息
docker info """docker info命令最后两行警告"""
...
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
解决办法:(相当于在vim /etc/sysctl.conf文件里新增两行)
echo 'net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.conf
查看配置是否生效:sysctl -p|grep 'net.bridge'
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
重启docker:systemctl restart docker
重新校验:docker info

远程仓库

# 注册,登录 https://hub.docker.com/
# 可以上传和下载镜像(类似于github)
# 配置加速(换源)
vim /etc/docker/daemon.json
# 复制粘贴一定要正确,少了东西docker会报错Failed to start Docker Application Container Engine.
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ghcr.io",
"https://mirror.baidubce.com"
]
}
# 自用:https://571wq2ml.mirror.aliyuncs.com

镜像操作

基本操作

# 查找镜像
https://hub.docker.com/
or
docker search xxx
# 拉取镜像
docker pull hello-world # 默认最新版本latest
docker pull hello-world:指定版本
# 查看机器上的镜像
docker images
# 删除镜像
docker rmi 镜像名字/id号 # 如果还有基于这个镜像的容器,是不允许删除镜像的,先删除容器,再删除images
# 镜像重命名
docker tag 镜像id 仓库(镜像名字):标签 # docker tag 4f06 mysql:mysql8.0.32
or
docker tag 旧镜像名 新镜像名 #

阿里云操作

阿里云容器镜像实例地址:https://cr.console.aliyun.com/cn-hangzhou/instances

# 登录
docker login --username=hkwjsxl registry.cn-hangzhou.aliyuncs.com
# 将镜像推送到Registry
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:[镜像版本号]
# 从Registry中拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:[镜像版本号]

示例

# 安装python,mysql,redis,nginx,centos7
1.拉取
docker pull registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:python39
docker pull registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:mysql8.0.32
docker pull registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:redis7
docker pull registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:nginx1.23.3
docker pull registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:centos7
2.重命名
docker tag 4f06 mysql:mysql8.0.32
...
3.删除原来的
docker rmi registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:python39
docker rmi registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:mysql8.0.32
docker rmi registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:redis7
docker rmi registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:nginx1.23.3
docker rmi registry.cn-hangzhou.aliyuncs.com/hankewei/hkwimage:centos7

容器操作

# 0.docker run 镜像 如果本地没有,会先pull,再run
# 1.删除容器
docker rm 容器名字/容器id
# 2.启动并运行容器
docker run -di --name=lcentos centos:centos7 # 打印出的是容器的id号
# 3.查看机器上正在运行的容器
docker ps
# 4.查看宿主机上所有的容器(包括停止的)
docker ps -a
# 5.停止容器
docker stop 容器名字/id号
# 6.启动容器
docker start 容器id/名字
# 7.容器的创建和启动(******)
创建:
docker create --name=lcentos centos:centos7 ps -A
启动
docker start lcentos
# 容器一直运行的原因
它有一条前台进程,一直在运行
以后如果自己制作的镜像,运行起容器,必须有个可以夯住的命令
如果该命令结束,该容器也就结束了
# 参数
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
--name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)
-v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
# 8.进入容器的几种方式(并不是真进入)
第一种:
docker exec -it 容器id/容器名字 /bin/bash
docker exec 容器id/容器名字 ls
# exec真正的作用是在容器内执行命令
第二种:ssh连接(容器内部装ssh服务端)
# 9.退出
exit
# 10.文件拷贝
从宿主机拷贝到容器内部
docker cp t1.txt 容器id/容器名字:/home
从容器内部拷贝到宿主机
docker cp 容器id/容器名字:/home/t1.txt /home
# 11.目录挂载(一旦挂载,以后宿主机目录内修改,同样影响容器内部,反过来也是)
docker run -di --name=lcentos -v /home/:/home/ centos:centos7
# 12.端口映射
docker run -di --name=lredis -p 6666:6379 redis:redis7
# 13.查看容器详细信息
docker inspect 容器id/容器名字
# 查看ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/

其他操作

# 查看容器运行日志
docker logs 容器id/名字
# 设置开机重启
--restart=always
# 启动所有容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 关闭所有容器
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 删除所有容器
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 删除所有镜像
docker rmi $(docker p_w_picpaths | awk '{print $3}' |tail -n +2)
# 重启所有容器
docker restart $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 删除所有与当前docker-compose.yml文件有关的镜像额容器
docker-compose -f docker-compose.yml down --rmi all -v
# 容器与镜像存放目录
镜像位置: /var/lib/docker/image
容器位置: /var/lib/docker/containers

应用部署

部署redis详解

redis配置下载地址

https://redis.io/docs/management/config/

部署应用并映射外部目录(redis)

# 部署redis,把配置文件和数据目录映射出来
# 操作步骤
# 1.创建目录
cd /home/
mkdir redis redis/conf redis/data
# 2.下载redis配置文件(7版本)
cd /home/redis/conf/
wget https://raw.githubusercontent.com/redis/redis/7.0/redis.conf
# 下载如果报错:Unable to establish SSL connection.
# 解决方式1:加上参数--no-check-certificate
# 解决方式2:加上参数--user-agent="" (有些网站不允许通过非浏览器的方式进行下载,使用代理即可)
# 在尾部新增以下内容(:$可以直接到尾部)
bind 0.0.0.0
daemonize no
requirepass root123456
# 参数详解
"""
使redis可以外部访问
用守护线程的方式启动,这里是通过docker部署,所以选择no
给redis设置密码
"""
# 3.创建并运行容器
docker run -p 6666:6379 --name lredis -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data -di redis:redis7 redis-server /etc/redis/redis.conf
"""
# docker ps看一下是否运行起来,如果是一启动就立即停止了,执行命令docker logs 容器id 查看一下日志,
# 可能是因为配置文件里面的注释的原因,删除掉注释后成功启动,还有的情况是没有权限,启动时加上`--privileged=true`即可,其余报错看自己情况
"""
# 4.本地机器上远程连接到了docker里的redis
# 5.cmd窗口下(虚拟机的话是虚拟机的地址而不是生成的redis容器的地址)
# 如果外部无法访问,关闭防火墙,重启docker,再重启容器
redis-cli -h 10.0.0.10 -p 6666
# 6.认证
auth root123456
# 7.写入数据
set name 111
# 8.保存数据
save(直接夯在那)或者是bgsave(后台保存)
# 9.在宿主机的/home/redis/data路径下就能看到一个文件,不管多少次重启redis容器,数据都还在,如果原来的redis容器没了,按照第三步再启动一遍,数据也都还在

redis容器一启动就立即停止报错原因截图

部署mysql

# 创建目录
# 创建存放MYSQL配置文件目录,创建存放MYSQL数据存放目录,创建存放MYSQL日志存放目录
mkdir -p /home/mysql/conf/ /home/mysql/data/ /home/mysql/logs/
# 启动
docker run -di --name=lmysql -p 7777:3306 -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf/:/etc/mysql/conf.d -v /home/mysql/logs/:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root123456 mysql:mysql8.0.32
# 测试连接
docker exec -ti lmysql /bin/bash
mysql -uroot -p
root123456
# 查看MySQL ip
select SUBSTRING_INDEX(host,':',1) as ip , count(*) from information_schema.processlist group by ip;
# 查看端口号
show global variables like 'port';

迁移与备份

# 容器保存为镜像
docker commit 容器名字/id 镜像名字
# 把镜像打包成压缩包
docker save -o xxx.tar xxx
# 把压缩包回复为镜像
docker load -i xxx.tar # 操作步骤
1.启动一个python容器
docker run -di --name=lpython39 python:3.9
2.进入装软件
docker exec -it lpython39 /bin/bash
mkdir /project
pip install django==3.2.26
exit
3.把项目拷贝到容器内部
docker cp /home/django_project /project
4.把容器做成镜像
docker commit lpython39 django_project
5.基于自己做的镜像运行容器
docker run -di --name=ldjango_project -p 8088:8088 django_project python /project/manage.py runserver 0.0.0.0:8088

dockerfile

介绍

dockerfile就像一个文件,里面一堆指令,通过这个文件可以生成镜像

指令

FROM image_name:tag  # 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name # 声明镜像的创建者
ENV key value # 设置环境变量 (可以写多条)
RUN command # 是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file # 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file # 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir # 设置工作目录

dockerfile部署Django项目并配置均衡负载

# 1.创建目录并进入
mkdir –p /home/luffyapi/
cd /home/luffyapi/
# 2.拉取项目
git clone https://github.com/HkwJsxl/LuffyAPI.git luffyapi
# 3.写一个Dockerfile(文件名字必须是Dockerfile),拉取的项目已经有了
vim dockerfile
FROM python:python39
MAINTAINER hkw
EXPOSE 8080
COPY requirements.txt /tmp/
RUN pip install -r /tmp/requirements.txt -i https://pypi.douban.com/simple/
RUN pip install uwsgi -i https://pypi.douban.com/simple/
COPY . /tmp/
VOLUME ["/home"]
WORKDIR /home/luffyapi
CMD ["python", "/home/luffyapi/manage_pro.py", "runserver", "0.0.0.0:8080"] FROM python:python39
MAINTAINER hkw
EXPOSE 8080
COPY requirements.txt /tmp/
RUN pip install -r /tmp/requirements.txt -i https://pypi.douban.com/simple/
COPY . /tmp/
VOLUME ["/tmp"]
WORKDIR /tmp
CMD ["uwsgi", "--ini", "/tmp/uwsgi.ini"]
CMD ["python", "/tmp/manage_pro.py", "runserver", "0.0.0.0:8080"]
# pip install 安装的时候可能会出现
"""
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f3b57815c70>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/authlib/
#0 129.1 ERROR: Could not find a version that satisfies the requirement Authlib==1.2.0 (from versions: none)
#0 129.1 ERROR: No matching distribution found for Authlib
"""
# 解决方法:vim /etc/resolv.conf 增加:nameserver 8.8.8.8
# 4.通过dockerfile构建出镜像(不要省略后面的点)
docker build -t='luffyv1' .
# 5.查看镜像
docker images
# 6.启动容器
docker run -di --name=luffyv1 -v /home/luffyapi/:/home/luffyapi/ -p 8080:8080 -e MYSQL_PASSWORD=root123456 -e REDIS_PASSWORD=root123456 -e TX_SMS_KEY=cb1e82df4095c4695988b38cc2745591 luffyv1
# 如果git上更新了代码,服务器git pull一下,重启一下容器,就是最新的代码了
# 进入容器
docker exec -ti luffyv1 /bin/bash
# 7.在外部访问测试
# 8.配置nginx转发
# 9.创建文件夹
mkdir -p /opt/nginx/conf /opt/nginx/html /opt/nginx/logs
# 10.新建配置文件
vim /opt/nginx/conf/nginx.conf
# 11.写入(配置了负载均衡)
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream node {
server 10.0.0.10:8080;
server 10.0.0.10:8081;
}
server {
listen 80;
server_name localhost;
location / {
# proxy_pass http://10.0.0.10:8080;
# 负载均衡配置
proxy_pass http://node;
}
}
}
# 12.docker中运行nginx
docker run --name lnginx -id -p 80:80 -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/html:/etc/nginx/html -v /opt/nginx/logs:/var/log/nginx nginx:nginx1.23.3
# 13.多启动几个docker容器
docker run -di --name=luffyv1_2 -v /home/luffyapi/:/home/luffyapi/ -p 8081:8080 -e MYSQL_PASSWORD=root123456 -e REDIS_PASSWORD=root123456 -e TX_SMS_KEY=cb1e82df4095c4695988b38cc2745591 luffyv1
# 14.重启nginx
# 假设一个容器挂了,其他的容器启动着,也能正常提供服务

dockerhub私有仓库

https://hub.docker.com/

登录上传

# 把自己的镜像传到docker hub上
# 1.登录
docker login 回车,输入用户名 密码
# 2.给你要上传的image打个标签
docker tag 38f3 用户名/luffyv1
# 3.上传
docker push 镜像

下载

# 0.拉取私有仓库镜像
docker pull registry
# 0.启动容器
docker run -di --name=registry -p 5000:5000 registry
# 打开浏览器 输入地址http://10.0.0.10:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空
# 1.配置
修改daemon.json
vim /etc/docker/daemon.json
添加以下内容,用于让docker信任私有仓库地址
{"insecure-registries":["10.0.0.10:5000"]}
# 2.重启docker服务
systemctl restart docker
# 3.重启容器
docker start registry
# 4.打标签
docker tag 38f3 10.0.0.10:5000/luffyv1
# 5.上传到私有仓库
docker push 10.0.0.10:5000/luffyv1
# 访问 http://10.0.0.10:5000/v2/_catalog
# 6.从私有仓库拉取镜像
docker pull 10.0.0.10:5000/luffyv1

docker-compose

介绍

docker-compose是一个单机情况下容器编排的工具

通过yml文件定义多个容器,默认名字docker-compose.yml

三个概念,Service Networks ,Volumes,一个service代表一个container,这个container可以从docker hub的image来创建,或者从本地dockerfile build的image来创建

安装

# github有点慢,可以使用daocloud
https://get.daocloud.io/
# 1.安装
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.16.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 2.权限设置
chmod +x /usr/local/bin/docker-compose
# 3.查看版本信息
docker-compose -v

部署多应用

# 0.写一个dockerfile和一个docker-compose文件(上面的项目里面已经有了(项目代码里的是数据库用的是sqlite3)https://github.com/HkwJsxl/LuffyAPI)
# 0.拉取镜像(上面的 镜像操作 里面有步骤),暂停所有容器,删除所有容器
# 1.启动
docker-compose up
# 后台启动
docker-compose up -d

常用命令

ps  # 查看已经启动的服务状态
up # 启动yml定义的所有服务
stop # 停止yml中定义的所有服务
start # 启动被停止的yml中的所有服务
kill # 停止某个服务
logs # 可以查看某个服务的log
port # 打印绑定的public port
pull # pull服务镜像
kill # 强行停止yml中定义的所有服务
rm # 删除yml中定义的所有服务
restart # 重启yml中定义的所有服务
scale # 扩展某个服务的个数,可以向上或向下

多个容器直接通信方式

1 端口映射到宿主机,直接访问宿主机
2 通过ip地址访问
3 run的时候指定 --link 容器
docker run -di --name=centos1 centos:centos7
docker run -di --name=centos2 --link centos1 centos:centos7 进入到centos2中 ping centos1 可以ping同
# 跨主机的容器通信
-端口映射

Volume相关

docker使用volume实现数据的持久化,不仅如此volume还能帮助容器和容器之间,容器和主机之间共享数据。

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷 可以在容器之间共享和重用
  • 数据卷 的修改会立马生效
  • 数据卷 的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除

基本语句

# 创建一个数据卷
docker volume create my-vol
# 查看所有的数据卷
docker volume ls
# 查看指定数据卷的信息
docker inspect id
# 启动一个挂载数据卷的容器
在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷。
--mount source=/home/nginx,target=/usr/share/nginx/html
# 删除数据卷
docker volume rm id/名字
# 清理无主的数据卷
docker volume prune
# 如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

使用

# 基于本地的Volume:在容器创建或者run的时候,通过 -v指定
# 基于plugin的Volume:插件方式,第三方方案,如NAS,aws
# volume的类型
# 1 受管理的data Volume,由docker后台自动创建(Data volume)
# 2 绑定挂载的Volume,具体挂载可以由用户指定 (Bind Mouting)
#################Data volume
## 启动一个mysql的容器
docker run -d --name lmysql -e MYSQL_ROOT_PASSWORD=root123456 mysql:mysql8.0.32
docker volume ls # 可以看到刚刚创建容器的voluem
docker volume id号 # 删除
docker inspect id号 # 可以看到mount到的本地某个位置
# 再创建,也会创建一个volume
# 删除容器,volume是不会被删除的(数据不会丢) # 两个容器可以共用一个volume
docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ROOT_PASSWORD=root123456 mysql:mysql8.0.32
# 进入到容器,创建一个数据库
# 停掉容器,删除容器
sudo docker volume ls # 文件还在(删除掉容器,下次用同样的方式启动这个容器文件啥的都还在)
# 重启一个容器,使用该volume
docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ROOT_PASSWORD=root123456 mysql:mysql8.0.32
# 进入到容器,看到数据库还在

清除docker镜像缓存

# 命令
docker system prune --volumes

作用:所有停止的容器;所有不被任何一个容器使用的网络;所有不被任何一个容器使用的volume;所有无实例的镜像

docker开发的更多相关文章

  1. Visual Studio Code和Docker开发asp.net core和mysql应用

    Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...

  2. Mac结合Docker开发

    Mac结合Docker开发 前几天在看Java并发实战时,在Mac上写了一个示例,结果运行后无法按照书本上运行.主要是有些命令,在Mac和Linux是有区别的,比如top, Mac上是不支持-Hp,意 ...

  3. Springboot整合MongoDB的Docker开发,其它应用也类似

    1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...

  4. docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用

    .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...

  5. vagrant特性——基于docker开发环境(docker和vagrant的结合)-1-基本使用

    Docker vagrant提供了使用Docker作为provider(其他的provider有virtualBox.VMware\hyper-V等)的开箱即用支持.这允许你的开发环境由Docker容 ...

  6. vagrant特性——基于docker开发环境(docker和vagrant的结合)-0-简介

    原文https://www.hashicorp.com/blog/feature-preview-docker-based-development-environments Feature Previ ...

  7. vagrant特性——基于docker开发环境(docker和vagrant的结合)-3-boxes和配置

    Docker Boxes Docker provider不需要vagrant box.因此其config.vm.box设置是完全可选的.但是,仍然可以使用并指定一个box来提供默认值.由于一个带着bo ...

  8. 使用Docker开发NodeJs APP

    英文版原文地址 这是两篇连载文章的第一篇,讲解了如何使用 Docker 替代 Vagrant 开发基于 Express 框架的NodeJs App的部分细节.不过,这次要增加点难度:我们要使用 con ...

  9. .net core 在 Docker 开发下的巨坑

    一,Docker 的安装 Windows 安装  Docker 官方文档: https://docs.microsoft.com/zh-cn/virtualization/windowscontain ...

  10. 使用 Docker 开发 - 使用多阶段构建镜像

    多阶段构建是一个新特性,需要 Docker 17.05 或更高版本的守护进程和客户端.对于那些努力优化 Dockerfiles 并使其易于阅读和维护的人来说,多阶段构建非常有用. 在多阶段构建之前 构 ...

随机推荐

  1. echarts api的介绍

    参考的地址:https://echarts.apache.org/zh/api.html echarts.init echarts.init(dom?: HTMLDivElement|HTMLCanv ...

  2. Vite 按需引入 Ant Design Vue 3.0

    Vite 按需引入 Ant Design Vue 3.0 第一步下载: npm i unplugin-vue-components -D 需要注意的是:Vite你可以用 unplugin-vue-co ...

  3. Vue3类型判断和ref的两个作用

    1.类型判断的四种方法 isRef: 检查一个值是否为一个ref对象 isReactive:检查一个对象是否是由 reactive 创建的响应式代理 isReadonly: 检查一个对象是否是由 re ...

  4. click与addEventListener和removeEventListener事件与移除正确的移除事件详解

    1. onclick事件 es5 普通事件就是直接触发事件,相同的事件会被覆盖掉.代码如下: let demoDiv=document.querySelector(".demo") ...

  5. 大数据面试题集锦-Hadoop面试题(三)-MapReduce

    你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案.如果你需要更多的面试经验和面试题,关注一下"张飞的猪大数据分享"吧,公众号会不定时的分享相关的知识和资料. 目录 ...

  6. .net fromwork连接rabbitmq发布消息

    1.创建连接工厂类 var factory = new RabbitMQ.Client.ConnectionFactory() { HostName = "120.237.72.46&quo ...

  7. 从零开始配置vim(24)——自动补全

    neovim 自带的代码补全的效果并不好,而且它分为好多类,如果需要人为的去判断使用路径补全.使用当前buffer中的单词补全.亦或者使用include 来进行补全,那样使用起来就很不方便了.针对代码 ...

  8. 【Java 进阶】详细探究 Spring 框架中的注解与反射

    [进阶]Spring中的注解与反射 目录 [进阶]Spring中的注解与反射 前言 一.内置(常用)注解 1.1@Overrode 1.2@RequestMapping 1.3@RequestBody ...

  9. 第三届人工智能,大数据与算法国际学术会议 (CAIBDA 2023)

    第三届人工智能,大数据与算法国际学术会议 (CAIBDA 2023) ​ 大会官网:http://www.caibda.org/ 大会时间:2023年6月16-18日 大会地点:中国郑州 截稿日期:2 ...

  10. 深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

    深度学习应用篇-自然语言处理[10]:N-Gram.SimCSE介绍,更多技术:数据增强.智能标注.多分类算法.文本信息抽取.多模态信息抽取.模型压缩算法等 1.N-Gram N-Gram是一种基于统 ...