Docker简单安装与应用入门教程

本文实例讲述了Docker简单安装与应用。分享给大家供大家参考,具体如下:

作为一个初次接触Docker的人来说,最大的问题是Docker是什么?Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。比如,我们在笔记本上编译测试通过的容器可以批量地在生产环境中部署,可以用于自动化测试和持续集成、发布。

还可以用于web应用的自动化打包和发布;在服务型环境中部署和调整数据库或其他的后台应用;从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

在Mac下安装Docker

打开Docker下载网址下载稳定版本,并安装和运行Docker。顶部状态栏中的鲸鱼指示Docker正在运行,并可以从终端访问。

点击顶部状态栏中的鲸鱼,选择About Docker以验证是否有最新版本。

运行这些命令来测试docker、docker-ompose、docker-machine版本是否是最新的,并且和Docker.app兼容。

$ docker --version
$ docker-compose --version
$ docker-machine --version

打开一个命令行终端,你可以运行一些Docker命令来验证Docker是否正常工作。比如使用docker version来检查你是否安装了最新版本,使用docker ps来列出正在运行的容器,使用docker run hello-world运行示例程序。

使用docker run命令可以启动一个新容器,这种单一的命令将触发安装运行序列:先在本机寻找该镜像,如果本机找不到就去Docker Hub下载这个镜像,并把镜像加载到容器中,然后启动该程序,这样容器就运行起来了。其他系统可以参考官网文档安装。

Docker示例项目

现在开始使用Docker构建应用程序,从Docker应用程序的层次结构底部开始,应用程序是一个容器,在这个层次上面是一个服务,它定义了容器在运行时的行为方式,最后,在顶层是堆栈,定义了所有服务的交互。

在过去,如果要开始编写一个Python应用程序,第一步就是在机器上安装一个Python运行库,但是,这会造成应用程序只能在您的机器运行。使用Docker可以将一个可移植的Python运行时环境作为一个镜像来获取,无需安装。然后构建可以将基础Python镜像与应用程序代码一起包括在内,确保您的应用程序、依赖项和运行时环境都一起移动。

这些可移植的镜像是由一个叫做Dockerfile的东西来定义的。

用Dockerfile定义容器

Dockerfile将定义容器内的环境中发生了什么,访问像网络接口和磁盘驱动器这样的资源是在这个环境中虚拟化的,这个环境与系统的其他部分是隔离的,所以必须将端口映射到外部世界,并具体说明想复制哪些文件到那个环境。完成这些工作后,这个Dockerfile中定义的应用程序在任何地方运行都将有完全相同的表现。

创建一个新的目录,在新目录下创建一个名为Dockerfile的文件,将以下内容复制并粘贴到该文件中保存。

# 使用官方的Python运行时环境作为父镜像
FROM python:2.7-slim
# 将工作目录设置为“/app”
WORKDIR /app
# 将当前目录内容复制到“/app”的容器中
ADD . /app
# 安装requirements.txt中指定的所有需要的软件包
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 将端口80映射到外部世界
EXPOSE 80
# 定义环境变量
ENV NAME World
# 容器启动时运行app.py
CMD ["python", "app.py"]

创建并编辑应用程序

创建requirements.txt文件,并放在与Dockerfile相同的目录下。

Flask
Redis

创建app.py文件,并放在与Dockerfile相同的目录下。

from flask import Flask
from redis import Redis, RedisError
import os
import socket
# 连接到Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
  try:
    visits = redis.incr("counter")
  except RedisError:
    visits = "<i>cannot connect to Redis, counter disabled</I>"
  html = "<h3>Hello {name}!</h3>" \
      "<b>Hostname:</b> {hostname}<br/>" \
      "<b>Visits:</b> {visits}"
  return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
  app.run(host='0.0.0.0', port=80)

很简单的就完成了应用程序部分,当Dockerfile被内置到镜像中时,由于DockerfileADD命令,app.pyrequirements.txt将会出现,并且app.py的输出将可以通过HTTP访问,这要归功于EXPOSE命令。

构建应用程序

打开一个命令行终端,确保仍然在新目录的顶层,运行构建命令,这会创建一个Docker镜像。

$ docker build -t friendlyhello .

构建的镜像可以在本地Docker镜像注册表中看到。

$ docker images

运行应用程序

