image和container介绍

一个image是一个可被docker执行的包,它包括程序运行的所有东西,包括代码,运行时,库,环境变量和配置文件。

一个container是image在内存中的运行实例,一个image可以产生多个container实例。

docker container命令

查看docker版本

# docker --version
Docker version 18.09.2, build 6247962

使用docker version(不带--)会得到更详细的版本信息.

查看docker状态

docker info

测试docker安装

docker run hello-world测试运行hello-world image.

docker image lsdocker images列出所有已下载的image.

docker container ls --all列出所有container.

构建docker app

app.dockerfile

# use an official python runtime as a parent image
FROM python:2.7-slim
# set the working directory to /app
WORKDIR /app
# copy the current directory contents into the container at /app
COPY . /app
# install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# make port 8001 available to the world outside this container
EXPOSE 8001
# define enviornment veriable
ENV NAME World
# run app.py when the container launches
CMD ["python", "app.py"]

docker build -f ./app.dockerfile --tag=friendlyhello .

-f参数指定dockerfile的位置,--tag参数指定输出的docker image名称.

构建的image文件可能依赖于别的父image.

容器内的工作目录是/app,这个文件还把当前构建目录的所有文件COPY到了容器内的/app文件夹下。这里还差两个文件app.pyrequirements.txt。等下创建它们,它们也应该跟dockerfile在一起以便于等会COPY进容器。

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

运行docker app

docker run -p 8001:8001 friendlyhello

如果端口被占用,使用命令lsof -i tcp:8001查看本机8001端口被哪个应用占用.

后台运行docker app

docker run -d -p 8001:8001 friendlyhello

-d指定容器以deamon方式运行,上述命令会返回一长串容器ID.

这里将外部的8001端口映射到container中的8001端口,访问http://localhost:8001/就能得到返回内容。如果启动命令的端口部分改为-p 8080:8001,那就需要访问http://localhost:8080/。container内中的服务,只监听8001,只能通过修改代码监听的端口和dockerfile暴露出的端口。

查看container内的文件

对运行的docker,使用docker提供的exec命令docker exec <container ID> <Command>在容器内执行ls命令,就可以查看到container内的内容,当前这个image运行后的container中有app.dockerfile,app.pyrequirements.txt三个文件。

退出docker app

在前台运行时,使用Ctrl + C即可结束进程.

也可以使用container的stop命令docker container stop <Container NAME or ID>.查看当前运行container的命令是docker container ls,要查看所有状态的container,加-a参数.

给docker app添加tag

推荐添加tag的格式是docker tag image username/repository:tag.

示例:

docker tag friendlyhello cchenyang/get-started:part2

cchenyang是docker hub的username,之后的get-started:part2就是把image friendlyhello改名为get-started并将默认标记latest改为part2.这个标记习惯用法是设置为repository的版本号.

分享image

docker login登录docker hub,将添加tag后的image push到docker hub中docker push cchenyang/get-started:part2

之后,就可以在任何有网络并安装docker的机器中使用docker run -p 8001:8001 cchenyang/get-started:part2获得这个image并运行~!!

系列导航

docker入门2-docker service

docker入门3-docker swarm

docker入门4-docker stack

docker入门1-docker container的更多相关文章

  1. docker入门_image、container相关命令

    docker入门_image.container相关命令 镜像仓库服务.镜像仓库.镜像相关概念 镜像仓库服务:docker镜像仓库服务.阿里云镜像服务 镜像仓库:docker镜像仓库服务中会有很多仓库 ...

  2. Docker入门2------容器container常规操作

    参考转自 https://www.cnblogs.com/jsonhc/p/7760144.html Docker的container 运行一个container的本身就是开启一个具有独立namesp ...

  3. Docker入门 - 006 Docker 多种数据库的安装

    Docker 安装 MySQL 查找Docker Hub上的mysql镜像 root@VM_16_14_centos ~# docker search mysql INDEX NAME DESCRIP ...

  4. Docker入门 - 004 Docker 容器使用

    Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. docker 可以通过命令 docker command -- ...

  5. Docker入门 - 003 Docker 实例

    Docker Hello World Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序. 输出Hello world runoob@runoob: ...

  6. Docker入门之一Docker在Window下安装

    最近这几年,各个大公司都在打造自己的云平台,什么阿里云,华为云,腾讯云等等云,以及各种的微服务架构,其实在这当中Docker容器技术算是一个很重要的角色. 一.下载 在下载之前首先检查一下自己的电脑是 ...

  7. Docker入门——理解Docker的核心概念

    1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...

  8. 【Docker入门】Docker的常用命令

    ​ ​ 了解和安装完docker之后,我们学习一下docker的常用命令就和当初学linux命令一样,放心命令其实大致相同只不过细节不同. 一.Docker启动类命令 1.启动docker:syste ...

  9. Docker入门-搭建docker私有仓库

    Docker Hub 目前Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量超过15000个镜像.大部分需求都可以通过在Docker Hub中直接下载镜像来使用. 注册登录 可 ...

  10. Docker入门 - 005 Docker 容器连接

    Docker 容器连接 前面我们实现了通过网络端口来访问运行在docker容器内的服务.下面我们来实现通过端口连接到一个docker容器 网络端口映射 我们创建了一个 python 应用的容器. do ...

随机推荐

  1. windows如何解决Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'

    问题再现与解读 首次,使用 java 命令+任意参数 都会报这个错误,最典型的就是java -version 解读一下这个报错信息,注册表路径 Software\JavaSoft\Java Runti ...

  2. Java 并发实践 — ConcurrentHashMap 与 CAS

    转载 http://www.importnew.com/26035.html 最近在做接口限流时涉及到了一个有意思问题,牵扯出了关于concurrentHashMap的一些用法,以及CAS的一些概念. ...

  3. xctf-web supersqli

    单引号注入,用order by查到了两个column.用union select的时候发现select关键字被过滤了 用分号尝试堆叠注入显示出了两张表 分别查询字段 flag在表19198109311 ...

  4. Python操作adb命令脚本

    一.脚本代码(有错误,抓紧改进中) import os import datetime date1=datetime.datetime.now().strftime('%Y%m%d') date2=d ...

  5. (一) BIO,NIO, 阻塞,非阻塞,你懂了吗

    一般来说,一个输入操作通常包括两个阶段: .等待数据准备好: .从内核向进程复制数据 是否同步的判断依据是: 是否 针对的 整个过程,即2个阶段,是否有阻塞 是否阻塞的判断依据是: 按 程序等待消息通 ...

  6. Django学习路15_创建一个订单信息,并查询2020年\9月的信息都有哪些

    在 app5.models.py 中添加一个 Order 表 class Order(models.Model): o_num = models.CharField(max_length= 16 ,u ...

  7. win10在html上运行java的applet程序

    Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同. 含有Applet的网页的HTML文件代码中部带有 和 ...

  8. PHP 中的字符串变量

    PHP 字符串变量 字符串变量用于存储并处理文本. PHP 中的字符串变量 字符串变量用于包含有字符的值. 在创建字符串之后,我们就可以对它进行操作了.您可以直接在函数中使用字符串,或者把它存储在变量 ...

  9. PHP array_intersect_key() 函数

    实例 比较两个数组的键名,并返回交集: <?php$a1=array("a"=>"red","b"=>"gree ...

  10. PHP rsort() 函数

    实例 对数组 $cars 中的元素按字母进行降序排序: <?php$cars=array("Volvo","BMW","Toyota" ...