Docker / OSX快速入门

这篇具有很好参考价值的文章主要介绍了Docker / OSX快速入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker / OSX快速入门

目录

Docker / OSX快速入门

在Mac上安装

Boot2Docker

关于容器的一个注意事项

一个例子:Python Flask App

运行

在AWS上运行相同的容器

更多东西


 文章来源地址https://www.toymoban.com/news/detail-753994.html

 

本文章向大家介绍Docker / OSX快速入门,主要内容包括在Mac上安装、Boot2Docker、一个例子:Python Flask App、在AWS上运行相同的容器、更多东西、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

 

Docker(容器技术)始于2013年,自那时起我便经常可以看到有关docker的消息。之前我已经尝试过docker的入门例子,但我觉得自己没有真正理解docker技术的价值所在以及docker容器是如何运行的。在这周,当我花了一些时间去研究docker之后,发现它并没有我之前想得那样神秘和复杂。

在Mac上安装

Docker技术脱胎于Linux,使用像LXC(linux container)这样的内核虚拟化技术作为运行的基础。docker还有一个Windows的版本(然而并没有多少人关注)。鉴于湾区的软件工程师们主要使用Mac作为工作机器,所以我们首先看看如何在OSX上安装并运行docker。

首先,不要尝试使用brew或其他软件包管理工具来安装docker。它是用Go编写的,Go编译生成的二进制文件具有不需要其他外部依赖即可运行的优点。此外,这个项目进展之快以至于软件包管理器中的版本都过时了。所以,放弃之前的方法然后通过下载docker可执行文件手动安装它。

手动安装之后如果你可以打开一个终端并执命令docker --version,那么恭喜你完成了第一步。

注:本教程适用于docker 1.5.0版本。

Boot2Docker

如果你现在试图运行一个docker镜像,你会得到一个像这样的神秘错误docker max dial unix /var/run/docker.sock: no such file or directory。这是因为Docker守护进程没有运行。事实上,它不能在Mac上运行!因此,您必须使用boot2docker,这是一个在VirtualBox中运行并具有Docker守护进程的小型虚拟机。再次使用二进制安装程序安装boot2docker。

要启动并运行,请打开终端运行以下命令。

boot2docker init
boot2docker up
eval "$(boot2docker shellinit)"
docker run ubuntu:14.04 /bin/echo 'Hello world'

这就是"Hello world"的例子。让我们来看看这里发生了什么。boot2docker init在VirtualBox中创建一个新的虚拟机:

下一步,boot2docker up运行这个虚拟机。eval "$(boot2docker shellinit)"设置一些环境变量,告诉Docker你当前在哪个环境中运行。如果单独执行boot2docker shellinit,你可以看到原始输出:

Writing /Users/chase/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/chase/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/chase/.boot2docker/certs/boot2docker-vm/key.pem
export DOCKER_HOST=tcp//192.168.59.104:2376
export DOCKER_CERT_PATH=/Users/chase/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

前三行只是提示信息,只有最后三行输出到stdout(标准输出)。

最后一条命令docker run ubuntu:14.04 /bin/echo 'Hello world'实际上实例化了一个新的Docker容器(基于Ubuntu 14.04镜像),并在其中运行一个命令。

关于容器的一个注意事项

容器是微型虚拟化linux的实例。镜像是容器从其中分离出来的序列化定义文件。Docker的神奇之处在于这些镜像是完全可移植的。这个概念起初迷惑了我,我最初的想法是你需要在你的Mac上建立一个镜像配置并运行你需要的东西,然后在Amazon EC2上建立一个镜像,在重新配置运行同样的东西。

实际上,您可以在Mac上构建一个映像,配置好之后使用scp将该文件移动至AWS上直接运行即可。如果通过Docker Hub您甚至不需要手动复制它。

此外,在Docker容器中使用的Linux发行版不必与主机操作系统的发行版相匹配。你可以在CentOS主机中运行Ubuntu,反之亦然。

