前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Docker初体验,创建并导出第一个本地镜像

Docker初体验,创建并导出第一个本地镜像

作者头像
耕耘实录
发布于 2018-12-20 08:03:37
发布于 2018-12-20 08:03:37
70900
代码可运行
举报
文章被收录于专栏:耕耘实录耕耘实录
运行总次数:0
代码可运行

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

准备工作,创建一个目录docker-test,用来存放创建镜像所需的文件,同事完成相关文件的创建。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ChatDevOps ~]# mkdir docker-test
[root@ChatDevOps ~]# cd docker-test/
[root@ChatDevOps docker-test]# touch Dockerfile
[root@ChatDevOps docker-test]# touch app.py
[root@ChatDevOps docker-test]# touch requirements.txt

在Dockerfile中加入以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

在app.py中增加以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to 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)

在requirements.txt中添加以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flask
Redis

安装pip,并使用pip安装Flask和Redis

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ChatDevOps docker-test]#  curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
[root@ChatDevOps docker-test]# python get-pip.py 
[root@ChatDevOps docker-test]# pip install -r requirements.txt
[root@ChatDevOps docker-test]# rm -rf get-pip.py 
[root@ChatDevOps docker-test]# ls
app.py  Dockerfile  requirements.txt

执行构建命令,使用-t选项指定镜像的仓库、标签。注意,镜像名称必须小写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ChatDevOps docker-test]# docker build -t local/chatdevops .
Sending build context to Docker daemon 4.608 kB
Step 1/7 : FROM python:2.7-slim
Trying to pull repository docker.io/library/python ... 
2.7-slim: Pulling from docker.io/library/python
... ...
[root@ChatDevOps docker-test]# docker image ls 
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
local/chatdevops        latest              fc26e265213a        21 minutes ago      151 MB
docker.io/fedora        latest              cc510acfcd70        2 weeks ago         253 MB

使用刚刚创建的镜像构建一个容器,并将容器的80端口映射到本机的4000端口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ChatDevOps docker-test]# docker run -p 4000:80 local/chatdevops
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
172.17.0.1 - - [23/May/2018 04:21:04] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [23/May/2018 04:21:04] "GET /favicon.ico HTTP/1.1" 404 -
172.17.0.1 - - [23/May/2018 04:22:24] "GET / HTTP/1.1" 200 -

在浏览器看一下效果:

镜像制作完成,导出镜像,选项-o表示将导出内容写入一个文件,替代了标准输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ChatDevOps docker-test]# docker save -o chatdevops.tar local/chatdevops
[root@ChatDevOps docker-test]# ll
总用量 153716
-rw-r--r--. 1 root root       666 523 09:52 app.py
-rw-------. 1 root root 157392896 523 11:47 chatdevops.tar
-rw-r--r--. 1 root root       509 523 11:12 Dockerfile
-rw-r--r--. 1 root root        12 523 09:51 requirements.txt

