文章目录

  • 一、 docker概述
    • 1.1 Docker中基本概念(三大核心)
      • 镜像(Image)
      • 容器(Container)
      • 仓库(Repository)
    • 1.2 Docker 与虚拟机
      • 相同点
      • docker的优点
      • docker和虚拟机的不足
    • 1.3 Docker引擎(Docker Engine)
    • 1.4 docker的分层存储
  • 二、 安装docker及docker的基本命令
    • 2.1 安装docker
    • 2.2 docker 常用命令
      • 2.2.1 关于镜像的操作
      • 2.2.2 关于容器的操作

一、 docker概述

Docker 是一个开源的应用容器引擎:让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。是一个轻量级的“虚拟机”,容器是完全使用沙箱机制,相互之间不会有任何接口。

1.1 Docker中基本概念(三大核心)

镜像(Image)

镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器(Container)

容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

仓库(Repository)

仓库,从认识上来说,就好像软件包上传下载站,有各种软件的不同版本被上传供用户下载。镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

1.2 Docker 与虚拟机

相同点

  • 可在不同的主机之间迁移;
  • 都具备 root 权限;
  • 都可以远程控制;
  • 都有备份、回滚操作。

docker的优点

  • 更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
  • 更快速的启动时间:传统的虚拟机技术启动应用服务往往需要数分钟,而Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 一致的运行环境:开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug 并未在开发过程中被发现。而Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现「这段代码在我机器上没问题啊」这类问题。
  • 持续交付和部署:Docker是build once,run everywhere. 使用Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile 来进行镜像构建,并结合持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
  • 更轻松的迁移:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。使用Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

docker和虚拟机的不足

  • docker:对内核没有控制权限,只有容器的提供者具备升级权限。只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统。
  • 虚拟机:每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。一台物理机上能够运行的虚拟机非常有限。

1.3 Docker引擎(Docker Engine)

docker之所以可以跨系统,就是因为有 Docker引擎(Docker Engine)的存在,只要你能在你的服务上装上 Docker引擎(Docker Engine),你就可以使用Docker镜像进行部署。

Docker Engine是具有以下主要组件的客户端-服务器应用程序:

  • 服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
  • REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
  • 命令行界面(CLI)客户端(docker命令)。

1.4 docker的分层存储

因为镜像包含操作系统完整的root 文件系统,其体积往往是庞大的,因此在Docker设计时,就充分利用Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

二、 安装docker及docker的基本命令

2.1 安装docker

1.   安装依赖包
yum install yum-utils device-mapper-persistent-data lvm2 -y
#yum-utils提供了yum-config-manager
#device mapper存储驱动程序需要device-mapper-persistent-data和Ivm2
#Device Mapper是 Linux2.6内核中支持逻辑卷管理的通用设备映射机制,
它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。2. 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3. 安装Docker-CE
yum install docker-ce -y4. 开启docker服务,设为开机自启动
systemctl start docker.service
systemctl enable docker.service5. 配置镜像加速
登录阿里云官网(一定要登录),在官网首页搜索”镜像加速“
搜索的第一个,点进去
网页的下面有一个容器镜像服务,点进去
进去以后点击管理控制台
找到镜像加速器,选择centos
复制以下的内容到自己的终端直接运行,就可以了ee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xda9renm.mirror.aliyuncs.com"]
}
EOF注意:每个人都有自己的专属加速,用别人的就是会很慢,所以不要嫌麻烦

2.2 docker 常用命令

2.2.1 关于镜像的操作

docker version            查看版本信息

docker search nginx       搜索nginx镜像(共有仓库)


下载nginx镜像

