安装Docker

环境准备

  1. 需要Linux的基础
  2. CentOS7
  3. 我们使用Xshell连接远程服务器的操作

环境查看

# 系统内核是 3.10以上
[root@iZ8vbhx84zmjw0g820swhhZ ~]# uname -r
3.10.0-1062.18.1.el7.x86_64
#系统版本
[root@iZ8vbhx84zmjw0g820swhhZ ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"

安装

帮助文档:

#1、卸载旧的版本
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine#2、安装基本的环境(安装包)
yum install -y yum-utils#3、设置镜像的仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 默认是国外的,十分慢(不推荐)# 阿里云的镜像的地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#4、更新软件包索引
[root@iZ8vbhx84zmjw0g820swhhZ ~]# yum makecache fast#5、安装docker docker-ce 社区版  ee 企业版
yum install docker-ce docker-ce-cli containerd.io#6、启动docker
systemctl start docker#7、使用 docker version 判断是否安装成功
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker version# 8、测试hello-word
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:5122f6204b6a3596e048758cabba3c46b1c937a46b5be6225b835d091b90e46c
Status: Downloaded newer image for hello-world:latest#9、查看一下下载的这个 hello-world的镜像
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   3 months ago   13.3kB

卸载docker

# 1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io#2、删除资源rm -rf /var/lib/dockerrm -rf /var/lib/containerd#  /var/lib/docker  docker的默认工作路径

阿里云镜像加速

镜像加速地址

配置和使用

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://ojwsmn7h.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker Run的运行流程图

底层原理

docker是怎么工作的?

Docker是一个Client-Serve结构的系统,Docker的守护运行在主机上。

通过Socket从客户端访问。

DockerServer接收到Docker-Client的指令,就会执行这个命令!

Docker的常用命令

帮助命令

docker version  # 显示docker版本信息
docker info  # 显示docker系统信息 包括镜像和容器
docker 命令 --help  #万能命令touch test.java # 在当前文件夹下创建java文件service docker start #docker启动
sudo service docker restart # 重启docker
service docker stop #关闭docker

帮助文档地址

https://docs.docker.com/engine/reference/commandline/restart/

镜像命令

docker images 查看所有本地的主机上的镜像
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   3 months ago   13.3kB#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID  镜像的id
CREATED  镜像的创建时间
SIZE 镜像的大小# 可选项
Options:-a, --all       #列出所有的镜像      -q, --quiet     #只显示镜像的id
docker search搜索镜像
# 帮助命令 docker search --help
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker search mysql
Options:-f, --filter filter   Filter output based on conditions provided--format string   Pretty-print search using a Go template--limit int       Max number of search results (default 25)--no-trunc        Don't truncate output# 可选项 ,通过搜索收藏来过滤
--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker pull mysql
Using default tag: latest # 如果不写tag,默认就是latest# 等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest#指定版本下载
docker pull mysql:5.7
docker pull docker.io/library/mysql:5.7
docker rmi 删除镜像
docker rmi -f 容器id # 删除指定的镜像
docker rmi -f 容器id 容器id # 删除多个的镜像
docker rmi -f $(docker images -aq) # 删除全部的镜像

容器命令

说明:我们有了镜像才可以创建容器
docker pull centos
新建容器并启动
docker run [可选参数] image# 参数说明
--name="Name" 容器名字 eg:tomact1,用来区分容器
--d     后台方式运行
-it     使用交互方式运行,进入容器查看内容
-p      指定容器的端口 -p 8080:8080-p ip:主机端口:容器端口-p 主机端口:容器端口 (常用)-p 容器端口容器端口
-P      随机指定端口# 测试,启动并进入容器
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker run -it centos /bin/bash
[root@b8341e79e202 /]# ls #查看容器的centos
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var#从容器中退回主机
[root@b8341e79e202 /]# exit
exit
列出所有运行中的容器
# docker ps 命令 # 列出当前正在运行的容器
-a #列出当前正在运行的容器 + 带出历史运行过的容器
-n=? # 显示最近创建的容器
-q #只显示容器编号[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED             STATUS                         PORTS     NAMES
b8341e79e202   centos        "/bin/bash"   5 minutes ago       Exited (0) 3 minutes ago                 sleepy_black
f97a21b12a0e   hello-world   "/hello"      About an hour ago   Exited (0) About an hour ago             kind_bouman
[root@iZ8vbhx84zmjw0g820swhhZ ~]#
退出容器
exit # 直接容器停止并退出
Ctrl + P + Q # 容器不停止退出
删除容器
docker rm 容器id   # 删除指定的容器  不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) # 删除所有的容器
启动和停止容器的操作
docker start 容器id   #  启动容器
docker restart 容器id  # 重启容器
docker stop 容器id  # 停止当前正在运行容器
docker kill 容器id  # 干掉容器

常用其他命令

后台启动容器
# 命令
docker run -d centos
# 问题,docker ps,发现 centos停止了
# docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# ngnix,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs  --help# 显示日志
-tf         # 显示日志,格式化日期
--tail      # 显示日志条数
docker logs -tf --tail 100 容器id
查看容器中的进程
# 查看容器内部的进程信息
# 命令
docker top 容器id# 测试
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker top 97d64b77809b
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                2001                1980                0                   17:18               pts/0               00:00:00            /bin/bash
查看镜像的元数据
# 命令
docker inspect 容器id# 测试
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker inspect 97d64b77809b
进入当前正在运行的容器
# 我们通常容器都是使用后台方式执行的,需要进入容器,修改一些配置#命令 方式一
docker exec -it 容器id /bin/bash
#测试
docker exec -it 97d64b77809b /bin/bash# 方式二
docker attach 容器id
# 测试
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker attach 97d64b77809b#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 主机路径
# 97d64b77809b 为容器id
# /home/kuangshen.java 为容器内的路径
# /home 为容器外路径
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker cp 97d64b77809b:/home/kuangshen.java /home
[root@iZ8vbhx84zmjw0g820swhhZ ~]# ls

Docker的commit镜像

commit镜像

docker commit -a "作者信息" -m "注释信息" 容器id 新的镜像名称:版本号
特点
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!

DockerFile镜像制作

注意:每一行dockerfile命令就是一层,镜像由一层一层而组成

FROM centos # 基础镜像
MAINTAINER wupan<504705281@qq.com> #作者信息ENV MYPATH /usr/local # 配置工作目录(环境变量配置)
WORKDIR $MYPATH # 引入工作目录地址RUN yum -y install vim # 添加镜像命令
RUN yum -y install net-tools # 添加镜像命令EXPOSE 89 # 暴露端口CMD echo $MYPATH # 输出日志
CMD echo "-----end-----"
CMD /bin/bash

实战

nginx启动和部署

# 下载nginx镜像
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker pull nginx
Using default tag: latest# 启动nginx镜像
# -d 后台方式启动
# --name 别名
# -p 外网端口:容器内端口
# nginx 容器名称
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker run -d --name nginx01 -p 3344:80 nginx
4343711a1db7c52d14dd57c8ebc1d907fcd54d33b3bd129854daaff8b4685501# 验证是否创建成功
[root@iZ8vbhx84zmjw0g820swhhZ ~]# curl localhost:3344# 进入nginx容器
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker exec -it nginx01 /bin/bash
# 查找nginx文件
root@4343711a1db7:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
# 进入nginx配置文件
root@4343711a1db7:/# cd /etc/nginx

端口暴露

-p 进行映射端口

tomcat启动和部署

# 下载镜像
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker pull tomcat
Using default tag: latest# 启动运行
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker run -d --name tomcattest01 -p 3346:8080 tomcat# 运行测试
[root@iZ8vbhx84zmjw0g820swhhZ ~]# curl localhost:3346# 进入容器
[root@iZ8vbhx84zmjw0g820swhhZ ~]# docker exec -it tomcattest01 /bin/bash# 发现问题:
# 1. linux命令少了;2. 没有webapps。阿里云镜像的原因,默认为最小的镜像,所有不必要的都剔除掉了,保证最小单位可运行的环境

docker工作常用命令

#Linux反选删除文件
shopt -s extglob      (打开extglob模式)
rm -fr !(file1)
#解压到当前目录: # (解压zip)
unzip -o ROOT.zip -d .# (解压tar.gz)
tar zxvf pythontab.tar.gz
#文件重命名
mv broker ROOT
#删除目录:
rm -rf 文件名
# 复制单个文件:
cp 原文件 目标文件
(cp broker.zip /app/sinitek/sirm/tomcat/webapps/ROOT.zip)
# 复制文件的所有文件到另一个文件夹
cp -r /data/file/* /data/newfile/
#创建目录
mkdir new_catalogue
#创建文件
touch newfile.txt
#修改文件(同时可以创建文件)
vim Dockerfile
# 查看网络地址
ip addr#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
sudo docker rm $(sudo docker ps -a -q)
#根据容器的状态,删除Exited状态的容器
sudo docker rm $(sudo docker ps -qf status=exited)

unzip参数解析

语法:unzip [选项] 压缩包名

选项 含义
-d 目录名 将压缩文件解压到指定目录下。
-n 解压时并不覆盖已经存在的文件。
-o 解压时覆盖已经存在的文件,并且无需用户确认。
-v 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。
-t 测试压缩文件有无损坏,但并不解压。
-x文件列表 解压文件,但不包含文件列表中指定的文件。

Docker总结

原目标 操作 结果
dockerfile build images
containers commit images
images push github

Docker网络

查看docker网络地址

[root@iZ8vbhx84zmjw0g820swhhZ ~]# ip addr # 查看容器内部网络地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lo  # 本机回环地址valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 10link/ether 00:16:3e:0b:d9:52 brd ff:ff:ff:ff:ff:ffinet 172.17.55.90/20 brd 172.17.63.255 scope global dynamic eth0valid_lft 314755056sec preferred_lft 314755056sec  # 阿里云内网地址
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:b7:eb:d3:8a brd ff:ff:ff:ff:ff:ffinet 172.18.0.1/16 brd 172.18.255.255 scope global docker0valid_lft forever preferred_lft forever # docker0地址

查看docker中tomcat容器内的ip地址

# 启动一个tomcat,查看内部网络地址
# 容器启动的时候会得到一个eth0@if79,docker分配的
[root@iZ8vbhx84zmjw0g820swhhZ /]# docker exec -it tomact01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
78: eth0@if79: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0valid_lft forever preferred_lft forever# liunx可以ping通docker容器内部[root@iZ8vbhx84zmjw0g820swhhZ /]# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.063 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.054 ms
64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.055 ms
64 bytes from 172.18.0.2: icmp_seq=5 ttl=64 time=0.055 ms
64 bytes from 172.18.0.2: icmp_seq=6 ttl=64 time=0.054 ms
64 bytes from 172.18.0.2: icmp_seq=7 ttl=64 time=0.051 ms

原理

1、每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个docker0桥接模式,使用的技术就是evth-pair

# 我们发现容器带来的网卡,都是一对对的
# evth-pair 就是一堆虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连
# 正因为有这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备

2、容器和容器之间是可以互相ping通的

[root@iZ8vbhx84zmjw0g820swhhZ /]# docker exec -it tomact01 ping 172.18.0.3
PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data.
64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.076 ms
64 bytes from 172.18.0.3: icmp_seq=2 ttl=64 time=0.069 ms
64 bytes from 172.18.0.3: icmp_seq=3 ttl=64 time=0.092 ms

docker网络连接图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FVmY4kWD-1631955176510)(docker的安装和部署.assets/image-20210828172947040.png)]

结论:tomcat01 和 tomcat02 是公用一个路由器:docker0

所有容器不指定网络的情况下,都是docker0路由的,docker会给我们容器分配一个默认的可用ip

只要容器删除,对应的网桥一对就没了

自定义网络

# 自定义网络
# --driver bridge
# subnet 192.168.0.0/16 子网
# gateway 192.168.0.1  网关
[root@iZ8vbhx84zmjw0g820swhhZ /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
96355b995bf2a69646cb45bcd4b263235f62e72deacb3ea69b3126a971bf7a33
[root@iZ8vbhx84zmjw0g820swhhZ /]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
2b2ed90e4cda   bridge    bridge    local
1b7530143478   host      host      local
96355b995bf2   mynet     bridge    local
4cdc6d1bde99   none      null      local[root@iZ8vbhx84zmjw0g820swhhZ /]# docker network inspect 96355b995bf2
[{"Name": "mynet","Id": "96355b995bf2a69646cb45bcd4b263235f62e72deacb3ea69b3126a971bf7a33","Created": "2021-08-28T18:46:01.097660701+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.0.0/16","Gateway": "192.168.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]

自定义网络支持通过名称来ping

[root@iZ8vbhx84zmjw0g820swhhZ /]# docker exec -it 615565aba94a ping tomcat-net-01
PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.076 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.089 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.070 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=4 ttl=64 time=0.070 ms
^C
--- tomcat-net-01 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 7ms
rtt min/avg/max/mdev = 0.070/0.076/0.089/0.009 ms

我们自定义的网络docker都已经帮我们维护好了对应的关系

网络联通

[root@iZ8vbhx84zmjw0g820swhhZ /]# docker network connect --helpUsage:  docker network connect [OPTIONS] NETWORK CONTAINERConnect a container to a networkOptions:--alias strings           Add network-scoped alias for the container--driver-opt strings      driver options for the network--ip string               IPv4 address (e.g., 172.30.100.104)--ip6 string              IPv6 address (e.g., 2001:db8::33)--link list               Add link to another container--link-local-ip strings   Add a link-local address for the container# 将容器73bb68a39466加入到网段mynet01中
[root@iZ8vbhx84zmjw0g820swhhZ /]# docker network connect mynet01 73bb68a39466

iZ8vbhx84zmjw0g820swhhZ /]# docker network connect --help

Usage: docker network connect [OPTIONS] NETWORK CONTAINER

Connect a container to a network

Options:
–alias strings Add network-scoped alias for the container
–driver-opt strings driver options for the network
–ip string IPv4 address (e.g., 172.30.100.104)
–ip6 string IPv6 address (e.g., 2001:db8::33)
–link list Add link to another container
–link-local-ip strings Add a link-local address for the container

将容器73bb68a39466加入到网段mynet01中

[root@iZ8vbhx84zmjw0g820swhhZ /]# docker network connect mynet01 73bb68a39466

docker的安装和部署相关推荐

  1. 在Docker中安装和部署MongoDB集群

    在Docker中安装和部署MongoDB集群 - tianshidan1998 - 博客园

  2. Docker从安装到部署JAVA应用

    docker安装 docker -v yum search docker yum install -y docker systemctl start docker docker version 配置加 ...

  3. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

  4. Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)

    1.Docker离线安装配置 rpm版本安装 # 系统版本 rpm -qi centos-release Name : centos-release Version : 8.1 Release : 1 ...

  5. Docker ElK安装部署使用教程

    Docker ElK安装部署使用教程 原文:Docker ElK安装部署使用教程 一.简介 1.核心组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elast ...

  6. 在阿里云ECS上安装Docker、Tomcat并部署官网(无后端交互)

    在阿里云上的ECS服务器配置 ECS 1核1G,1M带宽 Ubantu 16 Docker Tomcat 9 有公网IP,配置安全策略,没有购买RDS,购买完成后,即设置了账号.密码,远程连接工具用的 ...

  7. docker安装以及部署springboot项目

    一.docker安装 1.安装 Docker Engine-Community 安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本: ...

  8. Docker离线安装及python算法部署详细介绍

    算法部署时,常出现测试通过生产上环境各种问题的情况,很影响效率. 因此想采用docker的方式部署,市面上的安装都不是很顺利,因此本文总结各种安装方式,采用离线的方式安装,较为稳定且可行. 1.Doc ...

  9. Docker 安装和部署

    Docker 安装和部署 Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟 ...

  10. Docker安装及部署

    Docker安装及部署 一.Docker安装 二.安装Centos容器并安装Jdk 三.Docker安装部署Redis 四.Docker部署Nginx 五.Docker安装Mysql 持续记录.... ...

最新文章

  1. Scheme来实现八皇后问题(2)
  2. php 启动服务器监听
  3. 正则表达式之IP地址检验
  4. Dataset之DA:数据增强(Data Augmentation)的简介、方法、案例应用之详细攻略
  5. ubuntu系统中samba服务器搭建
  6. java多字段排序,Java8对多个字段排序
  7. c++ explicit
  8. CSS属性(根据继承性分为两类)
  9. leetcode278. 第一个错误的版本
  10. C++工作笔记-作用域的巧妙使用,释放堆区创建的资源
  11. JavaScript---DOM事件
  12. 专科python应届生工资多少-应届生自学Python两个月,为什么找不到工作?
  13. .\Objects\TIM_TEST.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.
  14. 关于制作ppt的讲解
  15. Android系统内存优化
  16. 【2022修复版】社群扫码进群活码引流完整运营源码/对接免签约支付接口/推广正常绑定下级/带视频搭建教程
  17. 喝java茶,我为你泡一杯花茶
  18. 如何修改服务器凭据,如何更改操作数据库帐户的用户凭据
  19. C语言输出格式控制符大全
  20. RK3368固件烧写

热门文章

  1. devops summary
  2. 在小鸟云新春采购节买到划算的云服务器
  3. 拼接、比较与计算——哥德尔读后之十四
  4. ios android 图文混排,[分享]iOS开发-50行代码实现图文混排
  5. 菜鸟的mongoDB学习---(二)MongoDB 数据库,对象,集合
  6. html导出excel换行,ASP.NET 导出到Excel时保留换行的代码
  7. 71 Climbing staring C++
  8. c# 蓝牙虚拟串口_c#利用虚拟串口工具进行串口通信数据的发送和接收
  9. 职场人士必学的10种Excel打印技巧【特别实用,赶紧收藏】
  10. msi2lmp不能用,mpi不能连接主机,解决办法看这里