乐趣区

关于linux:Docker-镜像制作方法

本文档介绍 Docker 镜像制作的两种办法,应用的零碎是 CentOS7

Docker Image 的制作两种办法

办法 1:docker commit #保留 container 的以后状态到 image 后,而后生成对应的 image
办法 2:docker build #应用 Dockerfile 文件自动化制作 image

办法一:docker commit

创立一个装置好 apache 工具的容器镜像

[root@Docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 4 months ago 237MB
[root@Docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@Docker ~]# docker run -it centos:latest /bin/bash
[root@1b96e68a3cce /]#
[root@1b96e68a3cce /]# yum -y install httpd #在 container 中装置 apache 软件包
[root@1b96e68a3cce /]# exit

查看 images 列表

[root@Docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 4 months ago 237MB

依据容器以后状态做一个 image 镜像:创立一个装置了 apache 工具的 centos 镜像

语法:docker commit “container 的 ID” 或 “image_name”

查看容器 ID

[root@Docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b96e68a3cce centos:latest “/bin/bash” 3 minutes ago Exited (0) 2 minutes ago awesome_hypatia
607752360adf centos:latest “/bin/bash -c ‘while…” 18 minutes ago Exited (137) 12 minutes ago brave_fermi
0a297ff99af8 centos:latest “/bin/bash” 22 minutes ago Exited (1) 20 minutes ago ecstatic_yonath
efb4af688330 centos:latest “/bin/bash” 24 minutes ago Exited (0) 23 minutes ago epic_mcclintock
[root@Docker ~]# docker commit 1b96e68a3cce centos:apache
sha256:b8822ec8a7bbb325793e7908e355180be82a49481cff197661fb5d0da5872e88
[root@Docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos apache b8822ec8a7bb 9 seconds ago 280MB
centos latest 470671670cac 4 months ago 237MB

应用新创建的 centos:apache 镜像,生成一个容器实例

[root@Docker ~]# docker run -it centos:apache /bin/bash
[root@e4c295d27581 /]# rpm -qa httpd
httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64

看到 httpd 软件名称阐明基于 apache 镜像的容器创立胜利

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

应用 docker build 创立镜像时,须要应用 Dockerfile 文件自动化制作 image 镜像
Dockerfile 有点像源码编译时./configure 后产生的 Makefile

1、创立工作目录

[root@Docker ~]# mkdir /docker-build
[root@Docker ~]# cd /docker-build
[root@Docker docker-build]# touch Dockerfile
[root@Docker docker-build]# ls
Dockerfile
注:make 自动化编译时须要 Makefile 文件,自动化创立 docker 镜像时,须要 Dockerfile

2、编辑 Dockerfile

Dockerfile 用来创立一个自定义的 image, 蕴含了用户挃定的软件依赖等。
[root@Docker docker-build]# vim Dockerfile
FROM centos:latest
MAINTAINER RUN yum -y install httpd
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
CMD echo hello world

正文

FROM centos:latest # FROM 基于哪个镜像
MAINTAINER # 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

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

[root@Docker docker-build]# echo “#!/bin/bash” >> start.sh
[root@Docker docker-build]# echo “/usr/sbin/httpd -DFOREGROUND” >> start.sh
注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd

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

创立 index.html
[root@Docker docker-build]# echo “docker image build test from jaking” > index.html

4、应用命令 build 来创立新的 image

语法:docker build -t 父镜像名:镜像的 tag Dockerfile 文件所在门路
-t : 示意 tag,镜像名

例:应用命令 docker build 来创立新的 image, 并命名为 centos:httpd

[root@Docker docker-build]# ls
Dockerfile index.html start.sh
[root@Docker docker-build]# docker build -t centos:httpd ./

注:./ 示意当前目录, 另外你的当前目录下要蕴含 Dockerfile

Sending build context to Docker daemon 4.096kB
Step 1/5 : FROM centos:latest
—> 470671670cac
Step 2/5 : MAINTAINER —> Running in 0180810d2ab3
Removing intermediate container 0180810d2ab3
—> 5b9af0184bcf
Step 3/5 : RUN yum -y install httpd
—> Running in 8f5c114649ed
CentOS-8 – AppStream 228 kB/s | 7.0 MB 00:31
CentOS-8 – Base 547 kB/s | 2.2 MB 00:04
CentOS-8 – Extras 431 B/s | 5.9 kB 00:14

Dependencies resolved.

Package Arch Version Repo Size

Installing:
httpd x86_64 2.4.37-16.module_el8.1.0+256+ae790463 AppStream 1.7 M
Installing dependencies:
apr x86_64 1.6.3-9.el8 AppStream 125 k
apr-util x86_64 1.6.1-6.el8 AppStream 105 k
centos-logos-httpd

               noarch 80.5-2.el8                            AppStream  24 k

… 省略局部输入信息 …

Complete!
Removing intermediate container 8f5c114649ed
—> 040b5f229962
Step 4/5 : ADD start.sh /usr/local/bin/start.sh
—> 11a106005031
Step 5/5 : ADD index.html /var/www/html/index.html
—> 85b4a3657ced
Successfully built 85b4a3657ced
Successfully tagged centos:httpd

查看 images 列表

[root@Docker docker-build]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd 85b4a3657ced 45 seconds ago 280MB
centos apache b8822ec8a7bb 20 minutes ago 280MB
centos latest 470671670cac 4 months ago 237MB

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

运行新生成的镜像

[root@Docker docker-build]# docker run -it centos:httpd /bin/bash
[root@1188a43a4585 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@1188a43a4585 /]# rpm -qa httpd
httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64
[root@1188a43a4585 /]# exit
exit
[root@Docker docker-build]#

总结

以上就是 Docker 镜像制作方法的介绍,心愿能给大家带来帮忙。

退出移动版