Docker打包

docker帮我们减少了很多复杂的环境差异,但是如果我们想把自己本地的一个好的,各种环境已经安装好的docker发送给同事B,那么具体该怎么操作了,下面来简单介绍一下把

如何进入容器空间内,修改容器内的环境,以及代码等内容,修改软件等操作,且提交镜像,发送给其他人

#先进入容器内部
[root@localhost ~]# docker run -it centos /bin/bash
#安装软件
[root@c36d571de79f /]# yum  install  vim  -y
#安装好vim后,退出容器空间
exit
#提交该容器(ID),生成新的镜像文件(centos-vim)
[root@localhost ~]# docker  commit  371fccf2957d  centos-vim
#验证是否已经正常生成镜像文件
[root@localhost ~]# docker  images
#导出镜像给同事使用
[root@localhost ~]# docker  save 8066b74c9151  >  /opt/centos-vim.tar.gz
#进入opt验证是否已经生成压缩文件
#cd /opt/

查看本地镜像
image.png
运行centos镜像
image.png
进入镜像内部,安装软件vim
image.png
提交该容器,生成新的镜像文件,
image.png
经过验证,已经生成了镜像

同事B
由于环境问题,我们还在本机模拟这个操作,将本地的centos镜像进入删除,然后导出刚刚的压缩包,来模拟这个导入试验
1:删除本地镜像

[root@localhost opt]# docker  images 
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
centos-vim    latest    8066b74c9151   9 minutes ago   279MB
python        latest    1e76b28bfd4e   3 weeks ago     911MB
redis         latest    ddcca4b8a6f0   3 weeks ago     105MB
nginx         latest    dd34e67e3371   3 weeks ago     133MB
hello-world   latest    d1165f221234   6 months ago    13.3kB
centos        latest    300e315adb2f   9 months ago    209MB
#删除centos-vim  
[root@localhost opt]# docker  rmi  806
Untagged: centos-vim:latest
Deleted: sha256:8066b74c91518426f27ff54c201ccb54541d028201d84aa580ac7ef680b55283
Deleted: sha256:bfd92bfcf16a468f9fa059259f3dbf041c863d88fe5e009ac6fe63f5dfb8820b
[root@localhost opt]# 

2:导入压缩包镜像
假如接受的压缩包文件存放在/opt下面

[root@localhost opt]# docker  load  <  /opt/centos-vim.tar.gz 
ca129192cddf: Loading layer [==================================================>]  70.84MB/70.84MB
Loaded image ID: sha256:8066b74c91518426f27ff54c201ccb54541d028201d84aa580ac7ef680b55283
[root@localhost opt]# docker  images 
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
<none>        <none>    8066b74c9151   13 minutes ago   279MB
python        latest    1e76b28bfd4e   3 weeks ago      911MB
redis         latest    ddcca4b8a6f0   3 weeks ago      105MB
nginx         latest    dd34e67e3371   3 weeks ago      133MB
hello-world   latest    d1165f221234   6 months ago     13.3kB
centos        latest    300e315adb2f   9 months ago     209MB

看到已经导入成功了,只是没有名字,我们手动加一个,首次都会丢失

3:手动修改镜像名字

[root@localhost opt]# docker  tag  8066b74c9151  centos-vim-new
[root@localhost opt]# docker  images 
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
centos-vim-new   latest    8066b74c9151   15 minutes ago   279MB
python           latest    1e76b28bfd4e   3 weeks ago      911MB
redis            latest    ddcca4b8a6f0   3 weeks ago      105MB
nginx            latest    dd34e67e3371   3 weeks ago      133MB
hello-world      latest    d1165f221234   6 months ago     13.3kB
centos           latest    300e315adb2f   9 months ago     209MB
[root@localhost opt]# 
测试
[root@localhost opt]# docker  run  -it  -d  centos-vim-new  /bin/bash 
0e47c9a29db8e89b6bc449b63f15bbc9c37aeb0f52408aea0b8ddb07e286bca4
[root@localhost opt]# vim

OK,大功告成~~~~
下面来介绍一下如何运行一个web服务
1:批量停止容器服务,并且删除容器

