Docker教程2 - 容器的使用和Docker的登录
容器()的使用
本篇会介绍如何使用容器,创建一个的容器(),并生成,发布和浏览
官方文档
1. 基本配置,创建和浏览
首先,先创建三个文件,分别是:,.txt,app.py
1.1 文件是当前指定的容器()的配置,内容如下:
# 使用官方Python运行时 - 作为当前的镜像
FROM python:2.7-slim# 设置工作目录 /app
WORKDIR /app# 拷贝当前目录内容到容器目录/app
ADD . /app# 安装需要的安装包从requirements.txt获取
RUN pip install -r requirements.txt# 在容器(Container)外,使用80端口作为外界访问
EXPOSE 80# 定义环境变量
ENV NAME World# 当容器(Container)启动时运行app.py
CMD ["python", "app.py"]
1.2 .txt文件是依赖的库和引用,其中flask是的一个web框架,内容如下:
Flask
Redis
1.3 app.py文件是flask配置一个网站的最基本代码,内容如下:
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 = "cannot connect to Redis, counter disabled"html = "Hello {name}!
" \"Hostname: {hostname}
" \"Visits: {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)
在命令行()下,运行ls你会看到如下三个文件
$ ls
Dockerfile app.py requirements.txt
1.4 生成镜像
运行以下命令,创建一个镜像( image),并且加一个 -t 参数用于设置一个友好的命名
docker build -t friendlyhello .
那你上面创建的镜像在哪里了?答案是:在你的电脑的本地的 image 里,通过以下命令可以查看
$ docker imagesREPOSITORY TAG IMAGE ID CREATED
friendlyhello latest 7554c6a24c1f About an minute ago
1.5 运行应用
运行你的应用,映射你电脑机器的4000端口到容器()的80端口,使用参数 -p
docker run -p 4000:80 friendlyhello
然后在你的浏览器上就可以运行 :4000 的网站,效果如下图显示:
当然,你也可以使用 curl 来访问了,获取的是页面源码
$ curl http://localhost:4000<h3>Hello World!h3><b>Hostname:b> 8fc990912a14<br/><b>Visits:b> <i>cannot connect to Redis, counter disabledi>
我们还有更好的方式,在后台进程中运行容器(),只需要添加一个 -d 参数,d表示
docker run -d -p 4000:80 friendlyhello
在后进程中运行容器会产生一个很长的 ID(容器ID),但是通过以下命令时,只显示缩写版的 ID,
通过命令行查看,
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
1.6 停止容器
Ok,相当到这里,大家明白了,使用是超级简单,没有复杂的配置,你就可以创建一个(容器),而且运行的很好,
那现在,我们停掉这个容器吧
docker stop 1fa4ab2cf395
2. 分享你创建的镜像
为了证明的可移植性,我们现在就上传刚才创建的镜像,并且让它可以在任何地方运行。
归根究底,你的最终目的是要发布到生产环境的。
这里有几点你必须要知道的知识,分别是:
a. 一个是一个多个(仓库)的集合
b. 一个是多个(镜像)的集合
c. 默认情况下,是的,如果想要的,请看 这里
2.1 登录
如果你还没有账号,请注册一个,
如果你已经注册完了,现在就开始登录
docker login
然后,我们给刚才创建的镜像(image)打一个tag,tag虽然是可选的,但是我们建议,你给镜像创建一个tag,
因为大部分的时候,我们使用git开发项目,在某一个阶段都做了一个tag,有意义的tag名称,便于标识该版本号。
的镜像的tag也是一样的,它的格式是::tag,创建tag使用命令 tag
例如,命令如下
docker tag friendlyhello victor/first-repo:firsttag1
然后运行 查看所有的镜像,也包括tag在里面
$ docker imagesREPOSITORY TAG IMAGE ID
friendlyhello latest 7554c6a24c1f
victor/first-repo firsttag1 7554c6a24c1f
python 2.7-slim 451c85955bc2
......
除了使用 也可以使用 image ls
2.2 发布镜像
上传你打完tag的镜像(image)到库
docker push victor/first-repo:firsttag1
这个过程第一次有点慢,以后会好些,取决于你的网速。
一旦上传完毕,你就可以登录 Hub 如果你当前浏览器已经登录了账号,
它会自动跳转到你的仓库面板,反之,你需要登录。
从现在开始,你就可以在任何机器上运行你的应用,通过 fun 命令, 如下:
docker run -p 4000:80 victor/first-repo:firsttag1
如果这个镜像不存在本机上,会自己pull这个库下来
请注意:
如果你没有在这些命令中指定 ``` :tag ``` 部分,在你生成和运行镜像时,最新的tag ``` :latest ``` 会被默认使用。如果没有指定tag,Docker会使用最新的镜像版本
注意这里总结了一些本篇文章提到的命令,也有一些是额外增加的
docker build -t friendlyname . # 使用仓库的Dockerfile文件,创建一个镜像(image)
docker run -p 4000:80 friendlyname # 运行 "friendlyname" 镜像,并且映射主机端口4000 到容器端口 80
docker run -d -p 4000:80 friendlyname # 跟上一条一样,但是,此条命令是把friendlyname镜像运行在分离进程中
docker ps # 查看正在运行的所有的容器的列表
docker stop <hash> # 优雅的停止运行指定的容器
docker ps -a # 查看所有的容器列表,包括没有在运行的
docker kill <hash> # 强行关闭指定的容器
docker rm <hash> # 从这台机器上移除指定的容器
docker rm $(docker ps -a -q) # 从这台机器上移除所有的容器
docker images -a # 显示这台机器上的所有镜像
docker rmi # 从本机移除指定的镜像
docker rmi $(docker images -q) # 从本机移除所有的镜像
docker login # 使用Docker credentials 登录到CLI会话
docker tag username/repository:tag # 给镜像打一个tag,为了可以上传到remote的registry
docker push username/repository:tag # 上传打完tag的镜像到remote的registry
docker run username/repository:tag # 从registry运行指定的镜像