最后,镜像具有内置的分层机制。你可以以一个镜像为基础,在这个基础上修改,然后这些小修改会形成差异层的累积。这是一个强大的优化和抽象,我们将在后面讨论。

一个例子:Python Flask App

这是在docker中使用python的一个经典教程,但是我查阅了所有我能找到的文档也没有完成教程中的内容。这是我依据自己的情况完成的特殊版本:

首先,创建一个名为flask的新目录。并在这个目录下创建三个文件:

第一个文件名为app.py,这是一个简单的Flask示例应用程序。

from flask import Flask
import os
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host="0.0.0.0",debug=True)

然后,创建一个requirements.txt文件写入Flask作为依赖项:

Flask==0.10.1

最后,创建你的Dockerfile

FROM Python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 5000
CMD python app.py

让我们花点时间分析这最后一个文件。第一行FROM指示Docker从容器公用存储库中调出python的镜像,并使用标签(如2.7)指定镜像版本。

第二行ADD将您的代码从当前目录复制到Docker容器的/code目录中。第三行WORKDIR设置/code为工作目录。

RUN可以多次使用,它告诉Docker在第一次构建容器时运行这些命令。运行步骤会被缓存,以后改变其中一个只会导致改变的那个再次运行。这应该是由于我们之前提到的容器分层。

EXPOSE告诉Docker该容器将开放5000端口提供服务,这是我们将运行Flask应用程序的端口。

最后,CMD指定将作为主守护进程在容器内运行的命令。如果您需要运行多个守护进程,请查看docker-compose。

运行

要运行该示例,请执行以下命令:

open "http://$(boot2docker ip):5000"
docker build -t flask-example .
docker run -it -p 5000:5000 -v $(pwd):/code:ro flask-example

这可能在Flask应用启动之前打开浏览器并造成一个“这个网页不可用”的错误页面,但如果你现在刷新它,你应该看到浏览器输出的"Hello World!" 文本。

上面你所做的就是创建一个名为flask-example的镜像并运行它。你甚至可以编辑本地文件系统上的代码,它会在Docker中同步(感谢-v(-v参数会指定容器和主机共享的目录)),修改Flask将自动重新启动。

在AWS上运行相同的容器

现在,我们来看看如何在AWS上运行同一个容器。首先请注册Docker Hub,这是免费的。

假设你的Docker Hub用户名是foobar。首先,重新构建并在docker hub上发布您的镜像:

docker build -t foobar/flask-example .
docker login
docker push foobar/flask-example

现在,创建一个新的EC2实例,确保使用"Amazon Linux"作为基础映像,这将使安装Docker变得更容易。SSH到你的实例并运行docker容器:

sudo yum install -y docker ; 使用最高权限安装并启动docker服务
sudo docker run -it -p 8000:5000 foobar/flask-example

第一行简单地安装Docker并启动它。第二行从Docker Hub下载镜像(注意:不需要验证!)并在交互式shell中运行它,并将主机EC2实例上的外部端口8000映射到容器内的端口5000。

如果您的安全组设置为公开端口8000,那么就应该能够在Web浏览器中使用这个EC2的ip加上端口号8000打开这个Flask应用。

更多东西

当我开始做这件事的时候,我犯了一个错误:试​​图在我对docker还没有一个清楚的理解的时候就使用docker-composedocker-machine,这些是官方插件,分别简化了Docker中多服务和多机器功能的配置。我建议在你有了上面的基础知识之前不要看这些东西。在一开使就看这些使我对docker更加困惑了。

 

