docker 镜像制作方法

Docker Image的制作两种方法

方法1 docker commit # 保存 container 的当前状态到 image 后,然后生成对应的 image

方法2 docker build # 使用 Dockerfile 文件自动化制作 image

方法 1 docker commit

创建一个安装好apache 工具的容器镜像

[root@test ~]# docker run -it docker.io/centos:latest /bin/bash

[root@1d3563200047 /]# yum -y install httpd # 在 container 中安装 apache 软件包

[root@1d3563200047 /]# exit

查看

images 列表

[root@test ~]# docker images

根据容器当前状态做一个image 镜像:创建一个安装了 apache 工具的 centos 镜像

语法:

docker commit <container 的 ID> 或 <image_

例:查看容器ID

[root@test ~]# docker ps -a

[root@test ~]# docker commit bbd01c4b8567 docker.io/centos:apache

sha256:e5917c01599c70d0680beeb35f6df98889dd22106399efd6907d956d8a943242

[root@test ~]# docker images

使用新创建的docker.io/centos apache 镜像,生成一台容器实例:

镜像,生成一台容器实例:

[root@test ~]# docker run it centos:apache /bin/bash

[root@8b1afc920454 /]# rpm -qa httpd 查看,已经安装好 apache 命令httpd2.4.6 67.el7.centos.2.x86_64

注:说明基于apache 镜像的容器创建成功。

方法二:通过: docker build 创建一个基于 centos 的 httpd web 服务器镜像。

使用docker build 创建镜像时,需要使用 Dockerfile 文件自动化制作 image 镜像

注:Dockerfile 有点像源码编译时 ./configure 后产生的 Makefile

1、创建工作目录

[root@test ~]# mkdir /docker-build

[root@test ~]# cd /docker-build

[root@test docker-build]# touch Dockerfile

注:make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile

2、编辑 Dockerfile

Dockerfile

用来创建一个自定义的 image, 包含了用户指定的软件依赖等。

[root@test docker-build]# vim Dockerfile

FROM docker.io/centos:latest

MAINTAINER <mk xuegod.cn>

RUN yum -y install httpd

ADD start.sh /usr/local/bin/start.sh

ADD index.html /var/www/html/index.html

注释:

FROM docker.io/centos:latest FROM 基于哪个镜像

MAINTAINER < mk xuegod.cn> MAINTAINER 镜像创建者

RUN yum -y install httpd RUN 安装软件用

ADD start.sh /usr/local/bin/start.sh

ADD index.html /var/www/html/index.html

ADD 将文件 < 拷贝到 新产生的镜像 的文件系统对应的路径 < 。 所有拷贝到 新镜像 中的

文件和文件夹权限为 0755,uid 和 gid 为 0

CMD echo hello world

container 启动时执行的命令 或启动服务 ,但是一个 Dockerfile 中只

能有一条 CMD 命令,多条则只执行最后一条 CMD.

如:dockefile1 中的内容如下:

vim dockefile1

FROM ubuntu

MAINTAINER xxx

RUN echo hello1 > test1.txt

RUN echo hello2 > /test2.txt

EXPOSE 80

EXPOSE 81

CMD ["/bin/bash"]

创建 start.sh 脚本启动 httpd 服务和 apache 默认首页 index.html 文件

[root@test docker-build]# echo "/usr/sbin/httpd DFOREGROUND" > start.sh

注:/usr/sbin/httpd DFOREGROUND 相当于执行了 systemctl start httpd

[root@test docker-build]# chmod a+x start.sh

创建index.html

[root@test docker-build]# echo "docker image build test" > index.html

使用命令 build 来创建新的 image

语法:

docker build -t 父镜像名:镜像的 tag Dockerfile 文件所在路径

-t : 表示 tage ,镜像名

例:使用命令 docker build 来创建新的 image, 并命名为 docker.io/centos:httpd

[root@test docker-build]# docker build t docker.io/centos:httpd ./

注:./ 表示当前目录。另外你的 当前目录下 要 包含 Dockerfile

Sending build context to Docker daemon 4.096 kB

Step 1 : FROM docker.io/centos:latest

------> 0f0be3675e bb

Step 2 : MAINTAINER userabc

mk xuegod.cn

------> Using cache

------> 9d1cc5ad2a7b

Step 3 : RUN yum -y install httpd

。。。

Complete!

------> bce6b3f0a700

Removing intermediate container c9567092d67b

Step 4 : ADD

start.sh /usr/local/bin/start.sh

------> 521463f9bbeb

Removing intermediate container 18b34849606d

Step 5 : ADD index.html /var/www/html/index.html

------> 585eb8e1d7ad

Removing intermediate container ecdbd06a3c1e

Successfully built 585eb8e1d7ad

查看

images 列表

[root@test ~]# docker images

注:docker镜像=应用/程序+库

Docker Image 的发布:

方法1 Save Image To TarBall

方法2 Push Image To Docker Hub

方法1 Save Image To TarBall

保存Image 到 tar 包

语法:docker save -o 导出的镜像名 .tar 本地镜像名:镜像标签

[root@test ~]# docker save -o docker.io-centos-httpd-docker-image.tar docker.io/centos:httpd

[root@test ~]# ll -h

-rw------- 1 root root 319M 12月 27 22:48 docker.io-centos-httpd-docker-image.tar

例:

使用导入本地镜像:[root@test ~]# docker rmi docker.io/centos:httpd

删除镜像,这里写自己镜像的 ID或名字

[root@test ~]# docker images

[root@test docker-build]# docker load i centos httpd docker image.tar

方法

2 Push Image To Docker Hub 发布到外网

1、 Signup on docker hub & create repo 注册一个帐号

https://hub.docker.com/

2、 Login to docker hub

# docker login -u userabc p abc123 e userab@gmail.com

3、 Push image to docker hub # 上传镜像

#docker push centos:httpd

4、 Pull image from docker hub # 下载镜像

# docker pull userabc/centos:httpd #用户名 镜像名

Container 容器端口映射

实战: Container 端口 映射

启动container

[root@test ~]# docker run -d p 80:80 docker.io/centos:httpd /bin/bash c

/usr/local/bin/start.sh

87fadc0249a96736f588f16b7d3ad662ef3536a06d7a74115cd7c76546ed3a22

注:-p 物理机的 80 端口 容器实例的 80 端口 ,把容器中的 80 端口映射到物理机上的 80 端口

在物理机上查看容易状态:

[root@test ~]# docker ps

查看物理机上开启的

80 代 理端口

[root@test ~]# netstat -antup | grep 80

tcp6 0 0 :::80 :::* LISTEN    50768/ docker proxy

注:现在docker 实例运行的网络模式像 VMware 的 NAT 模式。 后期会讲给 docker 配置静态 IP就像 VMware 的桥接模式。

访问正在运行的 container 容器实例

语法docker exec -it <container id | name> /bin/bash

[root@test ~]# docker ps

[root@test ~]# docker exec -it 87fadc0249a9 /bin/bash 进入容器

创建

test.html 文件

[root@87fadc0249a9 /]# echo xuegod > /var/www/html/test.html

[root@87fadc0249a9 /]#

测试:在物理机上查看新添加的test.html 文件

[root@test ~]# curl http://192.168.1.6 /test.html

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

推荐阅读更多精彩内容