docker轻松使用二 docker常用基础命令
查看docker信息
## 显示docker命令列表 docker docker container --help ## 显示Docker版本和信息 docker --version docker version docker info ## 测试docker docker run hello-world ## docker映像列表 docker image ls ## 列出Docker容器(运行、全部、全部处于安静模式) docker container ls docker container ls --all docker container ls -aq
使用定义容器 Dockerfile
在本地计算机上创建一个空目录。将目录(cd)更改为新目录,创建一个文件命名为
Dockerfile,将以下内容复制并粘贴到该文件中,然后保存。记下解释新Dockerfile中每个语句的注释。
# 使用官方Python运行时作为父映像 FROM python:2.7-slim # 将工作目录设置为/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 # 在容器启动时运行app.py CMD ["python", "app.py"]
这Dockerfile是指我们尚未创建的几个文件,即 app.py和requirements.txt。让我们创建下一个。
应用程序本身
再创建两个文件,requirements.txt和app.py将它们放在同一个Dockerfile文件夹中。这完成了我们的应用程序,您可以看到它非常简单。当上述Dockerfile被内置到的映像,app.py并且 requirements.txt是因为存在Dockerfile的COPY命令,并从输出app.py是通过HTTP得益于访问EXPOSE 命令。
requirements.txt
Flask Redis
app.py
from flask import Flask # flask是个超轻量级的web框架 from redis import Redis, RedisError # Redis是个基于内存亦可持久化的日志型、Key-Value数据库 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)
构建应用程序
我们准备构建应用程序。确保您仍处于新目录的顶层。这是ls应该显示的内容:
$ ls Dockerfile app.py requirements.txt
现在运行build命令。这将创建一个Docker镜像,我们将使用该–tag选项命名。也可以使用-t,如果你想用较短的选项。
docker build --tag=friendlyhello .
你建立的映像哪里?它位于您机器的本地Docker镜像注册表中:
$ docker image ls REPOSITORY TAG IMAGE ID friendlyhello latest 326387cea398
注意标签是如何默认的
latest。标签选项的完整语法类似于
--tag=friendlyhello:v0.0.1。
运行应用程序
运行应用程序,使用以下方法将计算机的端口4000映射到容器的已发布端口80 -p:
docker run -p 4000:80 friendlyhello docker run -d -p 4000:80 friendlyhello # -d 后台分离模式
应该看到Python正在为您的应用提供服务的消息http://0.0.0.0:80。但是该消息来自容器内部,它不知道您将该容器的端口80映射到4000,从而生成正确的URL http://localhost:4000。
在Web浏览器中转到该URL以查看在网页上提供的显示内容。
您获得应用程序的长容器ID,然后被踢回终端。您的容器正在后台运行。您还可以看到缩写的容器ID docker container ls(并且在运行命令时两者都可以互换):
$ docker container ls CONTAINER ID IMAGE COMMAND CREATED 1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
请注意CONTAINER ID匹配的内容http://localhost:4000。
现在docker container stop用来结束这个过程,使用CONTAINER ID如下:
docker container stop 1fa4ab2cf395
使用您的Docker ID登录
登录本地计算机上的Docker公共注册表。
$ docker login
标记图像
将本地映像与注册表上的存储库相关联的表示法是 username/repository:tag。标签是可选的,但建议使用,因为它是注册管理机构用来为Docker镜像提供版本的机制。为存储库提供存储库和标记有意义的名称,例如 get-started:part2。这会将图像放入get-started存储库并将其标记为part2。
现在,把它们放在一起来标记图像。docker tag image使用您的用户名,存储库和标记名称运行,以便将图像上载到所需的目标位置。该命令的语法是:
docker tag image username/repository:tag
例如:
docker tag friendlyhello alivon/get-started:part2 # alivon是dockerhub用户名
运行docker image ls以查看新标记的图像。
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE friendlyhello latest d9e555c53008 3 minutes ago 195MB gordon/get-started part2 d9e555c53008 3 minutes ago 195MB python 2.7-slim 1c7128a655f6 5 days ago 183MB ...
发布图像
将标记的图像上传到存储库:
docker push username/repository:tag
完成后,此上传的结果将公开发布。如果您登录到Docker Hub,则会看到其中的新图像及其pull命令。
从远程存储库中拉出并运行映像
从现在开始,您可以使用docker run以下命令在任何计算机上使用和运行您的应用程序:
docker run -p 4000:80 username/repository:tag
如果映像在本地不可用,则Docker会从存储库中提取映像。
$ docker run -p 4000:80 gordon/get-started:part2 Unable to find image 'gordon/get-started:part2' locally part2: Pulling from gordon/get-started 10a267c67f42: Already exists f68a39a6a5e4: Already exists 9beaffc0cf19: Already exists 3c1fe835fb6b: Already exists 4c9f1fa8fcb8: Already exists ee7d8f576a14: Already exists fbccdcced46e: Already exists Digest: sha256:0601c866aab2adcc6498200efd0f754037e909e5fd42069adeff72d1e2439068 Status: Downloaded newer image for gordon/get-started:part2 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
命令回顾
docker build -t friendlyhello . # 使用此目录的Dockerfile创建映像 docker run -p 4000:80 friendlyhello # 运行“friendlyhello”映射端口4000到80 docker run -d -p 4000:80 friendlyhello # 同上,但在后台分离模式 docker container ls # 列出所有运行容器 docker container ls -a # 列出所有容器,包括那些没有运行的容器 docker container stop <hash> # 优雅地停止指定的容器 docker container kill <hash> # 强制关闭指定容器 docker container rm <hash> # 从此机器中移除指定的容器 docker container rm $(docker container ls -a -q) # 删除所有的容器 docker image ls -a # 列出这台机器上的所有图像 docker image rm <image id> # 从此机器中删除指定的映像 docker image rm $(docker image ls -a -q) # 删除此机器上的所有图像 docker login # 使用Docker凭证登录这个CLI会话 docker tag <image> username/repository:tag # 标签<图像>上传至注册表 docker push username/repository:tag # 上传带标签的图片到注册表 docker run username/repository:tag # 从注册表运行映像
- Docker安装教程Centos7和Docker基础使用常用命令
- linux基础及常用命令的使用
- docker 使用教程(2)常用命令
- docker常用命令的使用
- Docker的常用命令(包含一些nova-docker中的使用命令)
- Docker学习之常用的基础命令总结
- Docker - 常用基础命令
- docker常用命令使用样例
- 3.Docker的使用--常用命令
- ubuntu下docker安装跟基础使用命令
- linux 一些常用的命令 使用 基础
- Docker - 常用基础命令
- Docker安装使用及常用命令
- docker基础命令使用
- windows下使用docker的常用命令
- docker常用命令以及dockerfile使用
- docker的常用命令2--容器的使用
- linux 目录结构+常用命令+压缩命令+vim使用+及一些基础知识(非常好)
- [SQL基础]SQL常用命令使用方法
- 如何使用 docker 及常用命令(一)