##docker容器安装和配置###

#docker的git-hub网站:https://github.com/login

#docker官网hub仓库:https://hub.docker.com

#docker官网文档和镜像:https://docs.docker.com/samples/centos/

#docker官网的容器网络配置:https://docs.docker.com/engine/userguide/networking/#bridge-networks

#docker入门实战笔记:http://www.cnblogs.com/garfieldcgf/p/5462963.html

##docker简介

docker容器:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,

然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

说明:1、docker容器是以docker镜像来启动自己的环境。比KVM和VMware相比,占用的内存资源更少。

2、在docker中可以有自己独立的网络配置,可以跟物理机用NAT网络模式通信。

3、运行的docker容器中可以像虚拟机那样安装独立的服务软件。

4、支持在源镜像中安装新软件,并将修改用commit保存成一个新镜像。然后移值到其他物理机中使用。

##docker的3个基本概念

镜像(Image)

容器(Container)

仓库(Repository)

理解了这三个概念,就理解了Docker的整个生命周期。

docker基本工作过程:

从仓库--->下载镜像--->运行在容器中

dokcer重新封装镜像过程:

基本镜像包--->运行在容器中--->安装所需软件和启动脚本--->停止容器--->commit生成新镜像--->测试在容器中运行新镜像。

###docker镜像Image:就是一个只读模板。

例如:一个镜像可以包含一个完整的Centos操作系统环境,里面仅安装了Apache或用户需要的其它应用程序。镜像可以用来创建Docker容器。

Docker提供了一个很简单的机制来创建或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

###docker容器Container:利用窗口来运行应用。

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的程序。

注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

###Docker仓库Repository:是集中存放镜像文件的场所。

有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(public)和私有仓库(private)两种形式。

当然,用户可以在本地网络内创建一个私有仓库。

当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时,只需要从仓库上pull下来就可以了。

注:docker仓库的跟Git,注册服务器可以理解为Github这样的托管服务器。

#centos7安装和配置docker

#安装、启动docker

说明:centos7自带的网络yum源中包含docker的安装包。

yum  install  -y  docker-io  docker

rpm  -q  docker

service  docker  restart

chkconfig  docker  on

#实验:用docker快速部署nginx服务器:

源贴:

第1步:安装docker,启动服务,查看信息。

yum  install  -y  docker

service  docker  restart

chkconfig  docker  on

docker  info

第2步:查找nginx镜像,并抓取镜像(下载镜像),查看镜像。

docker  search  nginx   //查找

docker  pull  nginx     //下载

docker  images   //查看所有镜像

docker  save  nginx  > nginx.tar   //导出nginx镜像

第3步:指定镜像创建容器并启动服务。访问nginx的测试网站。

docker  run  -d  -p  80:80  --name  cn1  nginx

curl  172.17.0.2    //ip是容器默认的ip,用ifconfig查看

参数说明:-d  放在后台执行(daemon)

-p  主机端口:容器端口   将容器的端口映射到主机上,目的是可以直接对外提供访问。

--name  指定容器名称

第5步:容器的管理。

docker  ps  -a //查看所有容器

docker  kill  cn1   //结束cn1这个容器

docker  start  cn1   //启动cn1容器

docker  rm   cn1   //删除cn1容器

-------------------

###docker常用命令汇总:

查看docker帮助:docker

查看docker的start命令帮助:docker  start  --help

查看docker信息:docker  info

查找nginx镜像:docker  search  nginx

设置docker镜像下载的仓库:

查看本地镜像:docker   images

查看docker容器进程:docker   ps  -a

docker下载的镜像保存的路径:ls /var/lib/docker/

下载镜像:docker  pull  镜像名:tag号

镜像centos6下载实例(有yum源和网络):docker  pull  centos:6

镜像centos7下载实例(无yum源和网络):docker  pull  centos:7

运行docker容器:docker  run  --name  实例名称 -d -it   镜像名   sh

运行docker容器:docker  run  --name  实例名称 -d -it   镜像名   /bin/bash

运行docker容器实例:docker run  --name  cto7  -d -it centos:7 sh

交互的方式进入已经运行的容器中:docker exec -it centos:6 /bin/bash