运行应用程序,使用-p将机器的端口4000映射到容器的已发布端口80。

$ docker run -p 4000:80 friendlyhello

现在应该看到一条消息,Python在http://0.0.0.0:80上提供应用程序,但是这个消息来自容器内部,它并不知道该容器的端口80映射到4000,因此正确的URL为http://localhost:4000。

也可以在命令行终端中使用curl命令来查看相同的内容。

$ curl http://localhost:4000

这个4000:80的端口重映射是为了演示Dockerfile中的EXPOSE与使用docker run -p发布的内容之间的区别。在后面的步骤中,会将主机上的端口80映射到容器中的端口80,并使用http://localhost。

在Mac下,在命令行终端中点击CTRL + C即可退出。而在Windows系统下,CTRL + C不会停止容器。因此,首先键入CTRL + C来获取提示,或打开另一个Shell,然后键入docker container ls列出正在运行的容器,接着是docker container stop <Container NAME或ID>以停止容器。否则,当尝试在下一步中重新运行容器时,将从守护程序中收到错误响应。

现在以分离模式在后台运行应用程序。

$ docker run -d -p 4000:80 friendlyhello

容器正在后台运行,您还可以使用docker container ls查看CONTAINER ID。

$ docker container ls

可以看到CONTAINER ID与http://localhost:4000上的内容匹配。现在使用docker container stop来结束进程。

$ docker container stop 9dfc794cdc52

分享镜像

为了演示镜像的可移植性,上传我们构建的镜像,并在其他地方运行它,毕竟,将容器部署到生产环境中时,需要学习如何使用注册表。

一个注册表是一个存储库的集合,一个存储库是一个镜像集合,有点像GitHub存储库,除了代码已经建立。注册表上的帐户可以创建许多存储库。Docker CLI默认使用Docker的公共注册表。在这里使用Docker的公共注册表,是因为它免费,并且是预配置的,但是有许多公共选项可供选择,甚至可以使用Docker Trusted Registry设置您自己的私有注册表。

使用Docker ID登录

如果没有Docker帐户,请在Docker官网注册一个。然后,登录到本地机器上的Docker公共注册表。

$ docker login

标记镜像

将本地镜像与注册表中的存储库相关联的符号是username/repository:tag,该tag是可选的,但推荐使用,因为这是注册管理机构为Docker镜像提供版本的机制。给存储库标记一个有意义的名字,比如get-started:part2,这会将镜像放入启动存储库,并将其标记为part2。

现在,把它们放在一起来标记镜像,使用用户名、存储库、标签名称运行docker tag image,以便镜像将上传到想要的目的地。

# 语法
$ docker tag image username/repository:tag
# 示例
$ docker tag friendlyhello john/get-started:part2

运行docker imagesdocker image ls以查看新标记的镜像。

发布镜像

将您标记的镜像上传到存储库。

# 语法
$ docker push username/repository:tag
# 示例
$ docker push john/get-started:part2

一旦完成,这个上传的结果是公开的,如果你登录到Docker Hub ,你将会看到那个新的镜像和它的pull命令。

从远程存储库中提取并运行镜像

从现在开始,可以使用docker run并使用此命令在任何机器上运行您的应用程序。

# 语法
$ docker run -p 4000:80 username/repository:tag
# 示例
$ docker run -p 4000:80 john/get-started:part2

如果镜像在机器上本地不可用,Docker将从存储库中取出。无论docker run在哪里,它都会将您的镜像、Python以及所有依赖项从requirements.txt中提取出来,并运行您的代码。它们被打包在行李箱中一起旅行,主机不需要安装任何东西,除了Docker环境来运行它。

希望本文所述对大家docker容器的使用有所帮助。

(0)