[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
d121f8d1c412: Pull complete
ebd81fc8c071: Pull complete
655316c160af: Pull complete
d15953c0e0f8: Pull complete
2ee525c5c3cc: Pull complete
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest查看下载的镜像列表
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB

下载的镜像存放位置

[root@localhost ~]# cd /var/lib/docker/image/overlay2/
[root@localhost overlay2]# ls
distribution  imagedb  layerdb  repositories.json
[root@localhost overlay2]# vim repositories.json      ##存放着镜像文件
{"Repositories":{"nginx":{"nginx:latest":"sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d","nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0":"sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d"}}}

查看下载镜像的详细信息,两种方式

docker inspect  nginx:latest       后面跟镜像名称
docker inspect  7e4d58f0e5f3       后面跟镜像ID

添加镜像的标签,相当于创建了一个别名

[root@localhost overlay2]# docker tag nginx:latest nginx:web
[root@localhost overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
nginx               web                 7e4d58f0e5f3        9 days ago          133MB

删除镜像,如果镜像添加了新的标签,则无法删除,只有镜像只存在一个标签时才可以删除镜像,不管这个标签是新添加的,还是原来的

[root@localhost overlay2]# docker rmi nginx:web
Untagged: nginx:web
[root@localhost overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
[root@localhost overlay2]# docker tag nginx:latest nginx:web
[root@localhost overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
nginx               web                 7e4d58f0e5f3        9 days ago          133MB
[root@localhost overlay2]# docker rmi 7e4d58f0e5f3
Error response from daemon: conflict: unable to delete 7e4d58f0e5f3 (must be forced) - image is referenced in multiple repositories重新为nginx添加标签
[root@localhost overlay2]# docker tag nginx:latest nginx:web
[root@localhost overlay2]# docker rmi nginx:web
Untagged: nginx:web
[root@localhost overlay2]# docker rmi 7e4d58f0e5f3
Untagged: nginx:latest
Untagged: nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Deleted: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
Deleted: sha256:eedfd37abc0b05520a719addf6675b372687fe9a2ed1746fa988335720d4376c
Deleted: sha256:4f052ddd517f6dc5b74d2f7d881838b8ec6a5e67ec7a1da8bbbe91e1e068ad3a
Deleted: sha256:5f78154d356577280e4ac0d9bf0d021d488828e57f953b011dcbadaecd539ce4
Deleted: sha256:db5783668220e16186080f3e9d69ad748aab8c72abb8e457f6fc45369461634b
Deleted: sha256:07cab433985205f29909739f511777a810f4a9aff486355b71308bb654cdc868
[root@localhost overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

重新下载nginx镜像进行导出到指定目录

[root@localhost overlay2]# docker pull nginx    ##下载nginx镜像
[root@localhost overlay2]# docker save -o /opt/nginx nginx:latest    ##将nginx:latest导出到/opt目录下,命名为nginx
[root@localhost overlay2]# ll -h /opt
总用量 131M
drwx--x--x. 4 root root   28 9月  18 15:40 containerd
-rw-------. 1 root root 131M 9月  19 21:37 nginx
drwxr-xr-x. 2 root root    6 10月 31 2018 rh

镜像的重新载入,如果不小心做了误删镜像的操作,可以通过到处的文件进行重新载入

[root@localhost opt]# docker rmi nginx:latest
Untagged: nginx:latest
Untagged: nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Deleted: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
Deleted: sha256:eedfd37abc0b05520a719addf6675b372687fe9a2ed1746fa988335720d4376c
Deleted: sha256:4f052ddd517f6dc5b74d2f7d881838b8ec6a5e67ec7a1da8bbbe91e1e068ad3a
Deleted: sha256:5f78154d356577280e4ac0d9bf0d021d488828e57f953b011dcbadaecd539ce4
Deleted: sha256:db5783668220e16186080f3e9d69ad748aab8c72abb8e457f6fc45369461634b
Deleted: sha256:07cab433985205f29909739f511777a810f4a9aff486355b71308bb654cdc868
[root@localhost opt]# docker load < /opt/nginx      ##重新载入镜像
07cab4339852: Loading layer  72.49MB/72.49MB
f431d0917d41: Loading layer  64.31MB/64.31MB
60c688e8765e: Loading layer  3.072kB/3.072kB
eabfa4cd2d12: Loading layer  4.096kB/4.096kB
908cf8238301: Loading layer  3.584kB/3.584kB
Loaded image: nginx:latest
[root@localhost opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB

2.2.2 关于容器的操作

查看容器

docker ps -a
-a 列出所有的容器,包括未运行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
容器的ID             来源于哪一个镜像        执行的指令                 创建时间             容器状态                 端口            名字

容器的创建

[root@localhost opt]# docker create -it nginx:latest /bin/bash    ##创建容器,并同时创建一个子bash环境
-i 让容器的便准输入保持打开
-t 让Docker分配一个伪终端
6e198a8c25d9d38f130a1e569857986d7a84ae0d177540e4017a6b1e9451fe0c
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   About a minute ago   Created                                 quirky_greider


开启容器

[root@localhost opt]# docker start 6e198a8c25d9     ##开启容器
6e198a8c25d9[root@localhost opt]# docker ps -a    ##这时候容器的状态变成了up,端口为80/tcp,这里的端口是对容器内部的端口,同样的容器对外也会有一个端口,连个端口做映射才可以实现对外的通信
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   4 minutes ago       Up 14 seconds       80/tcp              quirky_greider

这时候我们查看网卡配置信息,多了一个B类的私有地址作为docker的网关,一旦docker这个网关挂了,服务的状态会仍然保持原有状态,排错时候需要注意。

[root@localhost ~]# docker pull centos:7     ##下载centos7的镜像
7: Pulling from library/centos
75f829a71a1c: Pull complete
Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
[root@localhost ~]# docker create -it centos:7 /bin/bash      ##为centos7镜像创建容器
9dd5e445e513a6c64372b9e33a81f40f0494fdf87478739e25ca308fc8dec330[root@localhost ~]# docker ps -a      ##查看容器列表
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
9dd5e445e513        centos:7            "/bin/bash"              50 seconds ago      Created                                 funny_grothendieck
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   10 hours ago        Up 10 hours         80/tcp              quirky_greider
[root@localhost ~]# docker start 9dd5e445e513       ##开启容器
9dd5e445e513
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
9dd5e445e513        centos:7            "/bin/bash"              About a minute ago   Up 7 seconds                            funny_grothendieck
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   10 hours ago         Up 10 hours         80/tcp              quirky_greider停止容器
[root@localhost ~]# docker stop 9dd5e445e513     ##停止容器服务
9dd5e445e513
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
9dd5e445e513        centos:7            "/bin/bash"              4 minutes ago       Exited (137) 12 seconds ago                       funny_grothendieck
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   10 hours ago        Up 10 hours                   80/tcp              quirky_greider删除容器
[root@localhost ~]# docker rm 9dd5e445e513     ##删除容器,删除镜像为rmi
9dd5e445e513
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   10 hours ago        Up 10 hours         80/tcp              quirky_greider

启动执行命令查看系统/opt目录,这种方式使用容器,会在使用完成后自动停止,并释放资源

[root@localhost ~]# docker run centos:7 /bin/bash -c ls /      ##启动centos:7容器,并加载一个子bash环境,使用命令ls查看根目录,执行完就关闭,状态是 Exited
Unable to find image 'centos:7' locally
7: Pulling from library/centos
75f829a71a1c: Pull complete
Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:7
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
43957539a471        centos:7            "/bin/bash -c ls /"      25 minutes ago      Exited (0) 25 minutes ago                       trusting_sanderson
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   11 hours ago        Up 11 hours                 80/tcp              quirky_greider

持续在后台执行

[root@localhost ~]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"      ##状态为up
587a0678365e6e687c3a3f47d4bec64d3e2c829e3a6996b508464830b6862892
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
587a0678365e        centos:7            "/bin/bash -c 'while…"   13 seconds ago      Up 13 seconds                                   wizardly_sutherland
43957539a471        centos:7            "/bin/bash -c ls /"      35 minutes ago      Exited (0) 35 minutes ago                       trusting_sanderson
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   11 hours ago        Up 11 hours                 80/tcp              quirky_greider

进入容器,进入容器之前必须保持容器是up状态

[root@localhost ~]# docker create -it centos:7 /bin/bash
eec9262be812c3e70d99cc12e1245cd3298ff2c30a14ccb3fea5ebfcefb81126
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
eec9262be812        centos:7            "/bin/bash"              13 seconds ago      Created                                            nostalgic_goldberg
587a0678365e        centos:7            "/bin/bash -c 'while…"   30 minutes ago      Up 30 minutes                                      wizardly_sutherland
43957539a471        centos:7            "/bin/bash -c ls /"      About an hour ago   Exited (0) About an hour ago                       trusting_sanderson
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   12 hours ago        Up 11 hours                    80/tcp              quirky_greider
[root@localhost ~]# docker start ee
ee
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
eec9262be812        centos:7            "/bin/bash"              35 seconds ago      Up 7 seconds                                       nostalgic_goldberg
587a0678365e        centos:7            "/bin/bash -c 'while…"   31 minutes ago      Up 31 minutes                                      wizardly_sutherland
43957539a471        centos:7            "/bin/bash -c ls /"      About an hour ago   Exited (0) About an hour ago                       trusting_sanderson
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   12 hours ago        Up 11 hours                    80/tcp              quirky_greider
[root@localhost ~]# docker exec -it eec9262be812 /bin/bash    ##进容器
[root@eec9262be812 /]#
[root@eec9262be812 ~]# exit     ##退出容器
exit

进入容器后我们可以使用部分命令,也有一部分命令不能使用,因为容器毕竟不是虚拟机,而且现在没有建立内外端口映射。以后再进行演示。

容器的导出

[root@localhost ~]# docker export 6e198a8c25d9 > /opt/nginx_container
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
containerd  nginx  nginx_container  rh

容器只要存在就不能删除容器的镜像,只有先将容器删除,才可以删除镜像。

容器的批量清理,不加bash就删除不了,运行中的容器不能删除

[root@localhost opt]# docker ps -a | awk '{print "docker rm "$1}'
docker rm CONTAINER
docker rm 4bedfe57a907
docker rm 691f58d21035
docker rm 6e198a8c25d9
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
4bedfe57a907        centos:7            "/bin/bash -c ls /opt"   22 seconds ago      Exited (0) 22 seconds ago                       bold_euler
691f58d21035        centos:7            "/bin/bash -c ls /"      27 seconds ago      Exited (0) 27 seconds ago                       sweet_goldstine
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   12 hours ago        Up 12 hours                 80/tcp              quirky_greider
[root@localhost opt]# docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
4bedfe57a907
691f58d21035
Error response from daemon: You cannot remove a running container 6e198a8c25d9d38f130a1e569857986d7a84ae0d177540e4017a6b1e9451fe0c. Stop the container before attempting removal or force remove
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6e198a8c25d9        nginx:latest        "/docker-entrypoint.…"   12 hours ago        Up 12 hours         80/tcp              quirky_greider

程序员都在学的docker--docker基本命令(docke概述、安装docker、docker基本使用)相关推荐

  1. 高级 Java 程序员都在学什么?

    我曾在某乎的一条回答下看到这样一条评论: 确实,Netty 大家肯定都会,不会的绝对是初级或者XX 上面的说有失偏颇,学习技术没必要上升到人身攻击,更重要的是如何学会技术,面好的大厂,拿到高的薪资. ...

  2. 为什么每个程序员都要学C语言的五个理由

    1,C语言不是面向对象语言.因为这一点,任何学习C语言的人必须学会用函数思考问题.当你真正的去学习一门面向对象语言时,就会有C语言的函数学习基础去对比.这会使学习面向对象编程更容易理解和更有乐趣. 2 ...

  3. 畅销10万册,程序员都在学的Spring,第5版上线了

    来源 | 异步 从2003年发布至今,Spring 已成为目前最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建代码. 在整个Spring生态 ...

  4. 程序员为什么要学算法?

    "程序员必须会算法 ?" 程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点. 很多人觉得像人工智能.数据搜索与挖掘这样高薪的工作才用得上算 ...

  5. 【PyTorch】 99%程序员都不知道, 深度学习还能这样玩 (建议收藏)

    [PyTorch] 99%程序员都不知道, 深度学习还能这样玩 概述 迁移学习 入住 GitHub 项目详解 get_data.py (获取数据) get_model (获取模型) 参数详解 使用说明 ...

  6. 学计算机数据结构重要吗,程序员都说数据结构重要,那么究竟什么是数据结构?...

    原标题:程序员都说数据结构重要,那么究竟什么是数据结构? 大学阶段,如果问大家计算机专业课中哪门课是最重要的?想必有一多半的人都会回答数据结构.既然大家都说数据结构重要,那么究竟什么是数据结构呢?今天 ...

  7. 学计算机的男生是不是都不擅长交际,为什么大多数程序员都是男的?

    原标题:为什么大多数程序员都是男的? 有个现象你肯定也留意过,那就是,程序员.科学家这些职业一般都是男人的天下,很少有女性,这是为什么呢?有本书叫<是高跟鞋还是高尔夫修改了我的大脑>,作者 ...

  8. 菜鸟程序员都是怎样写代码的?你也可以学一手

    每个程序员都要经历"菜鸡"这个阶段,那么,在菜鸡阶段,程序员是怎么写代码的呢?下面12大瞬间,能否找到你当初的影子? 1.命名不规范 可能不少程序员都会有这样的经历,写代码时灵光乍 ...

  9. Java后端程序员都做些什么?

    这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...

最新文章

  1. linux下用c 开发web,用C一步步开发web服务器(2)
  2. webgl编程指南源码_ThreeJS 源码剖析之 Renderer(一)
  3. 省选+NOI 第十部分 概率统计与多项式
  4. 19. yum 常用命令《Mr.Robot》
  5. python 去掉字符串第一个字符_10 个 Python 字符串处理技巧
  6. ENVI去除NDVI/EVI异常值、NAN(not a number,无效值)、无穷大(inf)
  7. 区块链 Fisco bcos 智能合约(17)-区块链的速度困境:“贵”在信任,“慢”得其所
  8. VS如何定制自己的模板信息
  9. 第3章 Stata描述统计
  10. ps色轮插件Coolorus v2.5.14(专业的Photoshop配色插件,支持PS CC 2019)
  11. 如何给下属布置工作?多人团队便签来帮你有效布置任务
  12. 新浪微博接口在safri下的bug
  13. 什么是视觉特效师,我如何才能成为一名艺术家?
  14. dockerkubernetes教程,隔壁都馋哭了
  15. Vxe Table一些简单的应用和踩坑记录
  16. nodejs项目mysql使用sequelize支持存储emoji
  17. uCLinux系统分析
  18. w7运行里的计算机怎么设置,W7系统怎么设置开机启动项
  19. 基于JAVA+SpringMVC+Mybatis+MYSQL的书笺小筑二手书交易系统
  20. 水题挑战3:NOIP 2017 宝藏

热门文章

  1. 实验二、设置1ms定时器
  2. MySQL - 根据生日计算年龄
  3. EMC-详解雷击浪涌的防护
  4. 专访科特勒咨询集团王赛:以“数智融合”做桥梁,让企业数字化转型”天堑“变通途...
  5. “小会话,大学问”:如何让聊天机器人读懂对话历史?
  6. Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]
  7. qt4.8.6 基于Phonon的播放器无法播放acc等音频文件解决方法
  8. 使用jdl的方式来生成JHipster项目
  9. 安卓移动办公软件_细数小移动办公软件那些痛,戴尔电脑限时5折助力在线办公!...
  10. 钉钉2020电脑版 v5.1.39.10官方版