资讯专栏INFORMATION COLUMN

Docker 入门(一):理解三大核心

李世赞 / 2762人阅读

摘要:镜像加速国内有非常多的镜像仓库,本文介绍使用阿里云的,后文我们也会介绍把自己的镜像上传到阿里云,并且该服务是免费的。访问这个地址如果没有阿里云账号的就自己注册一个。最好还是用国内的速度比较快,这里介绍阿里云的。

Docker 的前世今生

Docker 的核心理念是 Build, Ship, and Run Any App, Anywher,即一次封装,到处运行。

从前,我们在服务器配置一个应用的运行环境,要安装各种组件,就拿 JavaWeb 的环境来说吧,要安装 Tomcat、MySQL 等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。

Linux 容器技术 的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

Docker 的安装配置

这里我主要介绍一下 Docker 在 Ubuntu 和 Windows 中的安装。其他的操作系统可自行搜索安装教程。

由于 Docker 官网在国内的访问速度不好,所以这里推荐去 DaoCloud 下载镜像,速度非常快:

https://get.daocloud.io/#inst...

Windows

先进入到 Docker 的下载页面:

https://get.daocloud.io/#inst...

如果是 win10 系统就直接下载 Docker for Windows,如果是 win10 之前的系统就下载Docker Toolbox。下载完成之后默认一直点下一步就安装完成了。

注意:windows 运行 Docker 需要在 BIOS 中开启 Intel Virtual Technology,如果打不开 Docker 并提示有该类错误请自行根据自己电脑型号搜索相关教程。
Ubuntu

可以用 Ubuntu 自带的安装源安装 Docker,只需要执行以下两条命令即可:

$ sudo apt-get update
$ sudo apt-get install docker.io

不过用自带安装源安装的 Docker 并不是最新版,推荐用以下方式安装最新版:

$ curl -sSL https://get.daocloud.io/docker | sh

安装完成之后可以用 docker version 命令查看 docker 版本信息。

注意:正常情况下,应该显示出 Client 和 Server 的信息,如果没有 Server 的信息,则代表服务没有启动。此时需要用 service docker start 命令启动它。
Ubuntu 卸载 Docker

如果装错版本了可以卸载了重新装

$ sudo apt-get remove --purge docker.io
$ rm -rf /var/lib/docker
Docker 核心概念

Docker 有三大核心概念:

仓库(repository)

镜像(image)

容器(container)

Docker 利用仓库管理镜像的设计与 Git 非常相似。我们要配置的应用运行环境就是镜像,如 nginx 镜像,当我们本地没有该镜像的时候,就需要从远程仓库 pull 下来,当我们启动这个镜像时,就会有一份镜像被复制并运行在容器中。如果我们改动了容器里面的内容,也可以将其 commit 保存成新的镜像。

第一个 Docker 实例

这里以 Nginx 为例来演示在 docker 中启动一个应用的过程。

启动 Nginx 分为 三步:

pull nginx 镜像

运行 nginx 容器

映射 nginx 端口

pull 镜像

首先要 Docker 官方仓库 里搜索 nginx,找到带有 official 字样的,点进去把 pull 命令复制下来。

https://hub.docker.com

执行该条命令就把镜像 pull 到本地了。执行「docker images」即可查看本地镜像。

其实 docker pull nginx 这条命令是简写形式,完整命令应该是:

$ docker pull registry.hub.docker.com/library/nginx

完整的命令是在 nginx 前面加上了 注册服务器的地址,由于 docker pull 的默认地址是这个,所以该地址是可以不加的。

为什么要说这个呢,因为从官方仓库下载镜像实在是非常的慢,有时候还下载不了。如果我们更改了这个注册服务器的地址,把它换成国内的,就可以实现加速。

镜像加速

国内有非常多的镜像仓库,本文介绍使用阿里云的,后文我们也会介绍把自己的镜像上传到阿里云,并且该服务是免费的。

访问这个地址:

https://cr.console.aliyun.com...

如果没有阿里云账号的就自己注册一个。在上面这个地址的页面就可以看到自己的专属加速地址了,并且有不同系统的安装方法,根据给的教程安装即可。

运行 nginx 容器

pull 了镜像之后,执行以下命令就可以启动它了。

$ docker run -d nginx 

这条命令是后台启动 nginx ,不加 -d 就是前台启动。启动了之后我们暂时还是无法访问带它的,我们还需要将容器内的 nginx 端口映射到容器外面,才可以访问到。

映射 nginx 端口
$ docker run -d -p 8080:80 nginx

跟上条命令比起来只加了一个 -p 参数,后面跟上端口,这里我是把本机的 8080 端口映射到 容器内的 80 端口上,浏览器访问 localhost:8080 就可以看到 nginx 的欢迎页面了。

镜像和容器的基本操作 镜像操作

查看本地镜像

$ docker images

为镜像添加标签

$ docker tag old-tag new-tag

新的标签跟原标签镜像的 ID 是完全一样的,它们实际上都指向同一个镜像文件,只是别名不同而已。

删除镜像

$ docker rmi image-id/image-tag

注意:删除镜像需要先删除使用了此镜像的容器,虽然可以强制删除,但是并不推荐这么做。另外删除镜像,可以用 tag 或 ID 删除,如果 ID 是一样的就用 tag 删除
容器操作

查看正运行的容器

$ docker ps

停止正在运行的容器

$ docker stop container-id

容器的 ID 不需要全部输完,只要能区分两个容器就可以了。

查看所有容器

$ docker ps -a