相关推荐

  • docker入门之容器介绍

    docker概述 docker是一个开源的软件部署解决方案: docker也是轻量级的应用容器框架: docker可以打包.发布.运行任何的应用,这个也是docker的产品理念:Docker - Build, Ship, and Run Any App, Anywhere docker采用的是LXC(Namespace+CGroups),即在Linux内核的Namespace[资源隔离]和CGroups[资源控制]技术的基础上通过镜像管理机制来实现轻量化设计. docker组成 docker的组

  • docker容器从入门到痴迷(推荐)

    1. docker 是什么 大家都知道虚拟机吧,windows 上装个 linux 虚拟机是大部分程序员的常用方案.公司生产环境大多也是虚拟机,虚拟机将物理硬件资源虚拟化,按需分配和使用,虚拟机使用起来和真实操作系统一模一样,当废弃不用时直接删除虚拟机文件即可回收资源,很方便集中管理. 由于虚拟机非常庞大,同时对硬件资源的消耗也大,linux 发展出了另一种虚拟化技术,即 linux 容器(Linux Containers,缩写为 LXC),它并不像虚拟机那样模拟一个完整的操作系统,却提供虚拟机

  • 两小时入门Docker教程实践

    1.0引入 1.1Docker是什么? Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护. Docker 使用 Google 公司推出的 Go 语言 进行开发实现. docker是linux容器的一种封装,提供简单易用的容器使用接口.它是最流行的Linux容器解决方案. docker的接口相当简单,用户可以方便的创建.销毁容器.

  • 什么是docker Docker入门教程第一篇

    Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的东西已经很多了.不过本文探讨了Docker的特点.特性.原理,还介绍了具有中国特色的安装测试过程,另外还谈到了Docker的社区生态和Dockerfile,并使用Dockerfile构建一个nginx环境. 缘起 在几个月前听说Docker,但是一直没有时间去研究,前一段时间趁着azure免费试用,赶紧实验一下,但是卡在了ubuntu基础镜像的下载上(由于国内网络的特殊原因),所以也就搁浅了,这里把经验和体会分享一下. Doc

  • Docker入门安装教程(小白篇)

    Dokcer介绍: Docker是一种容器相关的技术,简单来说你可以把它当做一个微型的独立系统,在这个系统里面运行各种软件,然后又在linux服务器上或者是电脑上运行这个系统,这个系统就被称为Docker容器,而运行Docker容器的机器就被称为宿主机.Docker的特性使它可以原封不动的在不同的环境下移植运行,这就避免了同样的代码因为服务器上各种环境细微差别导致的BUG,而且Docker操作简单,易于上手. Docker的应用场景 Web 应用的自动化打包和发布. 自动化测试和持续集成.发布.

  • Docker学习笔记之docker入门

    学习的一些疑问 如何热更新镜像(images)?(你可以快速启动或者销毁容器.这种时间几乎是实时的) 如何热更新游戏服? 好处在于各个应用之间环境相互独立,即使某一个容器崩溃也不会影响到其它容器: 每个容器使用端口如何维护?(方法1写在Dockerfile里面,不灵活:方法2在run的时候-p指定): 那这样的话,会存在好多linux用户,相当于每一个容器就要维护一个物理机(虚拟): 需要一套工具来管理维护镜像.容器的操作和状态: 目前主流使用docker都是应用到哪些场景中? 1. docke

  • Docker安装和简单使用入门教程

    安装 由于我本人使用的linux系统,原生支持docker,相对安装还是比较简单的 1:使用下面的官方脚本安装: wget -qO- https://get.docker.com/ | sh 2:输入下面的命令验证是否可以查看版本号,可以就是安装成功 sudo docker version 3:建议把当前使用的用户加到Docker用户组,就可以不用很次都sudo了 sudo usermod -aG docker your_username 4:重新登录,sudo权限才会成效 logout 至此,

  • Docker 入门快速上手指南

    为什使用 Docker? 为什么要使用 Docker?就个人而言,Docker 能提供的最大便利在于这种技术面对程序环境迁移时所表现的卓越性. 这种性能使得我们不必在分享代码或项目合作.交接时附带一长串的环境配置指南进行版本限制和扩展描述:也不必再特意记录自己对现有环境的配置改变,以免下次系统迁移时手足无措:更为重要的是,Docker 在提供以上解决方案的同时没有把解法变得复杂,相反的,它提供了一种更快.更容易的方式. Docker 独到的对增量和文件层的应用,使得镜像下载.共享 & 隔离.版本

  • Docker简单安装与应用入门教程

    本文实例讲述了Docker简单安装与应用.分享给大家供大家参考,具体如下: 作为一个初次接触Docker的人来说,最大的问题是Docker是什么?Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.比如,我们在笔记本上编译测试通过的容器可以批量地在生产环境中部署,可以用于自动化测试和持续集成.发布. 还可以用于web应用的自动化打包和发布:在服务型环境中部署和调整数据库或其他的后台应用:从头编译或者扩展现有的OpenShift或Cloud Foundry

  • Java搭建简单Netty开发环境入门教程

    下面就是准备Netty的jar包了,如果你会maven的话自然是使用maven最为方便了.只需要在pom文件中导入以下几行 <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1

  • Ubuntu 16.04中Docker的安装和代理配置教程

    前言 最近想在测试环境下快速搭建一套gitlab ci环境,推进下项目组内规范化开发管理.自己在家里的nas上是用docker部署的gitlab,体验非常的好,正好ubuntu 16.04 lts发布了,也想借此机会接触下新版内核和systemd. Ubuntu的安装 这里就省略不介绍了.唯一的问题是当前版本的官方镜像,选中文在安装阶段会报一个busybox的错误,换成英文就好了. 大家也可以参考这篇文章:http://www.jb51.net/article/100919.htm,里面介绍的也

  • PHPUnit 单元测试安装与使用入门教程

    本文实例讲述了PHPUnit 单元测试安装与使用.分享给大家供大家参考,具体如下: 一.官网下载对应 PHP 版本的代码库 https://phpunit.de/getting-started-with-phpunit.html 二.安装 PHPUnit 官网提供了两种方法安装 1. PHP Archive (PHAR) ➜ wget -O phpunit https://phar.phpunit.de/phpunit-8.phar ➜ chmod +x phpunit ➜ ./phpunit

  • Docker快速安装Zookeeper的详细教程

    Docker快速安装Zookeeper 换了公司后很久没用过Zookeeper,最近因为在搞Elastic-Job需要用到,这里简单记录下用Docker搭建过程,下一篇会讲解怎么快速搭建集群.这里不会细讲如何搭建Docker,如果想了解Docker的朋友可以查看我之前写的Docker系列文章. 搜索Zookeeper镜像 evans-MacBook-Pro:tool evan$ docker search zookeeper NAME DESCRIPTION STARS OFFICIAL AUT

  • phpMyAdmin下载、安装和使用入门教程

    对于PHP的逐渐流行,我们有目共睹:无论是BLOG程序中的WordPress,还是CMS程序中的DEDECMS,还是BBS程序中的Discuz!,都可谓经典. 随着程序语言选择的不同,WEB应用所使用的数据库也发生了变化,转而向MySQL阵营学习.其中对于phpMyAdmin的学习则必不可少. phpMyAdmin(简称PMA)是一个用PHP编写的,可以通过互联网在线控制和操作MySQL.他是众多MySQL管理员和网站管理员的首选数据库维护工具,通过phpMyAdmin可以完全对MySQL数据库

  • Docker简单入门使用教程

    前言: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上.近几年来,Docker 在国内发展的如火如荼,特别是在互联网公司, Docker 的使用是十分普遍的,极大提高了应用的维护效率,降低了云计算应用开发的成本.本篇文章主要是带你入门Docker,介绍Docker的安装及简单使用. 1.安装Docker 想要学习Docker,我们首先要安装Docker,从 17.03 版本之后分为 CE(Co

  • MongoDB 简单入门教程(安装、基本概念、创建用户)

    工作方向上的原因,不得不接触部分MongoDB的运维工作,之前有接触过一些MongoDB的内容,基本的运维操作没有什么问题,包括MongoDB的集群搭建.数据分片功能等都测试过.但是时间久了,很多东西不用就忘记了,最近准备出一个系列的MongoDB的运维操作文章,希望把这块儿内容重新拾起来.网上查了查,MongDB讲得好的书也就是<MongoDB权威指南>这本了,但是它引用的MongoDB版本比较旧,所以最好结合着官方文档看,这样收获会更快.MongoDB中文论坛里面也有不少前人总结的好文档,

  • docker容器安装及部署的超详细入门教程

    目录 1.安装docker 2.docker 安装 redis 3.docker 安装rabbitmq 4.docker 安装postgresql 5.docker 安装jdk 并配置环境变量 6.停止和删除容器 7.Docker部署SpringBoot项目 总结 1.安装docker (1)卸载以前安装的Docker容器 sudo yum remove docker \ docker-client \ docker-client-latest \docker-common \docker-la

随机推荐