Docker镜像制作详解介绍

最近由于工作原因,需要对Docker镜像进行制作,这里记录下,也许对大家也有一定帮助!

写在前面:本文docker镜像制作方法更适用于基于已有docker镜像一次性修改。

推荐用Docker File制作docker镜像。

原理是一样的,但是用docker file制作docker镜像能够记录下操作步骤,方便以后更改或者镜像丢失后重新创建。
本文以Ubuntu为基础镜像,预启动一个django项目和ssh服务,制作一个新的镜像。

1、基础镜像

我选用的是从Docker官网下载的ubuntu镜像。

docker run ubuntu

或者

docker pull ubuntu

2、安装ssh服务

docker run -i -t ubuntu /bin/bash #创建一个容器,-t是临时终端。

进入ubuntu后,安装openssh

apt-get install openssh-server #安装ssh

#需要修改/etc/sshd/sshd_config文件中内容

PermitRootLogin yes

UsePAM no

修改ubuntu的root用户密码,以便以后ssh登陆:

sudo passwd root

3、制作新的镜像

到此,我们需要把这个带有ssh服务的容器提交成一个镜像,方便以后在这个基础上各种改造:

docker commit <container id> <image name>

4、基于现有ssh服务的Ubuntu镜像,加入django项目,并设置随容器自启动

ok,经过以上步骤,doker images可以查看,新提交的doker镜像已经在里面了,例如image name为ssh-ubuntu的新镜像。
最基础的Ubuntu容器已经没有作用了
利用

doker stop <container id>
doker rm <Container id>

清楚刚刚启动的最基础的Ubuntu容器

下面,要基于我们新的ssh-ubuntu进行个性化定制,首先,要将这个镜像运行起来

docker run -d -p 5001:22 ssh-ubuntu /usr/sbin/sshd -D

(-p为端口映射 容器中22端口应射程主机5001端口  ||   /usr/sbin/sshd -D是指定容器启动后要运行的command,本处是启动ssh服务)

容器启动后,我们可以通过ssh的方式,登陆到容器中

ssh root@doker0_ip -p 5001(22映射端口)

进入到容器后,就可以进行下一步个性化定制了。例如我要把我的django项目放到镜像中,并随着容器启动而启动。

(1)把django项目拷贝到容器中,用scp命令即可。

(2)比较通用的开机启动进程方法:

安装supervisor!

apt-get update && apt-get install supervisor

(如果apt-get install找不到包,先update一下)

然后编辑配置文件,vi /etc/supervisord.conf