查看docker容器日志(操作日志):docker  logs   id或Name

说明:CONTAINER_ID(是容器ID号)或Name(是容器名称)

停止docker容器:docker  stop   CONTAINER_ID或Name

启动docker容器:docker  restart   CONTAINER_ID或Name

删除docker窗口:docker  rm  CONTAINER_ID或Name

发布docker镜像:docker push new_image_name

登录registry server(login)

#登陆registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username

#登录:docker login

返回正常系统:ctrl+p+q(正常返回后台运行)   (或exit退出并停止运行)

进入docker实例环境:docker  attach  CONTAINER_ID或Name

docker其他命令:

#启动sshd服务:/usr/sbin/sshd -D

#退出,但不停止容器:Ctrl+P+Q

#回到Docker下面,停止容器 docker stop <容器ID>

#提交当前容器到镜像:docker commit <容器ID> <NAME/VERSION>  新镜像名

#启动新容器,并且进行端口映射:

docker run -itd -p 50001:22 <刚才提交的镜像ID> /bin/bash

查看容器日志:

docker logs Name/ID

# 显示一个运行的容器里面的进程信息:docker top Name/ID

# 从容器里面拷贝文件/目录到本地一个路径:

docker cp Name:/container_path to_path

docker cp ID:/container_path to_path

-------------

保存和加载镜像(save、load)

当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。

#保存镜像到一个tar包; -o, --output="" Write to an file

方法一:docker save image_name -o file_path

方法二:docker save image_name > file_path

# 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file

方法一:docker load -i file_path

方法二:docker load  < file_path

# 机器a导出镜像: docker save image_name > /home/save.tar

# 使用scp将save.tar拷到机器b上。

#机器b导入镜像: $docker load < /home/save.tar

-------------

Docker创建MySQL容器的image镜像:

目标:本文目的是创建一个MySQL的image,并且在新创建出来的容器里自动启动mysql服务接受外部连接

参考步骤(已验证OK):

必须的准备:保证创建Docker镜像的机器能够正常上网。因为创建新镜像时会自动从网络上下载文件。

第1步. 首先创建一个目录/ak,并在/ak目录下创建一个Dockerfile,文件内容如下

#以centos:centos6镜像作为基础镜像来创建新的镜像。

FROM centos:centos6

#作者信息

MAINTAINER Flyer "2559721591@qq.com"

#安装软件

RUN yum install -y mysql-server mysql

##以下RUN是一条完整的命令,其中&&是逻辑与,\命令换行符。

RUN /etc/init.d/mysqld start &&\

mysql -e "grant all privileges on *.* to 'admin'@'%' identified by 'admin';"&&\

mysql -e "grant all privileges on *.* to 'admin'@'localhost' identified by 'admin';"&&\

mysql -e "grant all privileges on *.* to 'admin'@'127.0.0.1' identified by 'admin';"&&\

mysql -e "grant replication slave on *.* to 'rep'@'%' identified by 'rep';"&&\

mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'admin';"&&\

mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'admin';"&&\

mysql -u root -padmin -e "show databases;"

##内部端口号

EXPOSE 3306

##容器启动时要执行的命令

CMD ["/usr/bin/mysqld_safe"]

第2步. 在Dockerfile所在目录下运行build命令来生成image文件,这里使用mysql_server作为image文件名

docker build -t mysql_server  ./

说明:可能第1次会失败,因为要同步网络数据,请再执行一遍上面的命令。

运行完build命令后,可以使用“Docker images”来查看。

第3步. 启动容器

3.1 首先使用下面的命令来启动容器

docker run --name=mysqlserver -dit -P  mysql_server

说明:启动容器,名称为mysqlserver,以后台方式运行,映射随机端口,容器的镜像为mysql_server。

交互的方式进入已经运行的容器中:docker exec -it  mysqlserver  bash

启动完容器后,可以使用“docker ps”来查看,此时可以看PORTS列内容为“0.0.0.0:49153->3306/tcp”,容器的3306端口会被映射到宿主机器的49153端口,这样我们就可以通过宿主机器的49153端口来连接了,比如:

