Docker-创建和分享应用(3)
Dockerfile定义容器内环境中发生的事情。对网络接口和磁盘驱动器等资源的访问在此环境中进行虚拟化,该环境与系统的其他部分隔离,因此您需要将端口映射到外部世界,并具体说明要“复制”哪些文件到该环境。但是,在执行此操作之后,您可以预期Dockerfile在此处定义的应用程序的构建 在其运行的任何位置都完全相同。
1. 快速测试Docker环境是否可用
docker run hello-world
2. 创建Dockerfile文件
在一个空目录中创建一个名为Dockerfile的文件,内容如下:
# 使用官方的Python环境作为父镜像
FROM python # 设置工作目录为 /app
WORKDIR /app # 拷贝当前目录下的文件到容器的/app目录下
COPY . /app # 在容器中运行下面命令安装 requirements.txt中的软件
RUN pip install --trusted-host pypi.python.org -r requirements.txt # 暴露80端口到容器外部
EXPOSE 80 # 定义一个环境变量
ENV NAME World # 当容器启动时,运行'python app.py'
CMD ["python", "app.py"]
3. 在该目录下继续创建一个Flask应用程序和安装文件清单
app.py
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
Flask
Redis
4. 构建应用程序
我们准备构建应用程序。确保您仍处于新目录的顶层。这是ls应该显示的内容:
$ ls
Dockerfile app.py requirements.txt
创建一个Docker镜像,我们将使用该--tag或者-t选项命名镜像
docker build --tag=friendlyhello .
查看创建的镜像
root@node1 docker]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
friendlyhello latest 67bd580f29b8 21 seconds ago 937MB
Linux用户的故障排除
- 代理服务器设置
代理服务器可以在Web应用程序启动并运行后阻止其连接。如果您位于代理服务器后面,请使用以下ENV命令将以下行添加到Dockerfile中,以指定代理服务器的主机和端口:
# Set proxy server, replace host:port with values for your servers
ENV http_proxy host:port
ENV https_proxy host:port
- DNS设置
DNS配置错误可能会产生问题pip。您需要设置自己的DNS服务器地址才能pip正常工作。您可能想要更改Docker守护程序的DNS设置。您可以/etc/docker/daemon.json使用dns密钥编辑(或创建)配置文件,如下所示:
{
"dns": ["your_dns_address", "8.8.8.8"]
}
在上面的示例中,列表的第一个元素是DNS服务器的地址。第二项是Google的DNS,可在第一项无法使用时使用。
在继续之前,请保存daemon.json并重新启动docker服务。
sudo service docker restart
修复后,重试运行该build命令。
5. 运行应用程序
运行应用程序,使用以下方法将计算机的端口4000映射到容器的已发布端口80,-p是将容器的端口Publish到外部的意思。
docker run -p 4000:80 friendlyhello
在浏览器访问‘http://localhost:4000’即可访问到内部的应用程序,按Ctrl+c即可结束应用程序。

后台以分离模式运行应用程序,-d就是在后台运行镜像,并打印出容器ID
docker run -d -p 4000:80 friendlyhello
6. 停止应用程序所在容器的运行
docker container stop ID
7. 分享镜像
如果没有Docker帐户,请在hub.docker.com上注册一个帐户 ,并记下的用户名。
1. 在本地的计算机上登录
docker login
2. 将镜像打上标签,该命令的语法是:
docker tag image username/repository:tag
比如我的登录名为scottcho,将版本库命名为flask,tag为v1
[root@node1 docker]# docker tag friendlyhello scottcho/flask:v1 [root@node1 docker]# docker image ls scottcho/flask
REPOSITORY TAG IMAGE ID CREATED SIZE
scottcho/flask v1 67bd580f29b8 30 minutes ago 937MB
3. 发布镜像
docker push scottcho/flask:v1
在docker hup上可以看见所创建的镜像