[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D

[program:tomcat]
command=python ~/manager.py runserver 0.0.0.0:9999

然后保存退出即可。

用3小节方法重新制作新的镜像,清除当前容器即可。

5、运行新镜像

docker run -d -p 5001:22 -p 5000:9999 <image-name> /etc/supervisord
此时,可以访问主机5000端口,看看能不能访问到容器里面的django项目。
镜像制作大体过程至此完成。

*****************************************************************************************************************************************************

docker 本身是有push 来上传的 index.docker.io 的,使用是用pull拉取。但是没有条件搭建本地docker仓库或者需要将应用导出到另外一个Docker环境中,我们可以将docker镜像导出到一个文件,具体做法如下:

sudo docker export <容器id>  >  docker_app.tar

完成后我们刚才制作的容器就导出成了 docker_app.tar 文件, 以后在其他机器部署的时候执行导入

cat docker_app.tar | sudo docker import - docker_app

管道后面的 docker_app 为导入后image命名,自己指定

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 详解Docker基于已有的镜像制新的镜像

    1.根据运行的容器制作镜像 #查看所有的容器 docker ps #暂停当前容器 docker pause COTNAINER-ID #将容器运行当前状态提交 docker commit COTNAINER-ID #根据COMMIT-ID打包容器Tag docker tag COMMIT-ID 经过以上几个步骤,根据当前运行的容器制作镜像就完成了. 2.上传镜像到Docker Hub 如果未登录Docker Hub,需要登录Docker Hub docker login #输入用户名和密码 推送

  • 利用Docker制作Nginx+PHP镜像的步骤详解

    前言 这篇文章给大家介绍的是使用Docker制作nginx+php的镜像,本文里的镜像是centos + nginx 1.9.7 + php 5.6.14,下面话不多说,直接看实现的步骤吧. 1.首先下载到nginx和php: nginx-1.9.5.tar.gz 下载:http://nginx.org/en/download.html php-5.6.14.tar.gz   下载:>http://php.net/downloads.php 2.以及扩展包so: memcache-2.2.4.t

  • Docker镜像制作详解介绍

    最近由于工作原因,需要对Docker镜像进行制作,这里记录下,也许对大家也有一定帮助! 写在前面:本文docker镜像制作方法更适用于基于已有docker镜像一次性修改. 推荐用Docker File制作docker镜像. 原理是一样的,但是用docker file制作docker镜像能够记录下操作步骤,方便以后更改或者镜像丢失后重新创建. 本文以Ubuntu为基础镜像,预启动一个django项目和ssh服务,制作一个新的镜像. 1.基础镜像 我选用的是从Docker官网下载的ubuntu镜像.

  • jenkins构建Docker 镜像实例详解

     jenkins构建Docker 镜像实例详解 前言:jenkins有Docker镜像,而之前我们说过使用jenkins打包Docker镜像,那么可否用jenkins的Docker镜像打包Docker镜像呢? 环境: CentOS 7     Docker 1.10.3 1.本机安装docker环境,并配置TCP访问接口 # vi /usr/lib/systemd/system/docker.service 修改ExecStart为: ExecStart=/usr/bin/docker daem

  • docker网络配置过程详解介绍

    目录 Linux内核实现名称空间的创建 操作Network Namespace 创建veth pair 实现Network Namespace间通信 四种网络模式配置 容器的常用操作 自定义docker0桥的网络属性信息 Linux内核实现名称空间的创建 ip netns命令 可以借助ip netns命令来完成对 Network Namespace 的各种操作.ip netns命令来自于iproute安装包,一般系统会默认安装,如果没有的话,请自行安装. 注意:ip netns命令修改网络配置时

  • Docker基础命令详解

    docker基本概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上. Docker是一个重新定义了程序开发测试.交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的"Build once,Run anywhere" 创建镜像 创建镜像的方法有三种: 基于已有的容器创建 基于本地模板导入 基于dockerfile 基于已有的容器创建 主要使用docker

  • Docker基本命令使用详解(推荐)

    因为工作中需要将服务容器化,所以最近开始学习Docker相关的知识,对于Docker入门常用的命令总结如下: 1. 运行容器 $ sudo docker run -i -t ubuntu /bin/bash -i 标志保证容器中的STDIN是开启的 -t 标志告诉Docker为要创建的容器分配一个伪tty终端 ubuntu 表示我们创建容器使用的镜像 /bin/bash 表示当容器创建完成之后,Docker就会执行容器中的/bin/bash命令 2. 给容器命名 $ sudo docker ru

  • Ubuntu下安装配置Docker的教程详解

    获取Docker 1.准备 Docker要求64位Linux且内核版本在3.10以上,在终端里输入uname -r查看,如图: 接下来更新源并查看是否有https方法: sudo apt-get update sudo apt-get install apt-transport-https ca-certificates 2.添加key 输入以下命令添加GPG key: sudo apt-key adv \ --keyserver hkp://ha.pool.sks-keyservers.net

  • mysql8.x docker远程访问配置详解

    目录 环境情况 遇到的错误 解决方法 1. 登录 mysql docker 内部 2. 设置root密码 3. 设置 root 远程访问权限 4. 设置普通用户 myuser 的远程访问 环境情况 mysql 8.x 是通过 docker 方式部署的,启动的 docker-compose.yml 如下: version: "3.2" services: mysql: container_name: mysql image: "mysql:8.0" ports: -

  • Docker容器操作方法详解

    目录 一.常用命令 1.创建并启动容器 2.列出所有容器 3.进入容器 4.退出容器 5.停止容器 6.启动/重启一个已停止的容器 7.删除容器 二.使用帮助 一.常用命令 下面按照使用容器中的流程: 创建并启动容器 > 查询容器 > 进入容器 > 退出容器 > 停止容器 > 启动/重启容器 > 删除容器来介绍Dockers常用命令,带领小伙伴快速入门. 1.创建并启动容器 docer run 当操作者执行docker run时,运行的容器进程是隔离的,因为它有自己的文

  • RFO SIG之openEuler AWS AMI 制作详解

    目录 正文 调整硬盘分区大小 Snapshot 和 Base AMI 的创建 使用 Packer 创建包含 Cloud init 机制的 AMI 镜像 构建 ARM 架构的 AMI 镜像 已构建的 AMI 镜像使用 About SUSE Rancher 正文 本篇将主要介绍 openEuler AWS AMI 镜像制作的详细过程. 通过创建 AWS AMI 镜像可将 openEuler 与 AWS 云服务相结合,支持云环境中标准的 ssh key注入.分区扩容.用户数据执行等功能,并使用 clo

  • 使用TLS加密通讯远程连接Docker的示例详解

    默认情况下,Docker 通过非联网 UNIX 套接字运行.它还可以使用 HTTP 套接字进行可选通信. 如果需要以安全的方式通过网络访问 Docker,可以通过指定标志将 Docker 标志指向受信任的 CA 证书来启用 TLS. 在守护程序模式下,它只允许来自由该 CA 签名的证书验证的客户端的连接.在客户端模式下,它仅连接到具有该 CA 签名的证书的服务器. # 创建CA证书目录 [root@localhost ~]# mkdir tls [root@localhost ~]# cd tl

随机推荐