mysql -h <宿主机器> -u root -padmin -P 49153

3.2 另外在运行容器的时候也可以通过下面的命令

docker run --name=mysqlserver -d -p 3306:3306 mysql_server

此时容器的3306端口会被映射到宿主机器的3306端口,这样我们就可以通过宿主机器的3306端口访问mysql了

mysql -h <宿主机器> -u root -padmin

3.3 还有一种情况就是为了安全考虑,我只希望当前的宿主机器可以访问mysql服务,此时我们可以

docker run --name=mysqlserver -d -p 127.0.0.1:3306:3306 mysql_server

4.1 导出mysql_server镜像。

方法一:docker  save  mysql_server  >  mysql_server.tar

方法二:docker  save  mysql_server  -o  mysql_server.tar

4.2 导入mysql_server.tar镜像。

方法一:docker  load  < mysql_server.tar

方法二:docker  load  -i mysql_server.tar

-------------

实例:在centos:7这个docker镜像中安装mysql-server和mysql,并将mysqld服务设置成启动docker容器时自动启动,将修改后的镜像生成一个新镜像mysqld。

第1步:下载centos:7这个docker镜像。

docker  pull  centos:7

docker  images

第2步:用centos:7镜像开启一个docker容器,安装mysql-server、mysql软件

docker  run  --name  mysqld_1   -it  centos:7   sh

yum  install  -y  mysql-server   mysql

service  mysqld  restart

chkconfig  mysqld  on

第3步:创建随docker容器同步启动的mysqld的启动脚本。

vi  /home/mysqld_auto.sh

#!/bin/sh

/etc/init.d/mysqld  restart

/bin/bash

:wq保存并退出vi

添加x执行权限:chmod  -v  +x  /home/mysqld_auto.sh

第4步:退出docker容器,将修改保存成一个新镜像。

ctrl+p+q

docker  ps  -a

docker  stop  mysqld_1

docker  commit  mysqld_1  mysqld

docker  images

第5步:运行测试新镜像:

docker  run  --name  m1  -it  mysqld  /home/mysqld_auto.sh

service  mysqld  status

mysql  -e  "show  databases;"

ctrl+p+q

docker  ps  -a

-------------

搭建私有仓库

系统环境: CentOS 7.2

192.168.0.179:Docker仓库

192.168.0.60:客户端

安装并启动docker

yum -y install docker

service docker  start

chkconfig  docker  on

搭建私有仓库

179上下载registry镜像

docker pull registry

防火墙添加运行5000端口

iptables -I INPUT 1 -p tcp --dport 5000 -j ACCEPT

下载完之后我们通过该镜像启动一个容器

复制代码 代码如下:

docker run -d -p 5000:5000 --privileged=true -v /opt/registry:/tmp/registry registry

参数说明:

1.-v /opt/registry:/tmp/registry :默认情况下,会将仓库存放于容器内的/tmp/registry目录下,指定本地目录挂载到容器

