Docker定制容器镜像(利用Dockerfile文件)

1.创建Dockerfile文件

新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 )

[[email protected] myfiles]# mkdir centos6.8_dockerfile
[[email protected] myfiles]# [[email protected] myfiles]# cd centos6.8_dockerfile/

创建dockerfile文件(vim Dockerfile)

# The dockerfile has Change add sshd services on Centos7.0
#centos7:latest image
FROM centos:6.8

MAINTAINER xxx,http://www.cnblogs.com/xxx

#Install sshd net-tools
RUN yum install openssh-server net-tools -y
RUN mkdir /var/run/sshd

#Set password for root
RUN echo ‘root:xxxxxxx‘ | chpasswd
RUN sed -i ‘s/PermitRootLogin prohibit-password/PermitRootLogin yes/‘ /etc/ssh/sshd_config

#Set history record
ENV HISTTIMEFORMAT "%F %T "

#Fix sshd service:Read from socket failed: Connection reset by peer?
RUN ssh-keygen -A

#Change timezone CST
RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#Open 22 port
EXPOSE 22

#Auto running sshd service
CMD ["/usr/sbin/sshd","-D"]

上述文件内容就是一个dockerfile 常见的命令组合。开头带#号的为注释

文件解释:
FROM: 必不可少的命令,从某个镜像作为基。如 FROM <image_name> ,或者 FROM <image_name>:<tag>. 如果不加tag,默认为latest。先从本地镜像仓库去搜索基镜像,如过本地没有,在去网上docker registry去寻找。
MAINTAINER:标明该Dockerfile作者及联系方式,可忽略不写
RUN:建立新的镜像时,可以执行在系统里的命令,如安装特定的软件以及设置环境变量。
ENV:设置系统环境变量(注意:写在/etc/profile里的命令在dockerfile这里会不生效,所以为改成ENV的方式)
EXPOSE:开放容器内的端口,但不和宿主机进行映射。方便在宿主机上进行开发测试。(如需映射到宿主机端口,可在运行容器时使用 -p host_port:container_port)
CMD:设置执行的命令,经常用于容器启动时指定的某个操作。如执行自定义脚本服务,或者是执行系统命令。CMD 只能存在一条,如在Dockerfile中有多条CMD的话,只有最后一条CMD生效!

2.执行build 创建镜像

使用docker build命令来创建镜像

[[email protected] centos6.8_dockerfile]# docker build -t centos_ssh_1_6.8 .
Sending build context to Docker daemon 15.36 kB
Step 1/10 : FROM centos:6.8
 ---> 0cd976dc0a98
Step 2/10 : MAINTAINER xxx,http://www.cnblogs.com/xxx
 ---> Using cache
 ---> 025bdf5382de
Step 3/10 : RUN yum install openssh-server net-tools -y
 ---> Using cache
 ---> f970cedf0dc6
Step 4/10 : RUN mkdir /var/run/sshd
 ---> Using cache
 ---> 620754832e8c
Step 5/10 : RUN echo ‘root:xxxxxxx‘ | chpasswd
 ---> Using cache
 ---> 8bcd6f4ae32b
Step 6/10 : RUN sed -i ‘s/PermitRootLogin prohibit-password/PermitRootLogin yes/‘ /etc/ssh/sshd_config
 ---> Using cache
 ---> b46214833685
Step 7/10 : ENV HISTTIMEFORMAT "%F %T "
 ---> Using cache
 ---> c18c2102a92e
Step 8/10 : RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 ---> Running in 77698b6cfce0
 ---> 0e755b7f8c4a
Removing intermediate container 77698b6cfce0
Step 9/10 : EXPOSE 22
 ---> Running in 29ab858378f7
 ---> 3c8c969057c4
Removing intermediate container 29ab858378f7
Step 10/10 : CMD /usr/sbin/sshd -D
 ---> Running in 8ebd12375b64
 ---> ff004247b678
Removing intermediate container 8ebd12375b64
Successfully built ff004247b678
[[email protected] centos6.8_dockerfile]#

-t 选项来docker build新的镜像以便于标记构建的镜像,. 表示当前目录,也可以指定dockerfile 文件所在目录。

3.查看镜像列表,并创建容器

[[email protected] centos6.8_dockerfile]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
centos_ssh_1_6.8               latest              ff004247b678        About a minute ago   291 MB
nginx_diy                      latest              e24d0b283207        About an hour ago    109 MB
nginx                          latest              34678a414b84        About an hour ago    109 MB
docker01.lo:5000/nginx         latest              958a7ae9e569        3 weeks ago          109 MB
nginx                          <none>              958a7ae9e569        3 weeks ago          109 MB
registry                       latest              9d0c4eabab4d        6 weeks ago          33.2 MB
swarm                          latest              36b1e23becab        5 months ago         15.9 MB
centos                         6.8                 0cd976dc0a98        9 months ago         195 MB

