Docker容器配置

1、新建一个文件夹

文件夹列表

2、定义一个容器 Dockerfile

Dockerfile定义您的容器内环境中发生了什么。访问网络接口和磁盘驱动器等资源是在此环境中虚拟化的,与系统的其余部分隔离,因此您需要将端口映射到外部世界,并明确要将哪些文件“复制”到那个环境。但是,在完成这些之后,您可以期望在其中定义的应用程序的构建 Dockerfile在其运行的任何位置都完全相同。

编辑Dockerfile

# Use an official Python runtime as a parent imageFROM python:2.7-slim# Set the working directory to /appWORKDIR /app# Copy the current directory contents into the container at /appADD . /app# Install any needed packages specified in requirements.txtRUN pip install --trusted-host pypi.python.org -r requirements.txt# Make port 80 available to the world outside this containerEXPOSE 80# Define environment variableENV NAME World# Run app.py when the container launchesCMD ["python", "app.py"]

另外还有两个文件,一个是:requirements.txt,一个是:app.py

都要在同一目录下

当上述Dockerfile被内置到的图像,app.py和 requirements.txt是因为存在Dockerfile的ADD命令,并从输出app.py是通过HTTP得益于访问EXPOSE 命令。

# requirements.txt 内容如下
Flask
Redis
# app.pyfrom 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)

现在运行build命令

这会创建一个Docker镜像,我们将使用-t它来标记,因此它有一个友好的名称。

# 注意后面空格有个点
docker build -t friendlyhello .

Successfully tagged friendlyhello:latest

我构建的镜像跑到哪里去了?他们在你本地的镜像库里面:friendlyhello这个就是的。

root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
friendlyhello       latest              99fa0c4345cf        4 minutes ago       151MB
<none>              <none>              e21d979e3223        6 minutes ago       140MB
python              2.7-slim            46ba956c5967        12 days ago         140MB
hello-world         latest              e38bc07ac18e        5 weeks ago         1.85kB
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest#

如果有停止一个镜像,可能需要强制停止

root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker rmi 99fa0c4345cf --force
Untagged: friendlyhello:latest
Deleted: sha256:99fa0c4345cf9dd423945342f0d2fa4b460e36932edf58c0973fc991e5068d24
Deleted: sha256:f6071820b82680b2eb179a8bc5584451f6e69c2672ef3989040698fa36a66f13
Deleted: sha256:517f33d026cd6ba5ce5433aa4ee575a6e47aa228030c76fda1ffe6ded5abca10
Deleted: sha256:7564cd520ac57faa1032a04f6b7894c09fb08d4e6349c80377d9b74666135274
Deleted: sha256:585d0dbb4c234c5243d8098c175565dc8158968537f4904b5797f6b0aca88977
1
2
3
4
5
6
7
6、如果有故障了,就看看这里(针对Linux用户的故障排除)

代理服务器在启动并运行后可以阻止与您的网络应用程序的连接。如果您位于代理服务器的后面,请使用以下ENV命令为代理服务器指定主机和端口,将以下行添加到Dockerfile中:

# Set proxy server, replace host:port with values for your servers
ENV http_proxy host:port
ENV https_proxy host:port
1
2
3
代理服务器设置 
DNS错误配置可能会产生问题pip。您需要设置您自己的DNS服务器地址才能pip正常工作。您可能需要更改Docker守护程序的DNS设置。您可以/etc/docker/daemon.json使用dns密钥编辑(或创建)配置文件,如下所示:

{
  "dns": ["your_dns_address", "8.8.8.8"]
}
1
2
3
在上面的例子中,列表的第一个元素是你的DNS服务器的地址。第二项是Google的DNS,当第一项不可用时可以使用它。 
在继续之前,保存daemon.json并重新启动泊坞窗服务。 
sudo service docker restart 
一旦修复,重试运行build命令。

7、运行应用程序

运行应用程序,使用以下命令将计算机的端口4000映射到容器的已发布端口80 -p:下面这样就是运行成功了

root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker run -p 4000:80 friendlyhello
 * 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)

您应该看到Python正在为您的应用提供服务的消息http://0.0.0.0:80。但是该消息来自容器内部,它不知道你将该容器的端口80映射到4000,从而制作正确的URL http://localhost:4000。

那么我现在要从外部去访问它,如果是阿里云的话,需要开启安全组

通过ip:端口的方式来访问

后台运行
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker run -p 4000:80 friendlyhello
 * 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)
45.76.53.148 - - [17/May/2018 09:29:05] "GET / HTTP/1.1" 200 -
45.76.53.148 - - [17/May/2018 09:29:06] "GET /favicon.ico HTTP/1.1" 404 -