2.–privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误(OSError:[Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary')或者(Received unexpected HTTP status: 500 Internal Server Error)错误

客户端上传镜像

修改/etc/sysconfig/docker(Ubuntu下配置文件地址为:/etc/init/docker.conf),增加启动选项(已有参数的在后面追加),之后重启docker,不添加报错,https证书问题。

OPTIONS='--insecure-registry 192.168.0.179:5000' #CentOS 7系统 other_args='--insecure-registry 192.168.0.179:5000' #CentOS 6系统

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,而此处搭建的私有仓库只提供http服务在docker公共仓库下载一个镜像

docker pull docker.io/centos

来修改一下该镜像的tag

docker tag centos 192.168.0.179:5000/centos

把打了tag的镜像上传到私有仓库

docker push 192.168.0.179:5000/centos

客户端添加私有仓库地址

# 添加这一行 ADD_REGISTRY='--add-registry 192.168.0.179:5000'

加上后,search镜像,私有仓库和docker hub上都会显示;

不加搜索私有仓库,需要命令中指定私有仓库ip

使用仓库中的镜像

查询私有仓库中的所有镜像,使用docker search命令:

curl -u myuser https://registry_ip:5000/v1/searchcurl registry_ip:5000/v1/search

docker search registry_ip:5000/  #centos 7 docker search registry_ip:5000/library #centos 6

查询仓库中指定账户下的镜像,则使用如下命令:

docker search registry_ip:5000/account/

-------------

###Centos7 下建立 Docker 桥接网络

centos7宿主机上建立Docker桥接物理网络过程

宿主机网卡信息:

name:eth0

IP:192.168.100.99

GATEWAY:192.168.100.2

DNS:192.168.100.2

1. 停止Docker服务

~#:service docker stop

2.删除docker0网卡

~#:ip link set dev docker0 down

~#:brctl delbr docker0

3.新建桥接物理网络虚拟网卡br0

~#:brctl addbr br0

~#:ip link set dev br0 up

~#:ip addr add 192.168.100.100/24 dev br0 #为br0分配物理网络中的ip地址

~#:ip addr del 192.168.100.99/24 dev eth0 #将宿主机网卡的IP清空

~#:brctl addif br0 eth0 #将宿主机网卡挂到br0上

~#:ip route del default #删除原路由

~#:ip route add default via 192.168.100.2 dev br0 #为br0设置路由

4.设置docker服务启动参数

这里要注意的是,不同的Linux操作系统docker的配置文件所在不同

centos 在/etc/sysconfig/docker

其他操作系统请前往下面的网址

https://docs.docker.com/installation/#installation

~#:vim /etc/sysconfig/docker #在OPTIONS='--selinux-enabled'这行中修改为OPTIONS='--selinux-enabled -b=br0'即让docker服务启动时使用br0网卡进行桥接

5.启动docker服务

~#:service docker start

6.安装pipework

~#:git clone https://github.com/jpetazzo/pipework

~#:cp ~/pipework/pipework /usr/local/bin/

7.启动一个手动设置网络的容器

这里最好不要让docker自动获取ip,下次启动会有变化而且自动获取的ip可能会和物理网段中的ip冲突

~#:docker run -itd --net=none --name=test centos7 /bin/bash

9.为test容器设置一个与桥接物理网络同地址段的ip@网关

~#:pipework br0 test 192.168.100.11/24@192.168.100.2

10.进入容器查看ip

~#:docker attach test

-------------

Docker创建httpd容器的image镜像:

目标:本文目的是创建一个MySQL的image,并且在新创建出来的容器里自动启动mysql服务接受外部连接

参考步骤(未验证):

1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下

##第1步:在当前目录创建Dockerfile文件,内容如下:

##以#号开头的为注释内容,只是测试代码(可以不写)。

#FROM是指定新镜像是以centos:centos6这个镜像作为基础镜像来创建的。

FROM centos:centos6

#镜像的创建者信息。

MAINTAINER Flyer <2559721591@qq.com>

#RUN代码用于指定要执行的命令。通常用于安装软件。

#RUN yum -y update; yum clean all

#RUN yum -y install httpd && yum clean all

RUN yum -y install httpd

RUN touch  /var/www/html/index.html

RUN echo "apachetest web site!!!! --Flyer " > /var/www/html/index.html

#container容器内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:

EXPOSE 80

#例如:运行容器时映射端口:docker run -d -p 127.0.0.1:33301:22 centos6-ssh

#Simple startup script to avoid some issues observed with container restart

#注意脚本目录,将脚本添加到docker容器的/根目录中。

ADD run-httpd.sh  /run-httpd.sh

#赋予脚本执行权限

RUN chmod -v +x  /run-httpd.sh

#Container容器启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD。

CMD ["/run-httpd.sh"]

##第2步####

在Dockerfile文件所在的目录创建run-httpd.sh脚本,内容如下:

cat > run-httpd.sh <<EOK

#!/bin/bash

#Make sure we are not confused by old, incompletely-shutdown httpd

#context after restarting the container.  httpd won't start correctly

#if it thinks it is already running.

rm -rf /run/httpd/*

exec /usr/sbin/apachectl -D FOREGROUND

EOK

注意:Dockerfile需借助脚本来重启httpd服务,并且最好放置于同一目录

##第3步:在Dockerfile文件的目录生成镜像文件fly/httpd:centos6。

docker  build  -t   fly/httpd:centos6  ./

docker  images  //查看所有的镜像

此时通过Dockerfile创建的镜像已经创建成功,并无报错。

#第4步:运行容器

方法一:启动容器并映射到随机端口,容器名称为httpdk:

以后台方式运行:docker run --name=httpdk -d -P  fly/httpd:centos6

查看docker容器进程:docker  ps  -a

进入已运行的容器:docker  exec  -it  httpdk  /bin/bash

退出交互模式:ctrl+p+q   [退出后容器仍然运行中]

以交互式方式运行:

docker run  --name=httpda -it -p 801:80 fly/httpd:centos6   /bin/bash

方法二:启动并指定映射端口:

说明:将容器的80端口映射到物理机801端口

docker run --name=web802 -d -p 802:80 fly/httpd:centos6

curl  http://localhost:802    显示结果如下

apachetest web site!!!! --Flyer  //curl测试成功

4.1 导出mysql_server镜像。

方法一:docker  save  fly/httpd:centos6  >  httpd_centos6.tar

方法二:docker  save  fly/httpd:centos6  -o  httpd_centos6.tar

4.2 导入mysql_server.tar镜像。

方法一:docker  load  <  httpd_centos6.tar

方法二:docker  load  -i  httpd_centos6.tar

-------------

Docker Dockerfile详解

原贴:http://blog.csdn.net/wsscy2004/article/details/25878223

要点一:如何使用Dockerfile

Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。

例:当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk1.7:

docker  build -t edwardsbean/centos6-jdk1.7  /.

要点一:Dockerfile关键字

问题1:如何编写一个Dockerfile,格式如下:

# CommentINSTRUCTION arguments

FROM 基于哪个镜像

RUN  安装软件用

MAINTAINER  镜像创建者

CMD  命令

说明:Container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.

CMD主要用于container时启动指定的服务,当Docker run command的命令匹配到CMD command时,会替换CMD执行的命令。如:

Dockerfile:

CMD echo hello world

运行一下试试:

docker run centos-cmd  运行的结果如下:

hello world

一旦命令匹配:

docker run centos-cmd echo hello edwardsbean    运行的结果如下:

hello edwardsbean

ENTRYPOINT

说明:container容器启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条

ENTRYPOINT没有CMD的可替换特性

USER

使用哪个用户跑container

如:

ENTRYPOINT ["memcached"]

USER daemon

EXPOSE  端口号

说明:container容器内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:

docker run -d -p 127.0.0.1:33301:22 centos6-ssh

解释:container ssh服务的22端口被映射到主机的33301端口

ENV  环境变量

功能:用来设置环境变量,比如:

ENV LANG en_US.UTF-8

ENV LC_ALL en_US.UTF-8

ADD  源文件   /目标文件

功能:将文件<src>拷贝到container的文件系统对应的路径<dest>

说明:1、所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0

2、如果文件是可识别的压缩格式,则docker会帮忙解压缩

3、如果要ADD本地文件,则本地文件必须在 docker build <PATH>,指定的<PATH>目录下

4、如果要ADD远程文件,则远程文件必须在 docker build <PATH>,指定的<PATH>目录下。比如:

例如:

docker build github.com/creack/docker-firefox

说明:docker-firefox目录下必须有Dockerfile和要ADD的文件

注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD url file.

ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。

VOLUME

可以将本地文件夹或者其他container的文件夹挂载到container中。

WORKDIR

说明:切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效

ONBUILD

说明:ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

详见here

本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1952211,如需转载请自行联系原作者

docker容器安装和配置实战相关推荐

  1. 【Docker容器安装、配置、部署】

    一.什么是Docker? Dockers就是一个虚拟机,他是一个开源的容器平台,他和VM有相似的地方.也有不同的地方 Docker名词解释: 仓库(Docker仓库,Dockerhub):存放镜像的地 ...

  2. docker容器从入门到实战0826

    ##docker容器安装和配置### #docker的git-hub网站(账号rshare,密rshare520):https://github.com/login #docker官网hub仓库(账号 ...

  3. Docker容器安装配置

    Docker容器安装配置 一.检查服务器环境 1.系统内核 2.系统版本 二.Docker安装 1.Docker官方网址 2.卸载旧的版本docker 3.需要的安装包 4.设置镜像的仓库 5.查看d ...

  4. mysql8.0 利用docker容器安装配置多主多从集群

    mysql8.0 利用docker容器安装配置多主多从集群 原文:https://www.cnblogs.com/lkl6/p/14191419.html

  5. Linux下的docker容器安装教程

    Linux下的docker容器安装教程 一.初始环境配置 1.yum仓库配置 2.检查yum仓库 3.关闭防火墙和selinux 二.开启内核的流量转发 三.安装docker 1.配置docker相关 ...

  6. Docker容器技术与应用(项目2 Docker容器安装和使用)

    项目2 Docker容器安装和使用 下面重点介绍Docker的安装,镜像Image.镜像仓库Registry和容器Container的使用和管理. 图2.1 Docker镜像.容器和仓库之间的主要操作 ...

  7. 以Docker方式安装和配置Kong网关和Konga控制台

    文章目录 以Docker方式安装和配置Kong网关和Konga控制台 前言 安装Kong 创建容器网络 启动PostgreSQL数据库 初始化数据 对Kong Admin API作安全防护 启动Kon ...

  8. docker容器网络及其配置

    docker容器网络及其配置 文章目录 docker容器网络及其配置 虚拟化网络 单主机与多主机的Docker网络 单节点容器间通信 不同节点容器间通信 Docker网络驱动 选择Docker网络驱动 ...

  9. 第12章 CentOS7 中 Docker 的安装与配置

    第08章 CentOS7 中 Docker 的安装与配置 Docker 是什么? Docker 是世界领先的软件容器平台.[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img- ...

  10. Nginx策略搭配Tomcat集群实操手册(二进制安装和Docker容器安装)

    临头一砖--代理服务器Nginx Nginx策略搭配Tomcat集群实操手册(二进制安装和Docker容器安装) Keepalived搭配Nginx的高可用策略验证和实操 Keepalived搭配Ng ...

最新文章

  1. 怎么用canvas画秒针_用canvas画一个钟表
  2. “华为云杯”2020深圳开放数据应用创新大赛线上推介会成功举办,让深圳大数据在全球“跑”起来...
  3. 自动化部署shell01
  4. 针对新手的Java EE7和Maven项目–第8部分
  5. android 开发书签大全,一站式的导航分享!
  6. Spring学习笔记:尝试Lombok简化实体类代码
  7. 转数组_Java中IO必杀技-文件转字节数组
  8. redis 支持 json_Spring Boot 中集成 Redis
  9. MonoDevelop 0.14 on Ubuntu
  10. ffmpeg 推流FLV文件,采用rtmp协议
  11. 当客户端浏览器不支持相应版本的apple时自动下载运行环境JVM的解决办法!
  12. 【JSP】错误页面处理
  13. 简单实用的web打印方案-网页精准打印
  14. 热门小说排行榜(JSP实现)
  15. 计算机的剪切快捷键是什么意思,剪切的快捷键是什么【快捷键大全】
  16. 【数电笔记】加法器、减法器
  17. androidx86编译踩坑
  18. 大学英语综合教程一 Unit 8 课文内容英译中 中英翻译
  19. 微信小程序-预研总结(PPT分享)
  20. 软件生命周期-SDLC-的六个阶段简单介绍

热门文章

  1. (转)悟透javascript
  2. 【Prison Break】第一天(3.27)
  3. 智能优化算法:静电放电算法-附代码
  4. 智能优化算法:鸽群优化算法-附代码
  5. 洛谷——P1219 [USACO1.5]八皇后 Checker Challenge
  6. ENVI-IDL基础学习(1)
  7. ENVI软件中决策树分类和监督分类算法比较
  8. retrievefile文件字节为0_linux环境下下 FTPClient.retrieveFile() 下载稍大一点的文件就卡死了-问答-阿里云开发者社区-阿里云...
  9. 灵修---士师记第9章
  10. Android studio 4.0 Layout Inspector查看当前Activity