4.创建和查看容器

[[email protected] centos6.8_dockerfile]# docker run -d -it --name mycentos centos_ssh_1_6.8
813171a387c2cc2a2c91ce96815e300c70bf1d42b6bd9e5c83f2d4608a2a2e6b
[[email protected] centos6.8_dockerfile]# docker exec mycentos hostname -I
172.17.0.3
[[email protected] centos6.8_dockerfile]# ssh [email protected]172.17.0.3 date
Read from socket failed: Connection reset by peer
[[email protected] centos6.8_dockerfile]# docker exec mycentos netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1/sshd
tcp        0      0 :::22                       :::*                        LISTEN      1/sshd  

原文链接:http://www.cnblogs.com/hanyifeng/p/6116067.html

时间: 2024-12-29 11:33:33

Docker定制容器镜像(利用Dockerfile文件)的相关文章

Docker 获取容器镜像报错

Dokcer 获取容器镜像报错 [[email protected] ~]# docker pull nginxUsing default tag: latestTrying to pull repository docker.io/library/nginx ... Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout excee

【Docker学习之四】Docker自定义容器镜像

环境 docker-ce-19.03.1-3.el7.x86_64 centos 7 一.使用已有容器创建镜像-docker commit1.查看本地已有镜像 [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 5a3221f0137b 9 days ago 126MB hello-world latest fce289e99eb9 7 months ago 1.84kB t

docker nginx-php容器镜像瘦身优化

1. 在安装好php环境的容器,参考上面贴出的链接那篇文章的部分,做好基础工作: #创建工作目录 mkdir /rootfs #进入工作目录 cd /rootfs #创建基础目录 mkdir -p bin etc lib proc sys tmp dev/pts usr/lib64 usr/bin usr/local/bin #创建一个空的DNS服务用的文件 touch etc/resolv.conf #复制名称解析文件 cp /etc/nsswitch.conf etc/nsswitch.co

DocKer 创建容器 镜像端口映射失败

问题一: 我想使用同一个镜像创建多个容器,并映射端口出现以下错误,该怎么解决? docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql2 (039404f00f8dc0059a1e2f9e1db0e1b5da82a3ae14f3117fbac8af6a0c6fe119): Error starting userland proxy: mkdir /p

[Linux] 编写Dockerfile文件自动构建镜像

Dockerfile是一个文本文件,按顺序包含构建给定镜像所需的所有命令Docker通过读取Dockerfile中的指令自动构建图像 . Dockerfile遵循特定的格式和指令集,您可以在Dockerfile引用中找到它们. Docker镜像由只读层组成,每个层都代表一个Dockerfile指令.这些层是堆叠的,每个层都是前一层变化的增量 在Ubunu镜像的基础上,安装nginx,并且拷贝本地文件到镜像,创建一个Dockerfile文件到目录下,并且建一个1.txt的文件 # 基础镜像 FRO

docker学习笔记17:Dockerfile 指令 ONBUILD介绍

ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响. 但是当我们编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令. 需要注意的是,如果是再利

[转]Docker中的镜像

引言 这篇文章中我们主要来探讨下Docker镜像,它是用来启动容器的构建基石,本文的所用到的Dcoker版本是17.1,API版本是1.33,Go的版本是1.9.2,OS是基于Arch Linux的Manjaro. Docker镜像的概念 总的来说,Docker镜像是由文件系统叠加而成的. bootfs 最底端是一个引导文件系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永远不会和引导文件系统有什么交互.实际上,当一个容器启动后,它将会被移到内存中,而引

Docker应用容器引擎

1.Docker概述 1.1.Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言开发.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低. · Docker应用场景 Web 应用的自动化打包和发布 自动化测试和持续集成.发布 在服务型环境中部署和调整数据库或其他的后台应用 使用

Docker系列-第六篇DockerFile解析

1.手动编写一个dockerfile文件,当然必须要符合file的规则 2.有了这个文件,直接docker build命令执行,获得一个自定义的镜像 3.run 1.是什么 Dockerfle 是一个文本格式的配置文件, 用户可以使用 Dockerfle 来快速创建自定义的镜像. Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 1.1三步骤 编写Dockerfile文件 docker build docker run 2.DockerFile构建过程解