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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容