4. 在任何计算机上可以运行分享的镜像
如果映像在本地不可用,则Docker会从存储库中提取映像。
docker run -p 4000:80 scottcho/flask:v1
查看容器内的改变信息
创建一个容器,会在容器的对应的镜像上增加一个可写层,镜像部分是只读的。通过 diff命令可以看出改变的信息。如:
[root@wls12c ~]$ docker run -i -t centos /bin/bash
[root@224de7986c5f /]# touch demo.ext
[root@224de7986c5f /]# echo hello docker >demo.ext
[root@224de7986c5f /]# rm -rf anaconda-post.log
[root@224de7986c5f /]# exit
exit
[root@wls12c ~]$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
224de7986c5f centos "/bin/bash" seconds ago Exited () seconds ago desperate_curie
[root@wls12c ~]$ docker diff 224d
D /anaconda-post.log
A /demo.ext
C /root
A /root/.bash_history
说明:每行代表一个变动的文件或目录。其中 A 表示新增、C表示被修改、D表示被删除
主机和容器之间的文件拷贝
容器--->主机
[root@wls12c ~]$ docker exec -t -i 9f bin/bash
[root@9f49397623ad /]# cat demo.txt
hello
[root@9f49397623ad /]# exit
exit
[root@wls12c ~]$ docker cp 9f:/demo.txt /test
[root@wls12c ~]$ cat /test/demo.txt
hello
主机-->容器
[root@wls12c ~]$ cp ~/1.txt /var/lib/docker/aufs/mnt/9f49397623ade7dfd2beb4d84454cbdb9878a4b22a2bab2e8b5db72bcffe60a0/test [root@wls12c ~]$ docker exec -t -i 9f /bin/bash
[root@9f49397623ad /]# ls /test
.txt
重命名容器
[root@wls12c ~]$ docker rename stoic_meitner demo
Docker-创建和分享应用(3)的更多相关文章
- Docker 创建镜像、修改、上传镜像
Docker 创建镜像.修改.上传镜像 –创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 一.创建镜像 创建镜像有很多方法,用户可以从 Do ...
- Docker创建镜像以及私有仓库
Docker的安装及镜像.容器的基本操作详见博客https://blog.51cto.com/11134648/2160257下面介绍Docker创建镜像和创建私有仓库的方法,详细如下: 创建镜像 创 ...
- Docker创建支持ssh服务的容器和镜像
原文链接:Docker创建支持ssh服务的容器和镜像 1. 这里使用的centos作为容器,所以首先下载centos的images # sudo docker pull centos 2. 下载后执行 ...
- Docker创建MySQL集装箱
原文链接:Docker创建MySQL集装箱 这样做的目的是创建一个MySQL的image,出来的容器里自己主动启动MySQL服务接受外部连接 步骤: 1. 首先创建一个文件夹并在文件夹下创建一个Doc ...
- Docker 创建 Crucible4.6.1 以及与 Crowd3.3.2 实现 SSO 单点登录
目录 目录 1.介绍 1.1.什么是 Crucible? 2.Crucible 的官网在哪里? 3.如何下载安装? 4.对 Crucible 进行配置 4.1.破解 Crucible 第一步 4.2. ...
- Docker 创建 Crowd3.3.2 以及打通 Jira Software7.12.3和Confluence6.12.2 SSO 单点登录
目录 目录 1.介绍 1.1.什么是Crowd? 2.Crowd 的官网在哪里? 3.如何下载安装? 4.对 Crowd 进行配置 4.1.破解 Crowd 第一步 4.2.破解 Crowd 第二步, ...
- Docker 创建 Bamboo6.7.1 以及与 Crowd3.3.2 实现 SSO 单点登录
目录 目录 1.介绍 1.1.什么是 Bamboo? 2.Bamboo 的官网在哪里? 3.如何下载安装? 4.对 Bamboo 进行配置 4.1.获取授权许可 4.2.一般配置 4.3.数据库配置 ...
- Docker 创建 Jira Core(Jira SoftWare) 7.12.3 中文版
目录 目录 1.介绍 1.1.什么是 JIRA Core? 1.2.什么是 JIRA SoftWare 2.JIRA 的官网在哪里? 3.如何下载安装? 4.对 JIRA 进行配置 4.1.JIRA ...
- Docker 创建 Confluence6.12.2 中文版
目录 目录 1.介绍 1.1.什么是Confluence? 2.Confluence的官网在哪里? 3.如何下载安装? 4.对 Confluence 进行配置 4.1.设置 Confluence 4. ...
- Docker创建JIRA 7.2.4中文破解版
目录 目录 1.介绍 1.1.什么是JIRA? 2.JIRA的官网在哪里? 3.如何下载安装? 4.对JIRA进行配置 4.1.打开浏览器:http://localhost:20012 4.2.JIR ...
随机推荐
- python获取上一个月第一天0点的unix时间戳
这两天做统计,需要用到当月第一天0点0分0秒的unix timestamp,上个月第一天0点的unix时间戳,三个月前月第一天的0点的Unix时间戳,六个月前当月第一天的0点的Unix时间戳,现在整理 ...
- SAP MM01 创建物料主数据 [关注公众号后回复MM01获取更多资料]
操作内容 物料主数据,适用于所有有物料编码物料相关信息的系统维护 业务流程 新项目设计冻结后—M公司 PD用-物料编码申请表D-BOM Material Number Application部门内部 ...
- git patch 使用
使用git的时候,需要删除几个id,会对到之前的代码,但又想保留现在的代码,以便后面从新合并,所以就将现在的代码打包成patch,留到下次合并. 参考链接 http://www.jianshu.com ...
- e809. 在菜单中使菜单项分开
A separator typically appears as a horizontal line. It is used to group related sets of menu items i ...
- C# 符合备忘录
~ 按位求补符:! 非逻辑运算符:% 求余运算符:^ 异或位运算符:& 且位运算符:| 或位运算符:* 既可以用作乘法符号,还可以表示为指针:+ 表示数学运算符相加:= 用来表示赋值操作:\ ...
- (转)在公司的局域网使用git或github 设置代理
目录 [hide] 1 生成SSH Key 2 git使用http访问 3 git使用ssh进行访问 在公司这样的局域网环境中,向要走网络必须走HTTP代理出去.不能直接访问外面的服务,所以这样安全了 ...
- max导出模型插件
首先,需要做好如下的准备工作:1. 安装一个完整版本的3D MAX与Visual Stdio.我安装的是3D MAX 2012,最好是找一个完整的版本,因为完整的版本中有很多的学习资料与sdk供学习, ...
- 安装PHP5 PHP7
安装 PHP5 PHP官网www.php.net • 当前主流版本为5./7.1 • cd /usr/local/src/ • wget http://cn2.php.net/distribution ...
- SVN中图标符号的含义
黄色感叹号(有冲突): 这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人的 ...
- GridView如何将分页数据全部导出为EXCEL?
GRIDVIEW分页状态下将全部数据导出 protected void Button2_Click(object sender, EventArgs e)//按button2将gridview将数据导 ...