删除容器

$ docker rm container-id

删除容器之前需要先停止它

将正在运行的容器保存为镜像

$ docker commit container-id image-tag

特别注意:如果更改了容器后不将它保存为新的镜像,在容器被删除后,所有的更改都不会被保存。下一文会介绍另 Docker 的数据存储可以解决这个问题。另外,此命令后面的 tag 可以不写只写名字,默认 latest。

进入容器内部

$ docker exec -it container bash

Docker 容器也有一个类 Linux 的文件系统,还可以用一些 linux 命令。要退出容器可输入exit

注意:有的镜像是没有带 bash 的,比如 docker pull daocloud.io/library/nginx:1.13.8-alpine-perl,这条命令就会报错,这时就可以用 sh 建立连接:

$ docker exec -it container /bin/sh

复制文件到容器内

$ docker cp file container-id:newfile

复制容器内的文件到容器外

$ docker cp container-id:file newfile

复制容器内的文件到容器外命令是在容器外执行的
导入导出镜像和容器 导入和导出镜像

导出镜像

$ docker save -o name.tar image-tag

导入镜像

$ docker load --input name.tar
导入和导出容器

导出容器

$ docker export -o name.tar container-id

导入容器(docker import name.tar image-tag)

容器导入其实是导成了镜像。
push 自己的镜像到远程仓库

先来了解一下 docker 是如何管理仓库和镜像的。

仓库是放在注册服务器上的,一个仓库只管理一个镜像,一个镜像可以有多个版本。

push 镜像到 Docker Hub

访问 Docker Hub(注册服务器):

https://hub.docker.com/

如果没有账号的话自己注册一个,然后点击 Create Repository ,在如下页面创建一个仓库。

例如我起的名字是:web-server,我的仓库名就是 stormxing/web-server

接着在本地用如下命令登录 Docker Hub

如果我们想把镜像上传到 Docker Hub,我们的镜像名字就得跟仓库名一致。要做到这一点,我们可以用为镜像创建一个新的标签。例如将 nginx 镜像重新创建一个标签 stormxing-webserver,如果版本不填写就默认是 latest。

最后,直接 push 就可以了,完成之后在仓库页面的 tags 选项中可以看到自己的镜像。

push 镜像到阿里云仓库

虽然 Docker Hub 可以 push 镜像,但是速度太慢了。最好还是用国内的速度比较快,这里介绍阿里云的。

首先登陆这个地址,创建一个仓库,然后设置下登录密码:

https://cr.console.aliyun.com

创建仓库选择本地仓库

最后阿里云的操作指南非常详细,跟上面的步骤基本一致,这里就不再赘述了。

总结

本篇文章主要介绍了Docker 的作用、Docker 三大核心(仓库、镜像、容器)的基本操作,还介绍了如何 push 自己的镜像到远程仓库。

下一篇文章 将介绍 Docker 的数据管理和用更高级的方式 Dockerfile 来创建镜像以及 docker-compose 的简单使用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27248.html

相关文章

  • 从小白程序员路晋升为大厂高级技术专家我看过哪些书籍?(建议收藏)

    摘要:大家好,我是冰河有句话叫做投资啥都不如投资自己的回报率高。马上就十一国庆假期了,给小伙伴们分享下,从小白程序员到大厂高级技术专家我看过哪些技术类书籍。 大家好,我是...

    sf_wangchong 评论0 收藏0
  • java篇

    摘要:多线程编程这篇文章分析了多线程的优缺点,如何创建多线程,分享了线程安全和线程通信线程池等等一些知识。 中间件技术入门教程 中间件技术入门教程,本博客介绍了 ESB、MQ、JMS 的一些知识... SpringBoot 多数据源 SpringBoot 使用主从数据源 简易的后台管理权限设计 从零开始搭建自己权限管理框架 Docker 多步构建更小的 Java 镜像 Docker Jav...

    honhon 评论0 收藏0
  • Docker 入门及安装[Docker 系列-1]

    摘要:核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树网络用户与挂载文件系统,而核心的提供资源隔离,包括存储器与网络。因此更为轻量快速和易于管理。 docker 如日中天,这不是单纯的炒概念,docker 确确实实解决了开发与运维的痛点,因此在企业开发中得到了非常广泛的使用,本文对于 docker 的这些基本知识点再做一些简单回顾。 什么是 docker 根据 wikip...

    Lin_R 评论0 收藏0
  • Docker技术三大要点:cgroup, namespace和unionFS的理解

    摘要:而是基于容器的这个设计思想,基于技术实现的核心管理引擎。的三大特色,和。不同内的进程属于不同的,彼此透明,互不干扰。看下面的图加深理解。同样内核版本的不同的发行版,其都是一致的。 www.docker.com的网页有这样一张有意思的动画: showImg(https://segmentfault.com/img/remote/1460000017474530); 从这张gif图片,我们...

    Zachary 评论0 收藏0
  • java篇 - 收藏集 - 掘金

    摘要:进阶多线程开发关键技术后端掘金原创文章,转载请务必将下面这段话置于文章开头处保留超链接。关于中间件入门教程后端掘金前言中间件 Java 开发人员最常犯的 10 个错误 - 后端 - 掘金一 、把数组转成ArrayList 为了将数组转换为ArrayList,开发者经常... Java 9 中的 9 个新特性 - 后端 - 掘金Java 8 发布三年多之后,即将快到2017年7月下一个版...

    OpenDigg 评论0 收藏0

发表评论

0条评论

李世赞

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<