linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法

简介: linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法

Docker Image 的制作两种方法

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

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

一、. 语法: docker commit <container 的 ID>或<image_name>

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

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

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

[root@1d3563200047 /]# exit

[root@146~]# docker commit 1d3563200047  docker.io/centos:apache      (:apache 为打包的标签)

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

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

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

以下操作要在 docker 物理机上操作:

2.1、创建工作目录

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

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

[root@146 docker-build]# touch Dockerfile

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

2.2、编辑 Dockerfile   创建工作目录

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

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

[root@146 docker-build]# touch Dockerfile     注: make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile     Dockerfile 用来创建一个自定义的 image,包含了用户指定的软件依赖等。

[root@146 docker-build]# vim Dockerfile

   FROM docker.io/centos:latest

   MAINTAINER <cs@name.cn>

   RUN yum -y install httpd

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

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

   CMD /usr/local/bin/start.sh

注释:

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

CMD /usr/local/bin/start.sh

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

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

CMD echo hello world #container 启动时执行的命令或启动服务,但是一个 Dockerfile 中叧

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

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

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

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

创建 index.html

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

2.4、使用命令 build 来创建新的 image

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

docker build -t docker.io/centos:httpd ./

2.5 Docker Image 的发布

方法 1:Save Image To TarBall

方法 2:Push Image To Docker Hub

方法 1:Save Image To TarBall          保存 Image 到 tar 包

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

docker save -o docker.io-centos-httpd-image.tar odcker.io/centos:httpd

[root@146 ~]# docker rmi docker.io/centos:httpd         #删除镜像,这里写自己镜像的 ID或名字

[root@146 ~]# docker images                                      #发现在镜像已经被删除

[root@146 docker-build]# docker load -i docker.io-centos-httpd-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

docker  run  -d  -p  80:80  docker.io/centos:httpd

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

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

[root@146 ~]# docker ps

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

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

 

配置容器 root 密码:

[root@a9c3a7bf2054 /]# echo 123456 | passwd --stdin root

在容器中安装 sshd 服务,然后把 22 端口映射出去,就可以远程登弽容器了。

 

 

 [root@localhost ~]# docker run -it docker.io/centos:latest /bin/bash         #启动一个实例

[root@local ~]# docker logs b93795788ee0#容器的 ID 可以写全,只要唯一就可以了   #查看日志

列出所有运行中容器  docker ps        docker ps -a        #-a 列出所有容器(包含沉睡/退出状态的容器);

杀死一个容器。 比如:杀死一个正在后台运行的容器

docker kill b93795788ee0       #杀死一个容器

docker rm -f  b93795788ee0      # -f 强制删除

目录
相关文章
|
6天前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
|
11天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
331 28
|
7天前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
7天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
13天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
81 2
|
14天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
28 1
|
16天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
7天前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
23 0
|
3月前
|
存储 Linux 调度
OpenStack如何支持虚拟化技术?
【8月更文挑战第21天】
211 0
|
1月前
|
存储 分布式计算 分布式数据库
云计算和虚拟化技术
云计算是指把计算资源、存储资源、网络资源、应用软件等集合起来,采用虚拟化技术,将这些资源池化,组成资源共享池,共享池即是“云”。
140 64