这种方式按Ctrl+C就退出了,不好,我们要在后台运行,只需要多一个-d就可以了。

root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker run -d -p 4000:80 friendlyheol 
ca08a914abea5290bb7cdf422c335b77738fc23e7f6c6ba596165a021daf4584
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest#

8、查看正在运行的容器(一个程序对应一个容器)

docker container ls

root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                  NAMES
ca08a914abea        friendlyhello       "python app.py"     About a minute ago   Up About a minute   0.0.0.0:4000->80/tcp   friendly_minsky
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest#

9、停止这个程序,结束这个进程

现在docker container stop用来结束这个过程,使用CONTAINER ID如下所示:

//查看container Id
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                  NAMES
ca08a914abea        friendlyhello       "python app.py"     About a minute ago   Up About a minute   0.0.0.0:4000->80/tcp   friendly_minsky
//结束
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker container stop ca08a914abea
ca08a914abea
//没有了
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@iZbp162mb58mqtz72o389nZ:~/docker/pythontest#

三、分享我的镜像

1.为了演示我们刚才创建的可移植性,我们上传我们构建的映像并在其他地方运行它。毕竟,当您想要将容器部署到生产环境时,您需要知道如何推送注册表。

注册表是存储库的集合,而存储库是图像的集合 - 有点像GitHub存储库,但代码已经创建。注册表上的帐户可以创建许多存储库。该dockerCLI使用公共注册表默认情况下。

注意:我们在这里使用Docker的公共注册表仅仅是因为它是免费和预先配置的,但有许多公共选项可供选择,甚至可以使用Docker Trusted Registry设置您自己的私有注册表。
2.使用您的Docker ID登录

如果您没有Docker帐户,请在cloud.docker.com注册一个帐户 。记下你的用户名。

2.1 登录到本地计算机上的Docker公共注册表。

root@iZbp162mb58mqtz72o389nZ:~# 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: xiongben
Password: 
Login Succeeded
root@iZbp162mb58mqtz72o389nZ:~#

2.2 标记图像

将本地映像与注册表中的存储库相关联的符号是 username/repository:tag。该标签是可选的,但建议使用,因为它是注册管理机构用于为Docker镜像提供版本的机制。为该上下文提供存储库并标记有意义的名称,例如 get-started:part2。这将图像放入get-started存储库并标记为part2。 
现在,把它放在一起来标记图像。docker tag image使用您的用户名,存储库和标签名称运行,以便将图像上传到您想要的目的地。该命令的语法是:

docker tag image username/repository:tag
1
运行如下:

root@iZbp162mb58mqtz72o389nZ:~# docker tag friendlyhello xiongben/get-started:part2
1
2.3 需要去创建一个docker的仓库

例如我创建了一个get-started。 
docke cloud

2.4 运行docker图像ls以查看新标记的图像。

root@iZbp162mb58mqtz72o389nZ:~# docker image ls
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
friendlyhello          latest              7f2dee16bc71        2 hours ago         151MB
xiongben/get-started   part2               7f2dee16bc71        2 hours ago         151MB
<none>                 <none>              e21d979e3223        2 hours ago         140MB
python                 2.7-slim            46ba956c5967        12 days ago         140MB
hello-world            latest              e38bc07ac18e        5 weeks ago         1.85kB

2.5 发布镜像

root@iZbp162mb58mqtz72o389nZ:~# docker push xiongben/get-started:part2
The push refers to repository [docker.io/xiongben/get-started]
bb1832784221: Pushed 
3769158c31ac: Pushed 
2ac6ade48cac: Pushed 
a40d037570f2: Mounted from library/python 
4e1a46391216: Mounted from library/python 
10dd6271862c: Mounted from library/python 
ba291263b085: Mounted from library/python 
part2: digest: sha256:ce25797c1fb3d95fc7393f015ea584be0c110e0469e186813ee755f41f76922a size: 1787
root@iZbp162mb58mqtz72o389nZ:~#

2.6 看下这样就成功了

root@iZbp162mb58mqtz72o389nZ:~# docker push xiongben/get-started:part2
The push refers to repository [docker.io/xiongben/get-started]
bb1832784221: Pushed 
3769158c31ac: Pushed 
2ac6ade48cac: Pushed 
a40d037570f2: Mounted from library/python 
4e1a46391216: Mounted from library/python 
10dd6271862c: Mounted from library/python 
ba291263b085: Mounted from library/python 
part2: digest: sha256:ce25797c1fb3d95fc7393f015ea584be0c110e0469e186813ee755f41f76922a size: 1787
root@iZbp162mb58mqtz72o389nZ:~#

四、从远程存储库中提取并运行图像

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

docker run -p 4000:80 username/repository:tag
1
那么来运行一下试一试:

