Docker 定制 运行容器镜像的2种方法
- 格式:doc
- 大小:36.00 KB
- 文档页数:6
如何在Docker中构建自定义镜像Docker是一种开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个可移植的容器中,从而实现在不同环境中快速部署和扩展应用程序的目的。
而构建自定义镜像是使用Docker的一项重要技能,它可以帮助我们更好地管理和定制开发环境。
一、了解Docker镜像与容器的关系在开始构建自定义镜像之前,我们需要先了解Docker镜像与容器的关系。
Docker镜像是一个轻量级、可执行的文件,它包含了运行一个特定应用程序所需的所有文件、依赖项和配置信息等。
而Docker容器则是从镜像创建的一个运行实例,它可以被启动、停止、删除、复制等一系列操作。
二、选择合适的基础镜像构建自定义镜像的第一步是选择一个合适的基础镜像。
Docker的官方仓库提供了各种各样的基础镜像,如Ubuntu、CentOS等,可以根据自己的需求选择合适的镜像作为基础。
三、创建Dockerfile文件使用Docker构建自定义镜像的关键是编写Dockerfile文件。
Dockerfile是一个文本文件,其中包含一系列用于构建镜像的指令。
在编写Dockerfile时,可以利用指令来指定基础镜像、添加文件、运行命令、暴露端口等。
四、定制镜像的内容在Dockerfile中,我们可以通过一系列指令来定制镜像的内容。
比如可以使用RUN指令来运行命令,使用ADD或COPY指令来添加文件,使用ENV指令来设置环境变量等。
通过合理使用这些指令,我们可以将自己的应用程序、依赖项和配置文件等添加到镜像中。
五、构建自定义镜像完成Dockerfile的编写之后,我们可以使用docker build命令来构建自定义镜像。
该命令会根据Dockerfile的内容,从头开始构建镜像,并生成一个唯一的镜像ID。
六、验证和优化镜像构建完成后,我们可以使用docker run命令来启动容器,并验证镜像是否正常。
如果发现有问题,可以回到Dockerfile中进行调整和优化,再重新构建镜像。
Docker镜像的制作与使用方法Docker技术作为一种容器化技术,被越来越多的企业和个人所接受和使用。
在Docker中,镜像扮演着一个非常重要的角色。
它是构建和运行容器的基础,为容器提供了一个隔离环境。
本文将介绍Docker镜像的制作和使用方法。
一、Docker镜像的制作1. 拉取基础镜像要制作一个Docker镜像,首先需要选择一个基础镜像。
基础镜像是构建其他镜像的基础,可以是操作系统的镜像,例如Ubuntu,CentOS,也可以是特定软件的镜像,如Nginx,MySQL等。
可以通过以下命令拉取一个基础镜像:```docker pull ubuntu:latest```2. 创建和编辑DockerfileDockerfile是用来定义镜像内容的文本文件。
在创建Dockerfile时,我们可以指定从基础镜像中构建我们需要的环境,并添加所需的软件和配置。
例如,我们可以在Dockerfile中添加以下内容:```FROM ubuntu:latestRUN apt-get update && apt-get install -y nginxCOPY nginx.conf /etc/nginx/nginx.confCMD ["nginx", "-g", "daemon off;"]上述Dockerfile中指定了以最新的Ubuntu镜像为基础,安装了Nginx,并将自定义的nginx.conf配置文件复制到镜像中的指定路径。
CMD指令是在容器启动时执行的命令。
3. 构建镜像在编写完Dockerfile后,使用以下命令来构建镜像:```docker build -t my-nginx .```-t参数指定了镜像的名称,后面的.表示Dockerfile所在的路径。
二、Docker镜像的使用1. 运行容器构建好镜像后,我们可以使用以下命令来运行容器:```docker run -d --name my-nginx-container -p 80:80 my-nginx```-d参数表示在后台运行容器,--name参数指定容器的名称,-p参数将容器内的80端口映射到主机的80端口。
构建自定义Docker镜像的最佳实践和技巧当今软件开发和部署领域中,Docker已经成为一种广泛使用的容器化技术。
使用Docker可以将应用程序的依赖项和环境打包成一个独立的镜像,方便在不同的平台上进行快速部署和复制。
本文将介绍一些构建自定义Docker镜像的最佳实践和技巧,帮助读者更好地利用Docker进行应用程序的打包和部署。
第一,选择合适的基础镜像是构建自定义Docker镜像的关键。
一个好的基础镜像不仅可以减少镜像大小,还可以提供良好的性能和稳定性。
在选择基础镜像时,应该考虑以下几个方面:首先,基础镜像应该是官方支持和常用的,这样可以确保其兼容性和可靠性。
其次,基础镜像的大小应该尽可能小,以减少镜像的下载和部署时间。
最后,基础镜像的功能应该足够丰富,能够满足应用程序的依赖需求。
第二,优化Dockerfile文件是构建自定义Docker镜像的重要一环。
Dockerfile是一个包含一系列指令的文本文件,用于描述如何构建Docker镜像。
为了优化Dockerfile文件,我们可以采取以下几个策略:首先,使用多个RUN指令代替单个复合的RUN指令,这样可以利用Docker的缓存机制,节省构建时间。
其次,合理利用.dockerignore文件来排除不必要的文件和目录,减少镜像大小。
最后,将容器的配置和启动脚本放在ENTRYPOINT或CMD指令中,以便在运行时自动执行。
第三,合理利用Docker的多阶段构建功能可以进一步优化自定义Docker镜像的构建过程。
多阶段构建可以将应用程序打包成多个阶段,每个阶段对应一个镜像。
这样可以在最后一个镜像中只保留最终的运行时依赖项,丢弃构建过程中的构建依赖项。
通过这种方式,不仅可以减小镜像的大小,还可以提高镜像的可靠性和安全性。
第四,使用Docker的版本控制机制可以确保自定义Docker镜像的稳定性。
Docker提供了两种版本控制机制:标签和SHA标识符。
标签可以用于指定镜像的版本,例如“latest”表示最新的版本。
如何创建自定义的Docker镜像Docker是一个开源的虚拟化平台,可以帮助开发者在不同的操作系统中快速构建、测试和部署应用程序。
而自定义Docker镜像则是在已有的Docker镜像基础上,根据自己的需求进行个性化定制。
下面,本文将介绍如何创建自定义的Docker镜像。
第一步:选择基础镜像创建自定义的Docker镜像的第一步是选择一个适合的基础镜像。
基础镜像是构建自定义镜像的基础,可根据需求选择不同操作系统、版本和基础软件。
例如,如果要构建一个用于Web应用程序的镜像,通常选择一个带有操作系统和Web服务器软件的基础镜像,如Ubuntu或CentOS。
如果要构建一个数据库服务器的镜像,可以选择带有数据库软件的基础镜像,如MySQL或PostgreSQL。
第二步:创建DockerfileDockerfile是用于定义Docker镜像构建步骤的文本文件。
通过在Dockerfile中添加一系列指令,可以自动化地构建自定义的Docker镜像。
首先,创建一个新的空白文本文件,并将其命名为Dockerfile。
然后,将以下指令添加到Dockerfile中:FROM 基础镜像# 在此处添加自定义配置和软件安装指令# 例如,RUN apt-get install -y 软件包名称#ADD 源目标#COPY 源目标#ENV 环境变量名称=值#EXPOSE 端口号#CMD 命令在以上指令中,FROM用于指定基础镜像的名称。
接下来的指令可以根据需要添加或删除,用于自定义配置和软件安装。
ADD和COPY用于将文件添加到镜像中,ENV用于设置环境变量,EXPOSE用于指定镜像监听的端口,CMD用于指定容器启动时执行的命令。
第三步:构建镜像创建Dockerfile后,可以使用docker build命令构建自定义的Docker镜像。
打开终端或命令行界面,并导航到Dockerfile所在的目录。
然后运行以下命令:docker build -t 镜像名称:标签名称 .其中,“-t”用于指定镜像的名称和标签,“.”表示Dockerfile所在的当前目录。
docker⽣成镜像的两种⽅式基于⼀个基础镜像构建⼀个⾃⼰的镜像有两种⽅式: 1.更新镜像:使⽤ docker commit 命令⽣成新的镜像 2.构建镜像:使⽤ docker build 命令,需要创建Dockerfile⽂件⼀:更新镜像 先使⽤基础镜像创建⼀个容器,然后对容器内容进⾏更改,然后使⽤ docker commit 命令提交为⼀个新的镜像(以tomcat为例)。
1.从仓库拉取最新的镜像docker pull tomcat 2.根据基础镜像,创建容器docker run --name tomcat01 -p 80:8080 -d tomcat 注意:如果是从阿⾥云镜像仓库拿到的镜像,在webapps⾥⾯没有⽂件,因为阿⾥云镜像默认是最⼩的镜像,所有不必要的都被剔除,将webapps.dist中的⽂件copy到webapp中即可解决(命令:cp -r webapps.dist/* webapps) 3.修改容器内容docker exec -it tomcat01 /bin/bashcd webapps/ROOTrm -f index.jspecho hello world > index.html exit 4.提交为新镜像#docker commit -m="描述消息" -a="作者"容器ID或容器名镜像名:TAGdocker commit -m="⾃定义的Tomcat镜像" -a="wk" mytomcat wk/tomcat:v1.0 5.1 将⾃⼰的镜像上传到dockerHub#第⼀步先登录⾃⼰的docker仓库docker login#输⼊⽤户名和密码#修改镜像名字#docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 注意这⾥的⽬标镜像需要使⽤你dockerhub上的⽤户名类似我的wkdocker01 docker tag wk/tomcat:v01 wkdocker01/tomcat:v1.0#上传⾃⼰的镜像docker push wkdocker01/tomcat:v1.0 5.2 将⾃⼰的镜像上传到阿⾥云 ⾸先在⾃⼰的阿⾥云容器镜像中创建⾃⼰的镜像仓库 选本地仓库 ,通过命令推送到阿⾥云镜像仓库 然后进⼊到⾃⼰的镜像仓库,这⾥有操作步骤教你上传镜像 6.使⽤⼦的镜像来运⾏容器(当然也可以在dockerHub上pull下来⾃⼰空间的镜像)docker run --name mytom -p 8091:8080 -d wk/tomcat:v1.0⼆:使⽤DockerFile构建spring boot项⽬镜像 1.准备:把⾃⼰的springboot项⽬打包成可执⾏jar包 2.把jar包上传到Linux服务器 3.开始构建⾃⼰的项⽬容器 3.1:在jar包路径下创建Dockerfile⽂件 vi Dockerfile# 指定基础镜像,本地没有会从dockerHub pull下来FROM java:8#作者 MAINTAINER wk# 把可执⾏jar包复制到基础镜像的根⽬录下ADD smart-admin.jar /smart-admin.jar# 镜像要暴露的端⼝,如要使⽤端⼝,在执⾏docker run命令时使⽤-p⽣效EXPOSE 8080# 在镜像运⾏为容器后执⾏的命令ENTRYPOINT ["java","-jar","/smart-admin.jar"] 3.2:使⽤ docker build 命令构建镜像,基本语法docker build -t wkdocker01/smart-admin:v1 .# -f指定Dockerfile⽂件的路径# -t指定镜像名字和TAG# .指当前⽬录,这⾥实际上需要⼀个上下⽂路径 4.运⾏⾃⼰的项⽬docker run --name smart-admin -p 8080:8080 -d wkdocker01/smart-admin:v1三:把⾃⼰的vue前端项⽬上传到docker容器运⾏: 1.⾸先创建⼀个default.conf⽂件,⽤户替换nginx⽬录下的default.conf⽂件server {listen 80;server_name 127.0.0.1; # 修改为docker服务宿主机的iplocation / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ /index.html =404;}location /smart-admin-api{ # smart-admin-api是vue项⽬⾥.env.production⾥的地址proxy_pass http://127.0.0.1:10086/smart-admin-api/; # 这⾥写的是你后端接⼝的地址}error_page 500502503504 /50x.html;location = /50x.html {root html;}} 该配置⽂件定义了⾸页的指向为 /usr/share/nginx/html/index.html, 所以我们可以⼀会把构建出来的index.html⽂件和相关的静态资源放到/usr/share/nginx/html⽬录下。
如何创建自定义Docker镜像Docker是一种流行的容器化平台,能够帮助开发者将应用程序与所需的依赖项打包成一个独立运行的容器。
然而,有时候我们需要在Docker基础镜像的基础上进行一些定制化的改动,以满足特定的需求。
在本文中,我们将探讨如何创建自定义的Docker镜像。
1. 选择基础镜像创建自定义的Docker镜像的第一步是选择一个基础镜像。
基础镜像是一个已经被构建好的Docker镜像,它包含了一个基本的操作系统和一些常见的软件包。
常见的基础镜像包括Ubuntu、CentOS等。
根据自己的需要选择一个合适的基础镜像并从Docker Hub上下载。
2. 编写DockerfileDockerfile是用来构建Docker镜像的脚本文件。
首先,在你的项目根目录下创建一个名为Dockerfile的文件。
然后,使用任意文本编辑器打开Dockerfile,并开始写入构建镜像所需的指令。
3. 设置镜像的基础环境在Dockerfile中,可以使用RUN指令运行命令。
这些命令将在构建容器的过程中执行。
例如,你可以使用RUN指令来安装软件包、更新系统或执行其他自定义初始化操作。
4. 复制文件到镜像中使用COPY指令将本地文件复制到镜像中的指定位置。
这对于将应用程序代码、配置文件或其他资源复制到镜像中非常有用。
5. 定义容器内部执行的命令使用CMD或ENTRYPOINT指令来定义在容器启动时要执行的命令。
这可以是一个可执行文件、一个脚本或其他类型的命令。
CMD指令将在容器启动时自动运行,而ENTRYPOINT指令将在CMD指令之前执行。
6. 构建自定义镜像当你完成了Dockerfile的编写,保存并关闭文件后,你可以使用docker build命令来构建自定义镜像。
在命令行中导航到项目根目录,并运行以下命令:```docker build -t <镜像名称>:<标签> .```其中,“-t”参数用于指定镜像的名称和标签,而最后的“.”表示当前目录为构建上下文。
Docker镜像的构建和使用方法Docker是目前最热门的容器化技术之一,它为开发者和系统管理员提供了一种便捷、可移植、可扩展的应用部署和管理方式。
镜像是Docker的核心概念之一,它是用于创建 Docker 容器的模板。
本文将介绍Docker镜像的构建和使用方法,帮助读者更好地理解和利用Docker技术。
一、Docker镜像的构建Docker镜像的构建可以通过两种方式:基于现有镜像进行修改和创建全新的镜像。
1.1 基于现有镜像进行修改基于现有镜像进行修改通常是通过编写Dockerfile进行的。
Dockerfile是一个文本文件,包含了一条条的指令,每条指令构建一层,从而最终构成一个完整的镜像。
常用的Dockerfile指令包括FROM、RUN、COPY、ADD、CMD等,可以用来指定基础镜像、安装软件依赖、拷贝文件、设置环境变量等。
举个例子,假设我们要构建一个基于Ubuntu的Java应用镜像,可以按照以下步骤进行:1. 创建一个空的目录,并在该目录下创建一个名为Dockerfile的文件。
2. 编写Dockerfile,指定基础镜像为Ubuntu,安装Java运行环境。
3. 使用docker build命令构建镜像,例如:docker build -t my-java-app .4. 构建过程中,Docker将按照Dockerfile中的指令逐步执行,最终生成一个可运行的镜像。
1.2 创建全新的镜像除了修改现有镜像外,我们还可以从零开始构建全新的镜像。
这种方式需要手动操作并保存每一层的改变成为一个新的镜像。
具体步骤如下:1. 在宿主机上创建一个空的容器,可以使用docker run命令创建。
2. 进入容器,执行相关操作,如安装软件、配置环境等。
3. 在容器内使用docker commit命令将容器保存为镜像,例如:docker commit container_id my-image:tag。
从零开始构建Docker镜像步骤详解Docker是一种流行的容器化平台,可以让开发者们更方便地构建、部署和管理应用程序。
构建Docker镜像是使用Docker的第一步,它是利用一系列指令和配置文件定义一个容器的运行环境,并将其打包为一个可复用的镜像。
本文将详细介绍从零开始构建Docker镜像的步骤。
1. 编写DockerfileDockerfile是构建Docker镜像的关键文件,它包含了一系列指令,用于定义镜像的各个组件和配置。
首先,我们需要创建一个空白的文件,并使用文本编辑器打开它。
第一行指令通常是基础镜像的选择,例如“FROM ubuntu:latest”表示使用最新的Ubuntu作为基础镜像。
接下来,我们可以使用“RUN”指令来执行一些命令,例如安装软件包、配置环境变量等。
此外,还可以使用“COPY”指令将本地文件复制到镜像中,使用“CMD”指令定义容器启动后要运行的命令。
根据实际需求,可以编写更多的指令来自定义镜像。
2. 构建镜像在编写完Dockerfile后,我们可以使用“docker build”命令来构建镜像。
首先,打开终端或命令提示符,并进入Dockerfile所在的目录。
然后,运行以下命令:“docker build -t <镜像名称>:<标签> .”其中,“-t”选项用于指定镜像的名称和标签,后面的“.”表示Dockerfile所在的目录。
系统将按照Dockerfile的指令和配置来构建镜像,并输出构建过程的日志。
3. 运行容器完成镜像构建后,我们可以使用“docker run”命令来运行容器,并验证镜像是否正常工作。
运行以下命令:“docker run -it <镜像名称>:<标签>”,其中,“-it”选项用于指定使用交互式终端启动容器。
系统将使用指定的镜像创建一个新的容器,并进入容器的终端。
在容器内部,我们可以执行命令、查看文件、启动应用程序等等。
使用Docker构建轻量级容器镜像的方法与技巧随着云计算和容器化技术的快速发展,Docker已成为业界最热门的容器化解决方案之一。
Docker的核心理念是以容器为单位来运行应用程序,使得开发者可以将应用程序及其依赖项打包成一个可移植、自包含的镜像,实现跨平台、一致性部署。
本文将介绍使用Docker构建轻量级容器镜像的方法与技巧,旨在帮助读者更好地进行容器化应用的开发和部署。
一、选择合适的基础镜像在构建Docker镜像时,选择合适的基础镜像非常重要。
基础镜像是一种包含了操作系统和软件依赖项的基础环境。
构建轻量级镜像的关键就是选择一个尽可能小且只包含必要组件的基础镜像。
例如,基于Alpine Linux的镜像通常比基于Ubuntu的镜像更小,因为Alpine Linux是一个轻量级的Linux发行版。
使用小巧的基础镜像能够显著减少镜像的大小,加快镜像的拉取和部署速度。
二、优化镜像构建过程为了使得构建镜像的过程更加高效,可以采取以下几种优化方法:1. 使用多阶段构建:多阶段构建是一种将构建过程分为多个阶段的方法,利用每个阶段的产物来构建下一个阶段。
这样可以避免将不必要的构建工具和依赖项打包进最终的镜像中,从而减小镜像的体积。
2. 缓存依赖项安装:在Dockerfile中,可以将依赖项的安装过程放在靠前的位置,并使用缓存来避免重复安装。
这样可以大幅提升构建速度。
3. 压缩和删除不必要的文件:在构建镜像的过程中,可以使用压缩命令将需要的文件压缩为tar包,然后在镜像文件中解压缩。
同时,还应该删除不必要的临时文件和日志,以减小镜像的体积。
三、合理利用容器的特性Docker作为一种容器化技术,提供了许多特性供开发者使用。
合理利用这些特性可以进一步提升容器镜像的性能和可维护性。
1. 利用Docker的分层存储:Docker的镜像存储是一种分层存储的机制,对于多个镜像之间共享的文件系统层只需要保存一份副本。
因此,可以通过将共享的文件系统层放在基础镜像中,再在其他镜像中添加自定义的文件系统层,从而实现镜像共享、重复使用的效果。
如何通过Docker构建自定义镜像Docker是一种开源的应用容器引擎,广泛应用于软件开发、测试和部署领域。
通过使用Docker,我们可以将应用程序及其依赖的组件打包成一个独立的容器,从而实现轻量级、可移植和可扩展的应用部署。
在Docker中,镜像(Image)是构建容器所需的基础,本文将介绍如何通过Docker构建自定义镜像。
## 了解Docker镜像在构建自定义镜像之前,我们首先需要了解Docker镜像的概念。
Docker镜像是一个只读的容器模板,它包含了启动容器所需的所有文件和配置。
镜像可以被视为一个类比于类的概念,可以通过镜像创建多个容器实例。
Docker镜像采用分层存储的结构,每个层级都是一个文件系统的快照。
这种分层存储不仅能够节省存储空间,还可以轻松地复用已有的镜像层级。
## 创建Dockerfile要构建自定义镜像,我们需要编写一个名为Dockerfile的文件。
Dockerfile是一个文本文件,其中包含了一系列用于构建镜像的指令和配置参数。
通过编写Dockerfile,我们可以定义镜像的基础操作系统、安装软件包、设置环境变量、添加文件等。
例如,以下是一个简单的Dockerfile示例,用于构建一个基于Ubuntu的镜像,并安装了Node.js环境:```# 设置基础镜像FROM ubuntu:latest# 安装Node.js和npmRUN apt-get update && apt-get install -y nodejs npm# 设置工作目录WORKDIR /app# 将应用程序代码复制到镜像中COPY . .# 安装应用程序依赖RUN npm install# 设置容器启动时执行的命令CMD ["npm", "start"]```在这个示例中,首先使用`FROM`指令指定了一个基础镜像(这里使用的是最新版本的Ubuntu),然后使用`RUN`指令执行了一系列命令,包括更新软件包列表、安装Node.js和npm等。
Docker 定制运行容器镜像的2种方法一、需求由于在测试环境中使用了docker官网的centos 镜像,但是该镜像里面默认没有安装ssh服务,在做测试时又需要开启ssh。
所以上网也查了查资料。
下面详细的纪录下。
在centos 容器内安装ssh后,转成新的镜像用于后期测试使用。
二、镜像定制第一种方式(手动修改容器镜像)1.先下载centos镜像[root@docker ~]# docker pull centos2.启动容器并进行配置启动容器,[root@docker ~]# docker run -it -d --name test-centos1 centosd72250ecaa5e3e36226a1edd749f494d9f00eddc4143c81ac3565aa4e551791a命令注释:-it :进行交互式操作-d :等同于-d=true,容器将会在后台运行,不然执行一次命令后,退出后,便是exit状态了。
--name : 容器启动后的名字,默认不指定,将会随机产生一个名字。
或者使用-name="containers_name"centos:使用的镜像名称进入容器,安装ssh server,以及配置开机启动[root@docker ~]# docker exec -it test-centos1 /bin/bash[root@d72250ecaa5e /]# ifconfigbash: ifconfig: command not found注:命令最后参数/bin/bash:指进入容器时执行的命令(command)原文来自:飞走不可^_^ /hanyifeng/p/6116067.html我们检查了下容器,暂时安装以下必用的软件吧net-tools,openssh-server[root@d72250ecaa5e /]# yum install openssh-server net-tools -y创建ssh 所需的目录,并在根目录创建sshd 启动脚本复制代码[root@d72250ecaa5e /]# mkdir -pv /var/run/sshdmkdir: created directory '/var/run/sshd'[root@d72250ecaa5e /]# cat /auto_sshd.sh/usr/sbin/sshd -D[root@d72250ecaa5e /]# chmod +x /auto_sshd.sh复制代码修改容器内root 的账户密码[root@d72250ecaa5e /]# echo "root:iloveworld" | chpasswd生成ssh 主机dsa 密钥(不然ssh 该容器时,会出现错误。
)[root@d72250ecaa5e /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key[root@d72250ecaa5e /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key我们加一个history记录的时间功能吧,这样方便后期查看echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profileOK,配置基本完毕咯。
清理命令历史纪录,之后退出容器。
现在可以生成一个新的docker 镜像了。
3.配置完成后,进行打包成新的镜像复制代码[root@docker ~]# docker commit test-centos1 centos_sshd:7.0sha256:6e3330b30dfff5f029f102874e54cfffffbc37dcf2a4eb7304c817148fbc944d[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos_sshd 7.0 6e3330b30dff 8 seconds ago 310.1 MBdocker.io/ubuntu latest e4415b714b62 12 days ago 128.1 MB复制代码命令注释:commit:提交一个具有新配置的容器成为镜像,后面跟容器的name 或者容器Id ,最后是生成新镜像的名字更新:这条命令更方便以后启动,如下:[root@docker ~]# docker commit --change='CMD ["/auto_sshd.sh"]' -c "EXPOSE 22" test-centos1 centos_sshd:7.0sha256:7bb4efd82c4ff1f241cbc57ee45aab1b05d214b1e9fcd51196696c67d480e70b命令注释:--change : 将后期使用此镜像运行容器时的命令参数、开放的容器端口提前设置好。
4.验证查看镜像,并启动新的容器复制代码[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos_sshd 7.0 7bb4efd82c4f 4 minutes ago 310.1 MB[root@docker ~]# docker run -d -it --name centos_7.0-1 centos_sshd:7.0ec17e553d5c4c60865afeb99df8dfd1f4e7d4ba6e1b0d5516f9127f09d1d6356[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESec17e553d5c4 centos_sshd:7.0 "/auto_sshd.sh" 6 seconds ago Up 5 seconds 22/tcp centos_7.0-1复制代码进行ssh测试,先查看一下该容器的ip,之后ssh。
ok复制代码[root@docker ~]# docker exec centos_7.0-1 hostname -i172.17.0.4[root@docker ~]# ssh root@172.17.0.4The authenticity of host '172.17.0.4 (172.17.0.4)' can't be established.RSA key fingerprint is 87:88:07:12:ac:0a:90:28:10:e1:9e:eb:1f:d6:c9:9d.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '172.17.0.4' (RSA) to the list of known hosts.root@172.17.0.4's password:Last login: Tue Nov 29 16:00:49 2016 from gateway[root@ec17e553d5c4 ~]# w16:34:17 up 63 days, 7:49, 1 user, load average: 0.00, 0.02, 0.05USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 gateway 16:34 1.00s 0.00s 0.00s w[root@ec17e553d5c4 ~]# ping gatewayPING gateway (172.17.0.1) 56(84) bytes of data.64 bytes from gateway (172.17.0.1): icmp_seq=1 ttl=64 time=0.048 ms复制代码第二种方式(推荐:利用Dockerfile文件)我的认为它就像ansible的playbook一样。
Dockerfile包含创建镜像所需要的全部指令。
基于在Dockerfile中的指令,我们可以使用Docker build命令来创建镜像。
通过减少镜像和容器的创建过程来简化部署。
1.创建Dockerfile文件新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱)复制代码[root@docker ~]# mkdir centos7-dockerfile[root@docker centos7-dockerfile]# cat Dockerfile# The dockerfile has Change add sshd services on Centos7.0#centos7:latest imageFROM centos:latestMAINTAINER Yifeng,/hanyifeng#Install sshd net-toolsRUN yum install openssh-server net-tools -yRUN mkdir /var/run/sshd#Set password for rootRUN echo 'root:iloveworld' | chpasswdRUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config#Set history recordENV HISTTIMEFORMAT "%F %T "#Fix sshd service:Read from socket failed: Connection reset by peer?RUN ssh-keygen -A#Change timezone CSTRUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#Open 22 portEXPOSE 22#Auto running sshd serviceCMD ["/usr/sbin/sshd","-D"]复制代码上述文件内容就是一个dockerfile 常见的命令组合。