docker入门1-docker container
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 ls
或docker 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.py
和requirements.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.py
和requirements.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的更多相关文章
- docker入门_image、container相关命令
docker入门_image.container相关命令 镜像仓库服务.镜像仓库.镜像相关概念 镜像仓库服务:docker镜像仓库服务.阿里云镜像服务 镜像仓库:docker镜像仓库服务中会有很多仓库 ...
- Docker入门2------容器container常规操作
参考转自 https://www.cnblogs.com/jsonhc/p/7760144.html Docker的container 运行一个container的本身就是开启一个具有独立namesp ...
- Docker入门 - 006 Docker 多种数据库的安装
Docker 安装 MySQL 查找Docker Hub上的mysql镜像 root@VM_16_14_centos ~# docker search mysql INDEX NAME DESCRIP ...
- Docker入门 - 004 Docker 容器使用
Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. docker 可以通过命令 docker command -- ...
- Docker入门 - 003 Docker 实例
Docker Hello World Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序. 输出Hello world runoob@runoob: ...
- Docker入门之一Docker在Window下安装
最近这几年,各个大公司都在打造自己的云平台,什么阿里云,华为云,腾讯云等等云,以及各种的微服务架构,其实在这当中Docker容器技术算是一个很重要的角色. 一.下载 在下载之前首先检查一下自己的电脑是 ...
- Docker入门——理解Docker的核心概念
1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...
- 【Docker入门】Docker的常用命令
了解和安装完docker之后,我们学习一下docker的常用命令就和当初学linux命令一样,放心命令其实大致相同只不过细节不同. 一.Docker启动类命令 1.启动docker:syste ...
- Docker入门-搭建docker私有仓库
Docker Hub 目前Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量超过15000个镜像.大部分需求都可以通过在Docker Hub中直接下载镜像来使用. 注册登录 可 ...
- Docker入门 - 005 Docker 容器连接
Docker 容器连接 前面我们实现了通过网络端口来访问运行在docker容器内的服务.下面我们来实现通过端口连接到一个docker容器 网络端口映射 我们创建了一个 python 应用的容器. do ...
随机推荐
- js 判断传入参数是域名还是地址
var get = function(url) { if(location.protocol === "http") { return url; } var reg = /^(ht ...
- ajax异步上传图片&SpringMVC后台代码
function uploadPic(){ var options = { url : "/upload/updatePic.action", type : "post& ...
- 统计M
链接:https://vjudge.net/problem/UVA-1586 题意:给出一分子化学式,包含C,N,O,H四种元素,求M 题解:这是字符串题.分为几种情况:第一种是一个原子:第二种是多原 ...
- Python基础教程(第3版)PDF高清完整版免费下载|百度云盘
百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...
- 快速配置webpack+vue项目
第一步:初始化项目 1.npm init 2. package name: (webpack+vue) webpackvue version: (1.0.0) description: this is ...
- Shell分析服务器日志,解锁各种新姿势
1.查看有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l 2.查看某一个页面被访问的次数: grep "/index.php" ...
- 修改alpine Linux的Docker容器的时区
适用对象 使用 Alpine Linux 发行版的 Docker 镜像容器. 仅仅适用于没有安装uclibc的系统. 修改步骤 进入容器命令行 # docker exec -it container_ ...
- Android仿支付宝高顶部功能条伸缩动画
参考:https://blog.csdn.net/aqi00/article/details/72621176
- WEB简单的登录注册功能(分层)
登录: 前端页面: <body> <form action="/webtext/LogingServlet" method="post"> ...
- random随机数函数