[root@localhost opt]# docker  stop  `docker  ps -aq`
[root@localhost opt]# docker  rm`docker  ps -aq`

2:下载一个webapp

[root@localhost opt]# docker  pull training/webapp

3:启动服务 宿主机的5000映射docker的5000端口

#p  指定端口     P 随机端口
[root@localhost opt]# docker run   --name   "docker-server-test" -d  -p 5000:5000 training/webapp python app.py

4:测试

[root@localhost opt]# docker port  e94d8721cf52
5000/tcp -> 0.0.0.0:5000
5000/tcp -> :::5000
[root@localhost opt]# curl  127.0.0.1:5000
Hello world![root@localhost opt]# 

5:进入该镜像内容,查看文件

[root@localhost opt]# docker  exec  -it   e94d8721cf52 /bin/bash
root@e94d8721cf52:/opt/webapp# ls
Procfile  app.py  requirements.txt  tests.py
root@e94d8721cf52:/opt/webapp# 

6:修改文件后,exit后记得要重新启动服务,代码才会重新生效哦

最后提供一个官方网站吧
1.docker提供了一个类似于github的仓库dockerhub,
网址https://hub.docker.com/需要注册使用

2.注册docker id后,在linux中登录dockerhub,会提示让你输入账号密码,正确登录之后,本台机器就和dockerhub绑定账号了,你的镜像推送,就能够推送到,该账户的dockerhub中

docker login

2.1准备镜像推送
注意要保证image的tag是dockerhub账户名,如果镜像名字不对,需要改一下tag

docker tag 镜像id dockerhub的账号/centos-vim

语法是:  docker tag   仓库名   dongdong/仓库名

3.推送docker image到dockerhub,好比你准备git push 推送代码一样

docker push dockerhub账号/centos-vim

4.在dockerhub中检查镜像,查看个人账户中的镜像文件

https://hub.docker.com/

5.删除本地镜像,测试下载pull 镜像文件

docker pull dongdong/centos-vim 

######接下来用Flask搭建一个小小的服务,写一个flask容器脚本吧,上代码哦!!!
1:安装flask模块

pip3 install -i https://pypi.douban.com/simple flask

2:准备一段可以执行的flask代码

from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
    return "this  is   good flask"
if __name__=="__main__":
    app.run(host='0.0.0.0',port=8080)

image.png
报错了,发现遇到问题,找不到flask,可是我明明已经安装了,百度暂时也没有找到办法
尝试用虚拟环境,排除环境干扰

[root@localhost opt]#virtualenv   --python=python3  flask

image.png
发现又报错了,百度后,开启了debug模式,也还是不行
3:暂时先不管了,先编写dockerfile脚本吧,注意名字必须是 大写Dockerfile

[root@localhost opt]#touch Dockerfile ,写入如下的内容

FROM python    #指定镜像,dockerhub提供好的python镜像,已经安装好了python3,很好用
RUN pip3 install -i https://pypi.douban.com/simple flask  #在容器内安装flask模块  
ADD  web_flask.py    /opt	#把宿主机的代码,拷贝到容器的/opt目录下
WORKDIR  /opt		#容器内进行目录切换
EXPOSE 8080		#打开容器的8080端口,用于和宿主机进行映射
CMD ["python3","web_flask.py"]  	#在容器启动后,内部自动执行的命令是什么 

4:检查准备的脚本代码,以及Dockerfile文件

#查看目录是否有下面2个文件
[root@localhost  temp ]# ls
Dockerfile  web_flask.py

5.构建该dockerfile,生成镜像

[root@localhost  temp ]# docker build .

6.检查docker的镜像,是否生成

docker images
#可以修改一下镜像的标签
[root@localhost  temp ]# docker tag  a66  flask

7.运行该镜像文件,查看是否能够运行容器内的flask

docker run  -d  -p  8000:8080  flask

8.访问宿主机端口,查看容器内的应用

curl  127.0.0.1:8000

9.可以修改容器内的代码,重启容器

docker exec -it  88a5  /bin/bash  
修改容器内的代码
sed  -i "s/朋友们,再见。。。。/"  web_flask.py

10.重启容器

docker restart 88a

11.再次访问容器内应用,查看更新的代码内容

curl  127.0.0.1:8000
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值