参考
1.【入门】Docker练习场2. docker practice
创建阿里云镜像仓库
这里具体的构建内容见参考1,要注意在创建仓库时要地域的选择,否则会找不到你创建的仓库。
可以在你的阿里云容器镜像仓库控制台那里进行地域更换,因为我买的是张家口的服务器,所以我也就把他设置为张家口,这样在你后续创建镜像仓库时,他就会默认把地域设置为张家口。
如果你选择了其他地域,记得要先在控制台这里进行地域调换,然后才能看到你的镜像仓库。
Dockerfile创建
首先从阿里云拉取Python3
镜像
docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
然后你会看到一个Python3
的镜像,我这里的IMAGE ID
是a4cc999cf2aa
然后你可以在本地运行一下
sudo docker run -it a4cc999
你会发现进入了一个Python
环境,运行成功了。
比如这时我们想使用这个镜像中的Python环境,在这个环境中写一些程序,此时我们创建一个文件夹,叫docker_learn_tianchi
,并在其中创建两个文件test.py
,run.sh
和Dockerfile
。
test.py
代码如下
print("docker_learn_tianchi")
print("aliyun")
print(1+998)
run.sh
代码如下
python docker_test.py
最后,为了让我们的代码能够成功打包为镜像文件,我们需要书写一个Dockerfile
,示例如下
# Base Images
## 从天池基础镜像构建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
## 把当前文件夹里的文件构建到镜像的根目录下
ADD . /
## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /
## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]
最终的目录结构是这样的
build构建镜像
执行下边这条指令,更换成你自己的镜像仓库哦
docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
- 注意:
registry.~~~
是上面自己创建仓库的公网地址,可以再你的镜像仓库中看到,用自己仓库地址替换。地址后面的:1.0
为自己指定的版本号,用于区分每次build
的镜像。最后的.
是构建镜像的路径,不可以省掉。也就是说,自己实际需要修改的,只有最后的版本号,其他的直接从镜像仓库复制即可。如果你不加版本号,那他会默认设置为latest。
上边那一串网址分别是阿里云Registry实例/你使用的命名空间/你使用的仓库名称
此时你使用docker images
就可以看见你刚刚创建的镜像了。
运行build后的Docker镜像
运行命令如下,其中40370185
是你的IMAGE ID
docker run 40370185 sh run.sh
这时你就可以看到你的test.py的输出了
push到你的镜像仓库
这一句和前边的build
指令很像,需要将你刚刚创建的镜像文件push
上去
docker push yourImageName
docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
格式为docker push 注册用户名/镜像名
,对于阿里云,具体如下,在阿里云服务器镜像仓库里都有教程,一般直接复制你的网络地址就可以
docker push registry.cn-zhangjiakou.aliyuncs.com/namespace/RepoName:1.0
这时你push
可能会出错,告诉你对资源的访问被拒绝了,因为你还没有登录,登录方式如下,在你的镜像仓库的基本信息里也有这些内容
sudo docker login --username=yourname registry.cn-zhangjiakou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
然后重新push
就可以了
第一次提交会比较缓慢,十分缓慢,特别缓慢,静待即可,push
完成后,你就可以在镜像版本里看到你刚刚上传的镜像
你还可以重新build
一下,比如修改一下docker_test.py
中的内容为下方内容docker_test.py
print("docker_learn_tianchi")
print("aliyun")
print(1+998)
print(2.0)
然后再Dockerfile
所在的目录下,执行下方的build指令
sudo docker build -t build_py_test:version2.0 .
然后执行一下,确认没问题后,进行推送,但是推送之前记得要把名字改掉,使用docker tag
命令,记得修改对应的仓库公网地址和版本号。
docker tag [ImageID] registry.cn-zhangjiakou.aliyuncs.com/wangxy_docker/tianchi_test:[镜像版本号]
然后你会发现多了一个IMAGE ID
相同的镜像文件,但是REPOSITORY
和TAG
两项不同了
然后push
docker push registry.cn-zhangjiakou.aliyuncs.com/wangxy_docker/tianchi_test:[镜像版本号]
此时应该是会秒传的,因为大部分文件都存在了
这是你就可以看到你的仓库中存在两个版本的镜像了
后续我想的是能不能修改其中的文件,比如我修改刚才的test.py
文件,而不是重新build