到了这里,关于Docker / OSX快速入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mbp安装steam显示“steam_osx”已损坏,mac安装steam方法

    我的电脑系统。 刚开始下载steam的时候,也是各种文件损坏。以下是我的安装步骤 1、我使用上面的方法用终端输了一遍“sudo spctl --master-disable”,原本我就打开了所有的来源,碰碰运气试了试 2、使用上面的方法在客服中心下载了一个steam的安装包,要把原来的安装包给删掉

    2024年02月11日
    浏览(38)
  • 第七次作业 运维高级 docker容器进级版

    1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 (1)拉取相应镜像 (2)运行mysql:5.6容器 (3)运行owncloud容器 (4)查看并验证 之后在浏览器中输入ipaddress:8080 2、安装搭建私有仓库 Harbor (1)下载好harbor和docker-compose (2)上传到Linux服务器 (3)复制docker-compose并修改权限 (4)解压harbor (

    2024年02月12日
    浏览(54)
  • 【运维知识大神篇】运维人必学的Docker教程1(Docker安装部署+Docker镜像管理+容器管理常用命令+搭建docker的本地yum源+windows系统安装docker环境)

    本篇文章开始给大家介绍Docker,这个是我非常喜欢的一个服务,介绍给大家,希望大家也能喜欢! 目录 何为容器 Docker环境安装部署 一、yum安装(CentOS7.9) 二、rpm包安装(CentOS) 三、卸载docker环境 四、安装指定的docker版本 五、Ubuntu安装docker环境 六、使用deb安装docker 七、

    2024年01月18日
    浏览(104)
  • 修复Unity编译时“AAPT2 aapt2-4.1.2-6503028-osx Daemon #0 Failed to shutdown within timeout”错误

    要解决这个报错首先我们要了解AAPT是什么东西。 aapt 全称为 Android Asset Packaging Tool,即为Android资源打包工具。作为unity开发人员,一般跟Android打交道比较少,感兴趣的同学可以先去官网学习学习。 ##aapt2版本 首先4.1.2-6503028是使用appt2 sdk版本。 我们可以在maven仓库查到具体版

    2024年02月16日
    浏览(36)
  • K8S自动化运维容器化(Docker)集群程序

    1.什么是K8S K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container Schedul

    2024年02月10日
    浏览(64)
  • docker save 命令 docker load 命令 快速复制容器

    docker save 命令用于在系统上把正在使用的某个容器镜像 导出成容器镜像文件保存下载,以便在其他系统上导入这个容器镜像文件 以便快速在其他服务器上启动相同的容器。 查看redis容器和镜像 导出redis镜像文件 注意命令中 -o 跟的是导出的镜像文件的文件名 可以任意命名 本

    2024年03月15日
    浏览(53)
  • K8S:K8S自动化运维容器Docker集群

    (1)K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 (2)版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 (3)官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container S

    2024年02月10日
    浏览(77)
  • docker 批量快速删除容器和镜像

    如果你想要批量删除 Docker 镜像,可以使用各种命令。以下是一些示例: 1. 删除所有镜像: docker rmi $(docker images -q) 2. 删除所有未标记的镜像(即  none  镜像): docker rmi $(docker images -f \\\"dangling=true\\\" -q) 请注意,根据你的 Docker 版本和设置,你可能需要在上述命令前添加  sudo

    2024年02月06日
    浏览(44)
  • Docker Compose容器的快速编排

    Docker Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排(使用一个模板文件定义多个应用容器的启动参数和依赖关系,并使用Docker Compose来根据这个模板文件的配置来启动容器)。 项目/工程 - 包含一个或多个服务 - 包含一个或多个容器 默认使用项目的目

    2024年02月15日
    浏览(42)
  • K8S:K8S自动化运维容器化(Docker)集群程序

    目录 一、K8S概述 1、什么是K8S 2、为什么要用K8S 3、作用及功能 二、K8S的特性 1、弹性伸缩 2、自我修复 3、服务发现和复制均衡 5、自动发布和回滚 6、集中化配置管理和秘钥管理 7、存储编排 8、任务批量处理运行 三、K8S的集群架构 四、K8S的核心组件 1、Master组件 ①Kube-apis

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包