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" 40 seconds ago Exited (0) 3 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 1.txt
重命名容器
[root@wls12c ~]$ docker rename stoic_meitner demo
转载于:https://www.cnblogs.com/zydev/p/5803461.html
Docker-创建和分享应用(3)相关推荐
- 使用docker创建属于你的ChatGPT
使用docker创建属于你的ChatGPT 今天来分享一个ChatGPT 网页应用-ChatGPT Next Web,它可以让你随时随地方便使用ChatGPT! 如果想了解更多关于VPS和ChatGP ...
- Docker创建自己的github(Gitea)
查看全文 http://www.taodudu.cc/news/show-168989.html 相关文章: maven打包导入本地jar包 Spring boot 文件上传大小限制 liunx系统m ...
- 傲游浏览器怎么创建笔记 傲游浏览器笔记创建方法分享
和某些浏览器不同,傲游浏览器中的笔记功能拥有极清爽.极简约.极免费等三大特性,并因此获得了不少用户的青睐.那么,在傲游浏览器中该怎么创建笔记呢?下面小编就来分享一下傲游浏览器笔记创建的方法,有需要的朋 ...
- Centos7使用Docker创建Oracle11g
Centos7使用Docker创建Oracle11G 实例名(SID ) orcl 管理员帐号 system/admin 字符集 utf-8 端口 1521 首先拉取镜像文件( ...
- 使用 docker 创建自己的镜像
docker run 命令 镜像(image):An image is a filesystem and parameters to use at runtime. It doesn't have s ...
- python认证考试mac_Mac OS 平台使用 Python 和 Docker 创建测试用 Https Server
Mac OS 平台使用 Python 和 Docker 创建测试用 Https Server Flask 是我很喜欢的 Python Web Framework,最近需要测试 Https 通信,需要创 ...
- Docker创建私有仓库
Docker创建私有仓库 1.安装docker docker私有库本身就是一个docker镜像,所以,首先要安装docker,然后启动这个镜像.关于安装docker的过程,参考另外一个文章: 安装do ...
- docker 创建容器时指定容器ip
docker 创建容器时指定容器ip Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定. 在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定i ...
- docker创建mysql容器
docker创建mysq容器 1.在docker镜像仓库中搜索mysql镜像 docker search mysql 2.下载镜像 # 1.不指定版本,下载的镜像是最新的 latest版本 docke ...
- Docker创建容器时指定IP
Docker创建容器时指定IP --net extnetwork --ip 172.10.0.2
最新文章
- Unity NetWork
- 日历控件的android代码,Android日历控件PickTime代码实例
- php curl 数据采集 空,PHP curl从网站返回空数组的数据
- linux修改可用的最大进程数量和可打开的最大文件数
- 左边任务栏_Windows10 系统桌面底部的任务栏在侧边了怎么还原
- System类的概述和方法使用
- 如何使用 volatile, synchronized, final 进行线程间通信
- mysql中更改字符集为utf8mysql中文输入不了问题解决
- 软件测试——软件开发过程
- 常用的多列等高布局收藏
- IIS安装前已经安装了.NET Framework,安装后如何启用.NETFramework
- 计算机网络医院拓扑图方案设计,【方案】某医院计算机网络综合布线系统设计...
- Sliverlight中xap文件详解
- Windows 10 系统优化脚本大全
- macfee怎么生成释放代码_批处理应用:使用FLASHGET检查Mcafee SuperDat更新
- 计算机每次启动都要系统修复,win7电脑每次开机都要重启路由器才能上网的修复方法...
- 10个提供Logo设计灵感的创意网站
- Java 使用 throw 抛出异常
- 《“己学”发略》发略
- 抓饭直播开拓新体育文化,让运动无限精彩
热门文章
- win8 开发之旅(3) --五子棋游戏开发 前奏
- 【交往智慧】005.做一个愿意聆听的人
- 按钮跳转到其他ui界面_《明日方舟》UI/UX设计复盘
- 实现ip数据包抓取并分析_一些网站https证书出现问题的情况分析
- python是动态语言_Python是动态语言:动态添加或删除属性、方法
- linux命令mov,汇编指令_Y-linuz-linux-w_新浪博客
- vit-pytorch
- Python机器学习:线型回归法02最小二乘法
- math属于python标准库吗_python标准库《math》
- java json重命名,eclipse中java变量怎么变成json格式的编码?