Docker基础
1、Docer基础概念
- 镜像(Images):就是静态的文件系统,里面有源代码、依赖的库、配置文件等,类似于github下载的代码包,但是是一个完整的系统,可以直接运行。可以用docker images查看系统中的镜像。
- 容器(Container):容器是运行中的镜像,他的实质是进程,通过docker ps可以查看运行中的容器。
- 仓库(Repository):首先我们需要登陆一个服务器Docker Registry,然后每个Registry上可以包含多个Repository,每个Repository下可以多个Tag相当于不同的版本,每个Tag对应一个镜像Image
2、Docker基本操作
最基本的操作是login、pull、push,类似于github,首先安装了docker之后,我们登陆Docker服务器:
- docker login [Registry名称],然后输入用户名和登陆密码登陆。
- docker pull [镜像名]:[镜像Tag]:类似于git clone下载对应镜像。
- docker push,类似于github的push,利用docker images可以查看镜像对应的仓库名和对应的Tag好,利用docker push [Repository]:[Tag]更新远程仓库的镜像。
3、Dockerfile创建镜像
可以通过docker commit 和 Dockerfile创建镜像,官方推荐使用Dockerfile创建,可以直观地看到创建过程。
基础指令简介:
- ARG:指定临时变量,镜像创建完成之后会消失
- FROM:指定在一个镜像之上构建
- WORKDIR:指定工作目录
- RUN:执行一次生成一层镜像
- CMD:设置启动后默认执行的命令和参数,一般用于指定参数
- ENTRYPOINT:设置启动后默认执行的命令和参数,一般作为人口
- COPY:拷贝本地文件到docker,远程用curl或者wget
- ADD:本地文件复制到docker去,自动解压缩
4、实战Docker天池入门赛
第一步:安装docker
根据电脑版本安装docker
第一步:开通阿里云容器镜像服务
看手把手教程的第二步,非常详细:
https://tianchi.aliyun.com/competition/entrance/231759/tab/174
第三 步:准备本地文件
四个,Dockerfile(构造镜像)、hello_world.py(执行代码)、result.json(空白用于存放结果)、run.sh(容器运行入口)
1、Dockerfile:按照手把手教程配置即可
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
ADD . /
WORKDIR /
CMD ["sh", "run.sh"]
2、hello_world.py:执行代码
import json
import heapq
class TopKHeap(object):
def __init__(self,k):
self.data=[]
self.k=k
def push(self,num):
if len(self.data)<self.k:
heapq.heappush(self.data,num)
else:
top_min=self.data[0]
if num>top_min:
heapq.heapreplace(self.data,num)
def topk(self):
return list(reversed([heapq.heappop(self.data) for i in range(self.k)]))
def get_result():
num_sum = 0
topKHeap_10 = TopKHeap(10)
with open("/tcdata/num_list.csv", "rb") as f:
line = f.readline()
while line:
num = int(line)
num_sum += num
topKHeap_10.push(num)
line = f.readline()
return num_sum, topKHeap_10.topk()
num_sum, top_10_list = get_result()
data = {
"Q1":"Hello world",
"Q2":num_sum,
"Q3":top_10_list
}
# data_json = json.dumps(data)
with open("./result.json", "w") as f:
json.dump(data, f)
3、run.sh
python hello_world.py
本地调试程序,在绝对路径 /tcdata/ 创建一个num_list.csv文件,里面是n个数字,python hello_world.py查看result.json的输出
第四部:上传镜像
上传到第二步的服务中
1、登陆阿里云Registry
$ sudo docker login --username=[用户名] registry.cn-shanghai.aliyuncs.com
2、拉取镜像
$ sudo docker pull registry.cn-shanghai.aliyuncs.com/[镜像名]:[镜像版本号]
3、利用Dockerfile创建镜像
进入到Dockerfile的目录下
$ sudo docker build -t registry.cn-shenzhen.aliyuncs.com/[镜像名]:[镜像版本号] .
4、上传到镜像服务器
$ sudo docker push registry.cn-shenzhen.aliyuncs.com/[镜像名]:[镜像版本号]