在异机上导入刚刚创建的镜像。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@ChatDevOps docker-test]# scp chatdevops.tar root@10.1.1.1.12:/root/
[root@ChatDevOps ~]# ll
总用量 153704
-rw-------. 1 root root 157392896 523 14:30 chatdevops.tar
[root@ChatDevOps ~]# docker load --input chatdevops.tar 
ba291263b085: Loading layer [==================================================>] 82.94 MB/82.94 MB
10dd6271862c: Loading layer [==================================================>] 7.487 MB/7.487 MB
4e1a46391216: Loading layer [==================================================>] 46.96 MB/46.96 MB
a40d037570f2: Loading layer [==================================================>] 7.649 MB/7.649 MB
d9bad830e350: Loading layer [==================================================>] 1.536 kB/1.536 kB
16b29278858d: Loading layer [==================================================>]  5.12 kB/5.12 kB
b6e1c4419841: Loading layer [==================================================>] 12.32 MB/12.32 MB
Loaded image: local/chatdevops:latest
[root@ChatDevOps ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
local/chatdevops    latest              dea564c3cb05        3 hours ago         151 MB

本文是Docker官方文档的实例的实践与拓展,刚刚学习Docker,诸多问题还望大家海涵和指教。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年05月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker初体验,向Docker Hub推送第一个本地镜像
版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢
耕耘实录
2018/12/20
7490
Docker容器
如果容器理解为独立运行的一个或一组应用,以及它们的运行态环境。 而虚拟机则为可理解为跑在上面的应用。
yaohong
2019/09/11
8410
Docker-Compose初体验
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Wu_Candy
2022/07/04
2430
Docker-Compose初体验
学习Docker之使用docker-compose编配一整套服务
使用docker compose可以一键完成“一整套”服务的搭建也可以完成服务集群化部署。
用户7886150
2021/01/15
6870
Docker使用手册-基础篇
类似于github和国内的gitee一样的远程仓库,只不过docker hub是公共的镜像仓库,用户可以上传和下载公开的镜像使用。
用户11014621
2025/02/07
1130
3分钟将Python应用容器化
很多开发者用自己的电脑开发,然后将程序部署在内网。如果内网无法访问互联网,部署就相当麻烦,你需要将应用程序依赖的包也传输到内网。如果是 Python 应用,还需要使用 pip 安装一下依赖包,对于某些需要编译安装包,windows 环境下安装过程中还可能报错,linux 可能提示缺失必要的头文件等,安装这些依赖包会耗费较多的时间,对自己的技术提升其实没有帮助,是要尽可能避免的。
somenzz
2020/11/25
1.1K0
docker虚拟化之订制python环境
前面我们讲了python爬虫用到的工具及模块:phantomjs、beautifulsoup4、selenium、lxml等,如果我们想随时随地用到这个已经搭建好的python环境,这就有两个方案:一是利用vagrant打包python环境的box;二是创建一个python环境的docker镜像。
py3study
2020/01/08
1.5K0
Docker官方文档翻译2
个人博客纯净版:https://www.fangzhipeng.com/docker/2018/09/11/dokcer-trans2.html
方志朋
2022/05/07
2960
Docker官方文档翻译2
009.Docker Compose部署及基础使用
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。
木二
2019/07/26
8500
docker学习笔记之三 容器
我们使用cd命令进入到该文件夹。然后我们创建一个叫做Dockerfile的文件。把以下内容复制并粘贴到刚才创建的文件中并保存。
魔王卷子
2019/05/30
4600
Docker 部署一个用 Python 编写的 Web 应用
在 WSL2 中安装 docker https://www.runoob.com/docker/ubuntu-docker-install.html 会报错:
Michael阿明
2022/01/07
8740
Docker 部署一个用 Python 编写的 Web 应用
使用Docker Swarm部署测试集群
前言 上家公司的发展迁移后端服务部署是依托于Docker Swarm部署的线上服务集群。随着业务的不断发展,后来改成了Kubernetes来部署环境,Docker Swarm见证了着我们当时业务从0
测试加
2022/12/03
7860
使用Docker Swarm部署测试集群
docker搭建私有仓库
序言 黄金指,一不小心就弄出一个故障。。。好可怕好可怕,我的小心脏。。。我的小心眼。。。 我这么信任你,你居然欺骗我。。。。****,这么大的坑,填不满啊。。。 生产变更,做再多的准备都不为过。。。double check。。。所谓的预期无影响都是骗人的。。。感觉很重要。。。内心是拒绝的。。。但是并不能拒绝。。。心魔啊、、、 为何要搭建私有仓库 在进行docker的时候,一般都是使用共有仓库来下载相关的镜像文件,然后运行一个镜像的实例也就是运行一个容器,如下: 在使用docker run的时候,首先查找的是
企鹅号小编
2018/02/28
1.3K0
docker搭建私有仓库
Docker容器:“我竟可以是个饭盒?!”
假设程序员的工作是炒菜做米饭和甜点,那么image就是炒好的菜,container则是装饭菜的饭盒,Registry就是用来存放饭盒的冰箱,将打包好的饭盒传递给不同的人,这也就是K8S部署。假如docker有生命周期的话,那么image就是用来打包,container用来执行和启动的。
才浅Coding攻略
2022/12/12
3090
Docker容器:“我竟可以是个饭盒?!”
请立刻停止编写 Dockerfiles 并使用 docker init
几天前,Docker 推出了 docker init 的通用版本。我已经尝试过,发现它非常有用,迫不及待地想在日常生活中使用它。
wayn
2024/03/02
2590
请立刻停止编写 Dockerfiles 并使用 docker init
【愚公系列】2022年01月 Docker容器 Compose多容器启动
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 Compose 使用的三个步骤:
愚公搬代码
2022/12/01
1.1K0
【愚公系列】2022年01月 Docker容器 Compose多容器启动
Docker快速入门 02 构建镜像
创建一个包含应用程序及其依赖的目录结构。通常包括应用代码文件、配置文件以及运行所需的库文件等。例如,如果你的应用是一个简单的 Python Web 应用,你需要有 Python 脚本文件以及可能用到的第三方库的安装文件或者依赖清单(如 requirements.txt)。
90后小陈老师
2024/08/27
980
Docker快速入门 02 构建镜像
快速搭建编排上线项目实例
Flask + Redis + Docker-compose 快速搭建与上线简易版网络服务
PayneWu
2020/12/18
3270
Docker初体验,关于Dockerfile那点事
版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢
耕耘实录
2018/12/20
5780
docker连接两个容器
序 容器是用来提供服务的,每个容器都是运行一个进程,或许是一个web程序,或许是一个数据库服务,而在每个容器之间都是需要相互访问的,从而在这里构建一个python的程序,一个容器运行python的应用程序,一个容器用来运行redis服务,在应用程序中访问redis,具体架构如下: 运行redis的容器 运行redis的时候,步骤如下: 首先下载到redis的镜像,然后根据镜像运行一个镜像的实例,也就是redis这个实例,在其中需要注意的是,容器对外暴露的端口就是6379端口,从而在主机上对应监听一个
企鹅号小编
2018/02/26
1.5K0
docker连接两个容器
相关推荐
Docker初体验,向Docker Hub推送第一个本地镜像
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验