Docker系列之入门
Docker简介
- 是一个软件,一个可以在Windows、mac、Linux等各种操作系统上运行的软件
- 是一个开源的应用容器引擎,它是基于Go开发的,项目目前是在Github上开源维护的
- 可以让开发打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到各种流行的Linux机器上
- 容器是完全使用沙箱机制,相互之间不会有任何的API交互,最主要的是容器性能方面开销成本很低
Docker组成部分
- docker主机(Host):安装了Docker程序的机器,Docker是直接可安装在各种操作系统上的,可以理解它就是一个软件
- docker仓库(Registry):用来保存各种打包好的软件镜像,仓库分为公有和私有,跟maven很相似,它也有仓库官网地址,维护了各种镜像
- docker镜像(Images):软件打包好的镜像,放在docker仓库中
- docker容器(Container):镜像启动后的实例称为容器,容器是独立运行的一个或一组应用
Docker安装
安装docker的时候,我们会接触到两个重要组件:Docker CLI客户端和Docker daemon服务端
安装环境是我自己搭建的一个虚拟机:使用的是centos7.8,安装我就不做赘述了
配置阿里云yum源
1、下载安装wget
yum install -y wget
有些时候运行这个命令会报错:yum repolist all“ to see the repos you have
具体的解决方案看这篇文章:
https://blog.csdn.net/qq_38377525/article/details/123388012https://blog.csdn.net/qq_38377525/article/details/1233880122、备份默认的yum
mv /etc/yum.repos.d /etc/yum.repos.d.backup
3、设置新的yum目录
mkdir -p /etc/yum.repos.d
4、下载阿里yum配置到刚才的目录,选择对应版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
查看系统版本的命令:cat /etc/centos-release
5、更新epel源为阿里云epel源
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
6、重建缓存
yum clean all yum makecache
7、查看yum仓库包
yum repolist
安装Docker
1、安装插件
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
本地缓存一份:yum makecache fast
3、查看docker版本
yum list docker-ce --showduplicates | sort -r
4、正式安装docker
推荐大家安装最新版本
yum -y install docker-ce
也可以指定版本,语法如下:
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io举例:yum install -y docker-ce-19.03.9-3.el7 docker-ce-cli-19.03.9-3.el7
5、开启服务
#开启服务 systemctl start docker #关闭服务 systemctl stop docker
6、安装阿里云镜像加速器
原因是下载镜像的时候,会走阿里的快一点
#创建文件 mkdir -p /etc/docker #文件内容 tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://复制自己的加速器地址.mirror.aliyuncs.com"] }EOF #3、重新加载 systemctl daemon-reload systemctl restart docker
7、设置docker开启开机启动服务
systemctl enable docker
8、查看版本版本信息
docker -v docker version docker info
到这里,docker就算是安装成功了
Docker镜像(image)
docker提供了一个类似maven远程仓库的地址:Docker Hub
那,怎么去理解镜像这个概念呢?
从咱们开发的角度出发的话,可以把镜像理解为一个Class类,它就是一个应用程序,使用过程和Maven差不多,我们添加maven依赖的时候,先去下载到本地,然后再使用,docker也是,我们去远程仓库中找到镜像之后,下载该镜像到本地的Docker主机,然后可以为该镜像启动一个或者多个容器
Docker常用命令
pull命令
下载镜像的命令,默认是会去Docker Hub仓库拉取镜像
实例:下载tomcat镜像
docker pull tomcat:9.0.20-jre8
这条命令相当于maven的下载jar包一样,docker pull docker.io/tomcat:9.0.20-jre8,默认会走DockerHub地址
常用参数:
- -a,--all-tags=true/false:是否获取仓库中所有镜像,默认是false
- --disable-content-trust:跳过镜像内容的校验,默认是true
images命令
查询本机已存在的所有镜像:
docker images docker image ls
以上两个命令的效果是一样的,接下来对查询出来的格式标题进行讲解一下:
- REPOSITORY:表示镜像的仓库源,也可以理解为是什么软件
- TAG:镜像的标签,一般都是版本号信息
- IMAGE ID:镜像ID,相当于MySQL的主键ID
CREATED:镜像创建时间 SIZE:镜像大小
save命令
相当于备份, 将指定镜像保存成 tar 归档文件
mkdir -p /data cd /data #单个文件 docker save tomcat:9.0.20-jre8-alpine -o tomcat9.tar docker save tomcat:9.0.20-jre8-slim > tomcat9.slim.tar#多个文件 docker save \ ubuntu:20.04 \ alpine:3.12.1 \ centos:7.8.2003 \ debian:10.6-slim \ -o linux.tar
常用参数:
- -o:输出到的文件,相当于压缩之后的文件名称和格式
load命令
导入使用 docker save命令导出的镜像。
mkdir -p /data cd /data docker load -i linux.tar docker load < tomcat9.0.20.tar
常用参数:
- -i:指定导入的文件
- -q:精简输出信息
search命令
很多地方都不推荐用search,因为输出的信息有限,一般来说都推荐使用inspect命令
inspect命令
查看镜像全部信息
docker inspect tomcat:9.0.20-jre8-alpine
输入的是一个json文本,返回结果如下:
[{"Id": "sha256:387f9d021d3ae76a2dafd661142a2659939389def2f390d40ab73bd49df242ba","RepoTags": ["tomcat:9.0.20-jre8-alpine"],"RepoDigests": ["tomcat@sha256:17accf0afeeecce0310d363490cd60a788aa4630ab9c9c802231d6fbd4bb2375"],"Parent": "","Comment": "","Created": "2019-05-16T00:57:50.863755612Z","Container": "24ab35a23fd83a3748e701f6fdca86f3618ffb29a29bd32ed2db6f9b4336056d","ContainerConfig": {"Hostname": "24ab35a23fd8","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"8080/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin","LANG=C.UTF-8","JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre","JAVA_VERSION=8u212","JAVA_ALPINE_VERSION=8.212.04-r0","CATALINA_HOME=/usr/local/tomcat","TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib","LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib","GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23","TOMCAT_MAJOR=9","TOMCAT_VERSION=9.0.20","TOMCAT_SHA512=6d2df51f0bfc6a90cfca61c86473b8843da4162c430ab06b8f66f364931f3d8a3ad399703acdd600ff4f633d7d6725edf05d5d5d19534716a2f3f9f5238a32a0","TOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://www.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://archive.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz","TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://www.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://archive.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc"],"Cmd": ["/bin/sh","-c","#(nop) ","CMD [\"catalina.sh\" \"run\"]"],"ArgsEscaped": true,"Image": "sha256:a9ebb0fcc929c1b8ddd758efe32531ddadb78547da29a01dd8854c2d32ab5eb8","Volumes": null,"WorkingDir": "/usr/local/tomcat","Entrypoint": null,"OnBuild": null,"Labels": {}},"DockerVersion": "18.06.1-ce","Author": "","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"8080/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin","LANG=C.UTF-8","JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre","JAVA_VERSION=8u212","JAVA_ALPINE_VERSION=8.212.04-r0","CATALINA_HOME=/usr/local/tomcat","TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib","LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib","GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23","TOMCAT_MAJOR=9","TOMCAT_VERSION=9.0.20","TOMCAT_SHA512=6d2df51f0bfc6a90cfca61c86473b8843da4162c430ab06b8f66f364931f3d8a3ad399703acdd600ff4f633d7d6725edf05d5d5d19534716a2f3f9f5238a32a0","TOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://www.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz \thttps://archive.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz","TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://www.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc \thttps://archive.apache.org/dist/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz.asc"],"Cmd": ["catalina.sh","run"],"ArgsEscaped": true,"Image": "sha256:a9ebb0fcc929c1b8ddd758efe32531ddadb78547da29a01dd8854c2d32ab5eb8","Volumes": null,"WorkingDir": "/usr/local/tomcat","Entrypoint": null,"OnBuild": null,"Labels": null},"Architecture": "amd64","Os": "linux","Size": 107881954,"VirtualSize": 107881954,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/6090fc321bb15ef2c6e27c262cb559a9acfe5151b2b4d2a90eb8cc99e910c342/diff:/var/lib/docker/overlay2/3d0e4871a759c3f3e3a0d604ab689f19c09350a405f94a5311ba877d636e2a51/diff:/var/lib/docker/overlay2/be9c92fa96e7e2a315124e57745d457d8fe88a5682cf028d78a437dcea11e687/diff:/var/lib/docker/overlay2/9c702a0274a3a8a7029d6a46290e99d941797af406322d30f38a0922b3891b46/diff:/var/lib/docker/overlay2/8bb926a33b761565ece581b256eb32c4c76d9f64b8db7450904d14de45abb8dd/diff","MergedDir": "/var/lib/docker/overlay2/534de22b26cea4a350034b50e39c7618f0651a6836e0fda7b2f08c8a79076d31/merged","UpperDir": "/var/lib/docker/overlay2/534de22b26cea4a350034b50e39c7618f0651a6836e0fda7b2f08c8a79076d31/diff","WorkDir": "/var/lib/docker/overlay2/534de22b26cea4a350034b50e39c7618f0651a6836e0fda7b2f08c8a79076d31/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:f1b5933fe4b5f49bbe8258745cf396afe07e625bdab3168e364daf7c956b6b81","sha256:9b9b7f3d56a01e3d9076874990c62e7a516cc4032f784f421574d06b18ef9aa4","sha256:edd61588d12669e2d71a0de2aab96add3304bf565730e1e6144ec3c3fac339e4","sha256:48988bb7b8615c1af859b04776a46ddeb4d2bd1aa9b0a9a3ac099cf3f73ab29d","sha256:d1d0b1719b963394ea25c3936f2d67f8bdb6c90bd7166137167c7b7f135742e1","sha256:b7d850202de0030b2e8e076a40364bb695c891339ba321e6a743e9db0cc72766"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}} ]
查看json中指定的key的值:
#查看ID docker inspect -f {{".Id"}} tomcat:9.0.20-jre8-alpine
rmi命令
删除镜像有两种方式的命令:
docker rmi tomcat:9.0.20-jre8-alpine docker image rm tomcat:9.0.20-jre8-alpine
常用参数:
- -f:强制删除镜像,哪怕这个镜像被其他的容器引用,但是一般来说不推荐这么暴力,推荐两步走的优雅删除镜像的方式:先删除引用这个镜像的容器,再删除这个镜像
- -no-prune:不删除未带标签的父镜像
按照镜像ID查询:
#这个id是使用docker images命令回显的IMAGE ID docker rmi 11d8667108c2
清理镜像命令
主要是清理一些临时、没有被使用的镜像
docker image prune
常用参数:
- -a:删除所有没有用的镜像,不仅是临时文件
- -f:强制删除镜像文件,没有任何提示确认是否删除
Docker容器
说到容器应该能联想到Spring容器,Servlet容器、Tomcat容器等等,docker也是容器,也具备生命周期
常用命令
新建并启动容器
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
示例:运行tomcat
docker run -it --rm -p 8080:8080 tomcat:9.0.20-jre8-alpine
常用参数:
- -d:后台运行并返回容器ID
- -i:以交互模式运行容器,通常与-t同时使用
- -P:随机端口映射,不过不推荐用
- -p:指定端口映射,格式是主机端口:容器端口,比较推荐使用这个
- -t:为容器重新分配一个伪输入终端,通常与-i同时使用
- --name="xxx":为容器指定一个名称
- -h:指定容器的hostname
- -e:设置环境变量
- --net="bridge":指定容器的网络链接类型,支持bridge/host/none/container
- --link=[]:添加链接到另一个容器,同样不推荐使用
- -v:绑定一个卷
- --privileged=false:指定容器是否为特权容器,特权容器拥有所有的capabilities
- --rm=false:指定容器停止后自动删除容器,但是对docker run -d启动的容器无效
- --restart=no:指定容器停止后的重启策略
- no:容器退出时不重启
- on-failure:容器故障退出时(返回的状态非0)重启
- always:容器退出时总是重启,这个比较保险,所以要设置的话就设置这一个参数即可
容器日志
获取容器日志
语法:
docker logs [OPTIONS] CONTAINER
示例:
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine docker logs -f tomcat9
常用参数:
- -f:跟踪日志输出
- --tail:仅列出最新N条容器日志
删除容器
不能删除正在运行的容器
语法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
示例:
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine #需要先停止运行中的容器再删除,否则无法删除容器 docker stop tomcat9 #按照容器名称删除 docker rm tomcat9 #按照容器ID删除 docker rm 8dd95a95e687
常用参数:
- -f:通过SIGKILL信号强制删除一个运行中的容器
- -l:移除容器之间的网络连接,并不是容器本身
- -v:删除与容器关联的卷
列出容器
语法:
docker ps [OPTIONS]
示例:
docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine #查看运行中的容器 docker ps tomcat9 #查看所有容器 docker ps -a tomcat9
解析一下返回的内容:
- CONTAINER ID:容器ID
- IMAGE:使用的镜像
- COMMAND:启动容器的命令
- CREATED:创建时间
- STAUTS:状态,created、restarting、running、removing、paused、exited、dead
- PORTS:容器的端口和使用的连接类型
- NAMES:自动分配的容器名称
常用参数:
- -a:显示所有容器,不管什么状态
- -q:只显示容器编号
创建容器
创建一个新的容器但不启动它
语法:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
示例:
docker create -it --name tomcat9 -p 8080:8080 9.0.20-jre8-alpine
常用参数大致和run命令一样
启动、重启、停止容器
语法:
docker start [OPTIONS] CONTAINER [CONTAINER...] docker stop [OPTIONS] CONTAINER [CONTAINER...] docker restart [OPTIONS] CONTAINER [CONTAINER...]
示例:
docker start tomcat9 docker stop tomcat9 docker restart tomcat9
进入容器
在运行的容器中执行命令。早期有attach命令,对于阻塞命令会等待,所以不方便。在 Docker 1.3.0后提供了exec 可以在容器内直接执行任意命令
语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
示例:
#有bash命令的linux系统:例如centos docker run -it --name tomcat9.1 -p 8080:8080 tomcat:9.0.20-jre8-slim docker exec -it tomcat9.1 /bin/bash #没有bash命令的linux系统:例如alpine系统 docker run -it --name tomcat9.2 -p 8081:8080 tomcat:9.0.20-jre8-alpine docker exec -it tomcat9.2 sh
常用参数:
- -i:即使没有附加也要保持STDIN打开
- -t:分配一个伪终端
查看容器
获取容器/镜像的元数据
语法:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
示例:
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine docker inspect tomcat9
常用参数:
- -f:指定返回值的模版文件
- -s:显示总的文件大小
- --type:为指定类型返回json
更新容器
可以动态地更新容器配置,但是官方好像说这个命令不成熟,所以还是推荐rm容器之后再run
语法:
docker update [OPTIONS] CONTAINER [CONTAINER...]
示例:
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine #更新容器restart策略 docker update --restart always tomcat9
杀掉容器
杀掉一个运行中的容器
语法:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
示例:
docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine docker kill tomcat9 docker ps docker ps -a docker start tomcat9
常用参数:
- -s:向容器发送一个信号
Docker系列之入门相关推荐
- c# hdf5 写string_Pandas系列之入门篇——HDF5
Python系列之入门篇--HDF5 简介 HDF5(层次性数据格式)作用于大数据存储,其高效的压缩方式节约了不少硬盘空间,同时也给查询效率带来了一定的影响,压缩效率越高,查询效率越低.pandas ...
- Docker 极简入门教程,傻瓜都能看懂!
富 Web 时代,应用变得越来越强大,与此同时也越来越复杂.集群部署.隔离环境.灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁. 本文我们就来探索一下 Docker 的神秘世界,从零到一掌 ...
- Docker系列之镜像瘦身(五)
本节我们来讲讲在我们在构建镜像过程中不出问题,同时使得最后所构建的镜像文件大小尽可能最小. 缓存(cache) Docker的优势之一在于提供了缓存,加速镜像迭代构建,我们知道构建镜像使用docker ...
- Docker系列之二:基于容器的自动构建
自动构建系统是从美团的自动部署系统发展出来的一个新功能.每当开发人员提交代码到仓库后,系统会自动根据开发人员定制的构建配置,启动新的Docker容器,在其中对源代码进行构建(build),包括编译(如 ...
- 【Docker系列教程之三】Docker容器是如何工作的
在上一篇的文章中,我给大家主要介绍了一下 Docker 环境的搭建,简单的讲解了一下 Docker 架构,以及用 Docker 命令简单演示了一下如何拉去一个 images 镜像.本篇我们将剖析一下 ...
- Docker系列之八:在Dockerfile中使用多段构建Muti-stage build
系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...
- Docker系列之三:使用Docker镜像和仓库
系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...
- Docker系列之MySQL安装教程
Docker系列之MySQL安装教程 有了前面的基础教程Docker系列之常用命令操作手册之后,本博客记录一篇mysql的安装教程 mysql镜像查询命令 docker search mysql 几个 ...
- Docker 系列 - 01 - 下载 安装
本文完成时间:2022-03-02 02:13:25 Docker 系列文档:https://github.com/LiangJunrong/document-library/tree/master/ ...
最新文章
- ejabberd mysql 搭建配置_ejabberd安装步骤+Mysql配置
- AJAX是一门艺术: XHR篇
- python处理表格数据-python通过xrld库读取表格数据
- wps office oa控件 痕迹_WPS大更新,Office的付费功能免费用,我不会是最后一个知道的吧?...
- RMAN异机恢复步骤及故障处理
- windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法
- Winform中使用NPOI导出Excel时XSSFWorkbook wb = new XSSFWorkbook()报错
- Spring Security中HttpSecurity常用方法及说明
- 导致此错误的原因是什么 - “致命错误:无法找到本地咕噜声”
- Android wakelock机制
- leetcode 46 Permutations ----- java
- 谁会成为中国互联网下一代英雄
- java 经纬度度分秒转度_用java实现经纬度坐标度分秒与度批量转换
- python之 pyCharm pip安装pandas库失败
- 硬件设计——PWM原理与设计
- Matlab R2017a启动时初始化过程时间太长解决办法
- ios8 xcode设置launchimage
- 以逗号分割数组并且去除数组最后得空数据
- 常见浏览器对URL的长度限制
- vs2017+cuda10.2+opencv4.5.0+contrib编译