`
haiouc
  • 浏览: 118886 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

快速掌握----零基础入门Docker

阅读更多

 

只要一小时,零基础入门Docker

 

 

Docker是什么?

 

Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、MysqlNginx等打包到一个容器中,然后部署到任意你想部署到的环境。

 

Docker的三个概念

 

1.  镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

 

2.  容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

 

3.  仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.0414.04等)的Ubuntu镜像。

 

 

Docker的安装和卸载

 

Docker可以安装在WindowsLinuxMac等各个平台上。安装完成之后,可以查看Docker的版本信息:

 

# docker version

Client:

 Version:      1.12.3

 API version:  1.24

  Go version:   go1.6.3

 Git commit:   6b644ec

 Built:

 OS/Arch:      linux/amd64

 

Server:

  Version:      1.12.3

 API version:  1.24

 Go version:   go1.6.3

 Git commit:   6b644ec

 Built:

 OS/Arch:      linux/amd64

 

查看Docker的帮助信息:# docker --help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。

 

 

Docker中关于镜像的基本操作

 

安装完Docker引擎之后,就可以对镜像进行基本的操作了。

我们从官方注册服务器的仓库中pullCentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:

 

[root@xxx ~]# docker search centos    # 查看centos镜像是否存在

[root@xxx ~]# docker pull centos    # 利用pull命令获取镜像

Using default tag: latest

latest: Pulling from library/centos

08d48e6f1cff: Pull complete

Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c

Status: Downloaded newer image for centos:latest

 

 

 

[root@xxx ~]# docker images    # 查看当前系统中的images信息

 

REPOSITORY      TAG            IMAGE ID       CREATED        SIZE

centos          latest         0584b3d2cf6d   9 days ago     196.5 MB

 

以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。

 

1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本

[root@xxx ~]# docker run -it centos:latest /bin/bash    # 启动一个容器

[root@72f1a8a0e394 /]#    # 这里命令行形式变了,表示已经进入了一个新环境

[root@72f1a8a0e394 /]# git --version    # 此时的容器中没有git

bash: git: command not found

[root@72f1a8a0e394 /]# yum install git    # 利用yum安装git

......

[root@72f1a8a0e394 /]# git --version   # 此时的容器中已经装有git

git version 1.8.3.1

 

此时利用exit退出该容器,然后查看docker中运行的程序(容器):

 

[root@xxx ~]# docker ps -a

CONTAINER ID  IMAGE    COMMAND      CREATED   STATUS   PORTS    NAMES

72f1a8a0e394  centos:latest "/bin/bash"  9 minutes ago   Exited (0) 3 minutes ago      angry_hodgkin

 

这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:

 

[root@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git

 

[root@xxx ~]# docker images

 

REPOSITORY       TAG    IMAGE ID         CREATED             SIZE

xianhu/centos    git    52166e4475ed     5 seconds ago       358.1 MB

centos           latest 0584b3d2cf6d     9 days ago          196.5 MB

 

其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的idxianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到。

 

此时Docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的CentOS镜像区别在于多了个Git工具。此时我们利用新镜像创建的容器,本身就自带git了。

 

[root@xxx ~]# docker run -it xianhu/centos:git /bin/bash

[root@520afc596c51 /]# git --version

git version 1.8.3.1

 

利用exit退出容器。注意此时Docker引擎中就有了两个容器,可使用docker ps -a查看。

 

2)利用Dockerfile创建镜像

 

Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作。一个简易的Dockerfile文件如下所示:

 

# 说明该镜像以哪个镜像为基础

FROM centos:latest

# 构建者的基本信息

MAINTAINER xianhu

# build这个镜像时执行的操作

RUN yum update

RUN yum install -y git

# 拷贝本地文件到镜像中

COPY ./* /usr/share/gitdir/

 

 

有了Dockerfile之后,就可以利用build命令构建镜像了:

 

[root@xxx ~]# docker build -t="xianhu/centos:gitdir" .

其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找Dockerfile

 

构建完成之后,同样可以使用docker images命令查看:

 

[root@xxx ~]# docker images

REPOSITORY        TAG       IMAGE ID      CREATED            SIZE

xianhu/centos     gitdir    0749ecbca587  34 minutes ago     359.7 MB

xianhu/centos     git       52166e4475ed  About an hour ago  358.1 MB

centos            latest    0584b3d2cf6d  9 days ago         196.5 MB

 

以上就是构建自己镜像的两种方法。其中也涉及到了容器的一些操作。如果想删除容器或者镜像,可以使用rm命令,注意:删除镜像前必须先删除以此镜像为基础的容器。

 

[root@xxx ~]# docker rm container_name/container_id

[root@xxx ~]# docker rmi image_name/image_id

 

镜像其他操作指令:

 

[root@xxx ~]# docker save -o centos.tar xianhu/centos:git    # 保存镜像

[root@xxx ~]# docker load --input centos.tar    # 加载镜像

 

 

Docker中关于容器的基本操作

 

 

在前边镜像的章节中,我们已经看到了如何基于镜像启动一个容器,即docker run操作。

 

[root@xxx ~]# docker run -it centos:latest /bin/bash

 

这里-it是两个参数:-i-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)。除了这两个参数之外,run命令还有很多其他参数。其中比较有用的是-d后台运行:

 

[root@xxx ~]# docker run centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"

[root@xxx ~]# docker run -d centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"

 

这里第二条命令使用了-d参数,使这个容器处于后台运行的状态,不会对当前终端产生任何输出,所有的stdout都输出到log,可以使用docker logs container_name/container_id查看。

 

启动、停止、重启容器命令:

[root@xxx ~]# docker start container_name/container_id

[root@xxx ~]# docker stop container_name/container_id

[root@xxx ~]# docker restart container_name/container_id

 

后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:

[root@xxx ~]# docker attach container_name/container_id

 

删除容器的命令前边已经提到过了:

[root@xxx ~]# docker rm container_name/container_id

 

 

Docker中关于仓库的基本操作

 

 

Docker官方维护了一个DockerHub的公共仓库,里边包含有很多平时用的较多的镜像。除了从上边下载镜像之外,我们也可以将自己自定义的镜像发布(push)到DockerHub上。

 

在镜像操作章节中,我们新建了一个xianhu/centos:git镜像。

 

1)访问 https:// hub.docker.com/ ,如果没有账号,需要先注册一个。

 

2)利用命令docker login登录DockerHub,输入用户名、密码即可登录成功:

 

[root@xxx ~]# docker login

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: xianhu

Password:

Login Succeeded

 

3)将本地的镜像推送到DockerHub上,这里的xianhu要和登录时的username一致:

 

[root@xxx ~]# docker push xianhu/centos:git    # 成功推送

[root@xxx ~]# docker push xxx/centos:git    # 失败

The push refers to a repository [docker.io/xxx/centos]

unauthorized: authentication required

 

4)以后别人就可以从你的仓库中下载合适的镜像了。

[root@xxx ~]# docker pull xianhu/centos:git

 

对应于镜像的两种创建方法,镜像的更新也有两种:

 

·    创建容器之后做更改,之后commit生成镜像,然后push到仓库中。

·    更新Dockerfile。在工作时一般建议这种方式,更简洁明了。

 

这里再一次回顾一下三个重要的概念:镜像、容器、仓库:

 

从仓库(一般为DockerHub)下载(pull)一个镜像,Docker执行run方法得到一个容器,用户在容器里执行各种操作。Docker执行commit方法将一个容器转化为镜像。Docker利用loginpush等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序了。

 

 

利用Docker创建一个用于Flask开发的Python环境

 

 

上边已经解释和练习了Docker的基本操作命令,下边以实例的形式完整走一遍流程。

我们创建一个用于Flask开发的Python环境,包含GitPython3Flask以及其他依赖包等。

 

完整命令如下:

 

[root@xxx ~]# docker pull centos

[root@xxx ~]# docker run -it centos:latest /bin/bash

# 此时进入容器,安装Python3GitFlask及其依赖包等,安装完成后exit退出

[root@xxx ~]# docker commit -m "Flask" -a "xianhu" container_id xianhu/flask:v1

[root@xxx ~]# docker push xianhu/flask:v1

 

Docker的功能和特性还有很多,各种运行命令、参数等也都有待学习和练习,比如如何管理数据、如何管理网络、如何互相配合工作、如何编写更专业的Dockerfile等。本文先入门为主,以后有时间再慢慢更新关于Docker的知识。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Linux从零入门实战-2019年七月Z线.txt

    第一阶段 Linux快速入门掌握Linux的常用操作命令 第一讲 Linux介绍 知识点1: Linux发展简史与黑客文化 知识点2: 安装Linux系统, 以Ubuntu虚拟机为例 知识点3: 购买Linux云主机,以阿里云主机为例 知识点4: Linux...

    01零基础1小时学.net core编程,极简教程,简到奔溃dnc+vue

    - 极速入门:与“零基础1小时入门”相似,都强调教程内容的精简和效率,旨在快速掌握.NET Core编程。 - 挑战不可能的任务:这可能是对教程难度和效果的一种夸张表达,意在激励学习者相信能够在短时间内取得显著的...

    Kubernetes(K8S)超快速入门视频教程

    零基础以及有一定运维经验的小伙伴 课程内容 1、K8S概述 2、K8S功能及架构设计 3、K8S集群部署 4、K8S资源清单YAML 5、K8S集群NameSpace(命名空间)、Pod、Controller(控制器)、Service 6、K8S课程总结

    ASP.NET完全入门

    "ASP.NET完全入门"这个主题涵盖了从基础概念到实际开发的全方位学习路径,旨在帮助初学者快速掌握ASP.NET的核心技术和实践方法。 1. **基础概念** - ASP.NET的起源:ASP.NET是在ASP(Active Server Pages)的基础...

    FlaskWeb开发实战:入门、进阶与原理解析学习.zip

    《FlaskWeb开发实战:入门、进阶与原理解析学习》是一本全面解析Flask框架的实战指南,旨在帮助开发者从零基础开始掌握Web应用的构建。Flask是Python语言中最受欢迎的轻量级Web服务器框架之一,以其简洁、灵活的特性...

    2020最新-百战程序员-SpringBoot视频教程入门到高级(高薪必备技能).txt

    1. **基础知识**:首先需要掌握Java基础语法、面向对象编程、Maven等基本工具的使用。 2. **Spring框架**:了解Spring框架的基本原理,包括IoC容器、AOP等核心概念。 3. **Spring Boot入门**:安装Spring Boot,创建...

    零基础学JAVA WEB开发

    【零基础学JAVA WEB开发】 在信息技术领域,Java Web开发是一项重要的技能,它结合了Java编程语言和Web应用开发技术,使开发者能够构建功能丰富的、跨平台的互联网应用程序。本教程针对初学者,旨在帮助没有基础的...

    springcloud-demo-master_spring-cloud_cloud_

    【描述】"spring-cloud入门,大概流程为,以spring-boot为基础框架,搭建学习spring-cloud生态应用。" 这句话表明该项目旨在引导初学者了解Spring Cloud。首先,Spring Boot是一个简化Spring应用程序开发的框架,它...

    01_零基础1小时学编程_极速入门dnc_vue前后端分离

    标题中提到的知识点为“零基础1小时学编程”,表明本教程的受众是完全没有编程基础的初学者。内容侧重于教授编程思维,而并非深奥的编程语言,意在帮助初学者快速入门。描述中提及“极速入门dnc_vue前后端分离”,...

    华为工程师总结liunx进阶运维.docx

    通过这三个阶段的学习,读者将能够从零基础逐渐成长为能够独立维护和管理大型企业级Linux服务器集群的专业运维工程师,具备处理高并发、大数据量和复杂网络环境的能力,同时也掌握了前沿的自动化运维技术和云原生...

    从零搭建Spring Boot脚手架,开篇以及技术选型.docx

    对于已经具备一定Spring Boot使用经验但希望进一步深入学习、熟练掌握该框架特性的开发者而言,从零开始搭建一个完整的后端脚手架不仅有助于加深对Spring Boot的理解,还能提供一系列实用的解决方案。本文旨在通过...

    超级账本入门导航

    超级账本(Hyperledger)是一个由Linux基金会主导的开源协作项目,旨在推进跨行业区块链技术。...通过不断的学习和实践,开发者可以掌握这一领域的核心技能,为未来在区块链技术领域的发展打下坚实的基础。

    1.整体说明1

    通过观看B站上的教程,如“30分钟搞定VSCode和Python开发环境搭建”和“十五分钟快速Win VSCode C++环境搭建”,你可以快速掌握VSCode的使用。 【Docker】 Docker是一个应用容器引擎,能帮助开发者打包应用及其依赖...

    Ubuntu部落pdf,Ubuntu入门书籍

    这本书详尽地介绍了如何从零开始学习和使用Ubuntu操作系统,旨在帮助读者快速掌握这一开源系统的各个方面。 首先,书中会涵盖Ubuntu的安装过程,包括不同的安装方式,如图形化安装和命令行安装,以及如何选择合适的...

    Nginx教程从入门到精通

    本教程旨在帮助读者从零基础开始,逐步掌握Nginx的核心功能和高级特性,从而实现从入门到精通的进阶。 一、Nginx简介 Nginx由俄罗斯开发者Igor Sysoev创建,最初是为了解决Apache服务器在高并发场景下的性能问题。...

Global site tag (gtag.js) - Google Analytics