root@iZbp162mb58mqtz72o389nZ:~# docker run -p 4000:80 xiongben/get-started:part2
 * 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)

访问一下: 
无论在哪里docker run执行,它都会将您的图像,Python以及所有依赖项从中拉出requirements.txt,然后运行您的代码。它们都在一个整洁的小包中一起旅行,并且您不需要在主机上安装任何Docker来运行它(意思是这样你的机器上安装的docker环境,你不需要再将程序传上去,直接从cloud上拉出来,就可以运行了)。
好啦,完成啦!


原文链接:https://blog.csdn.net/wd2014610/article/details/80354714

Docker创建自己的镜像库相关推荐

  1. docker搭建harbor私有镜像库

    创建harbor私有镜像库 一.部署准备: harbor软件包 在部署节点上: 1)解压harbor的软件包将harbor目录下所有文件发送到/opt/目录下 tar zxvf harbor-offl ...

  2. 使用 docker 创建自己的镜像

    docker run 命令 镜像(image):An image is a filesystem and parameters to use at runtime. It doesn't have s ...

  3. Linux下使用docker创建自己的镜像并提交到docker hub

    创建镜像,是在有基础镜像的前提下,开发者需要定义属于自己的独特的开发环境,比如在centos7上安装python3的完整环境,然后形成一个centos7+python3的镜像,这样,在下次使用,就不用 ...

  4. Docker创建springboot项目镜像pom及Dockerfile配置文件

    pom文件添加插件 <build><plugins><plugin><groupId>org.springframework.boot</grou ...

  5. docker公共存储库_Docker入门(2)——镜像结构和私有镜像库

    前面一篇教程里面,我们操练了一下如何在一台服务器上实际安装和使用docker.接下来我们来讨论一下和镜像有关的话题. Docker镜像的分层结构 前面我们也提到过,docker在宿主机上面并不是以一个 ...

  6. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  7. docker学习笔记(二)创建自己的镜像

    目录 image与container的可读写性 创建自己的镜像 dockerfile语法 创建自己的springboot项目image(Dockerfile方式) 推送镜像到镜像仓库(阿里云) 通过C ...

  8. 一文搞定docker创建私有镜像仓库(配置启动http和https方式私有仓库服务,查询、删除私有仓库镜像)

    docker除了使用公共镜像仓库之外,也可以创建私有镜像仓库.对于内部开发.测试.部署环境来说,是很有必要的.        如何创建私有镜像仓库服务呢?当然是以容器的方式啦! 1.拉取官方regis ...

  9. 国外docker镜像库加速方法

    国外docker镜像库往往速度慢,使用国内自己的镜像库进行建立镜像,pull的时候速度快,易于使用与更新. 1.首先在主机上安装docker-client,方法参照https://docs.docke ...

最新文章

  1. 从技术谈到管理,把系统优化的技术用到企业管理
  2. Cinder AZ 与 Nova AZ 的同步问题
  3. 关于windows service不能访问网络共享盘(NetWork Drive)的解决方案
  4. WWDC2019:iPad全新发布
  5. Leetcode 226. 翻转二叉树 (每日一题 20210819)
  6. 牛客15555 1 + 2 = 3?
  7. NavigationDuplicated vue-router 路由重复点击报错的问题
  8. php jumppage加载网址,php 分页类 扩展代码
  9. appium-andriod自动化实现注意项
  10. php sql语句计算距离,sql计算经纬度得出最近距离的公式
  11. elipse手机设备显示Target unknown或者offline解决方法
  12. data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取
  13. java程序包怎么更新,从Java 8升级到Java 11-软件包sun.util不存在
  14. IATF16949认证辅导,FMEA和CP的顾客额外批准,对供应链安全的管理(适用时)
  15. echarts3D使用时会遇到的问题(版本低)
  16. 微信小程序 下拉刷新 上拉触底分页
  17. 【Windows】键盘禁用(屏蔽)Win快捷键
  18. 有备而来! 解密DEVELOP德凡为何进入中国市场?
  19. linux 虚拟光驱软件,在Linux操作系统下使用虚拟光驱的方法
  20. Android WebView 加载https网页白屏,空白解决方案

热门文章

  1. 快速入门:使用 Docker 运行 SQL Server 容器映像
  2. 虚拟机系列 | JVM类加载机制
  3. MySQL基础篇(06):事务管理,锁机制案例详解
  4. Reveal.js:把你的 Markdown 文稿变成 PPT
  5. imagej链接资源
  6. ElementUI + express实现头像上传及后台图片保存
  7. introduce of servlet and filter
  8. webpack--插件配置:处理HTML中的图片(七)
  9. Springsecurity搭建自定义登录页面
  10. 彻底理解mysql服务器的字符集转换问题