导航:首页 > 源码编译 > docker反编译镜像

docker反编译镜像

发布时间:2022-04-24 00:04:46

1. docker镜像导出

1.首先使用docker images命令查看当前系统的镜像

2.export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出 SAVE: docker save -o pod-infrastructure.tar pod-infrastructure:latest 或 docker save > pod-infrastructure.tar pod-infrastructure:latest 或者docker save 镜像id > pod-infrastructure.tar 其中-o和>表示输出到文件,pod-infrastructure.tar为目标文件,pod-infrastructure:latest是源镜...

3.将tar镜像包scp到目标主机

2. 推荐如何系统的学习java

如何系统学习java体系

学java首先要学 J2SE,它是java体系的基础,也是重中之重。很多人往往不重视基础,其实这是舍本逐末的做法。说这么多就是希望大家能重视基础,能在这条路上走的更远。

学j2se有下面几个目标:
1、你要能真正理解面向对象的优势,理解为什么不是面向过程。
2、掌握java语法基础。包括异常处理、多线程、网络编程、GUI编程等
3、如果你对swing不感兴趣,可以跳过它。
这一阶段结束后,你需要能独立写一个小游戏,比如坦克大战、俄罗斯方块、贪吃蛇等。
当你完成J2SE的学习之后,你就要开始学习java web了。
你需要掌握web基础知识:html、css、javascript、ajax、jQuery。
别怕,这些技术看起来很多,其实也没要你精通它们,只是要你能在用到它们的时候,能通过快速查阅相关文档,能正确使用它们。如果这一阶段顺利的话,你可能还用不到一个月。
学习servlet、jsp、jdbc。
这些是javaweb的基础,如果你自学有难度,可以在网上下载一些相关视频,帮助理解,降低学习难度曲线。
当你完成上一阶段的学习后,你就可以进入J2EE的阶段了。
这一阶段,你可能会见到很多各种各样的框架,会让你眼花缭乱,头晕目眩。不过别担心,你只需要学习三个就足够了。它们是struts2、hibernate、spring。这些框架为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制。
首先你需要学习三个框架的基本配置和使用,直到你能熟练搭建一个ssh项目。
如果学有余力,你可以深入学习这些框架的设计模式。
学习完三大框架之后,其实你学的已经足够多了。如果对移动应用的开发感兴趣,你可以接着学习安卓开发。安卓开发不需要其他知识,只要你j2se学的不错,学安卓开发对你就没太大难度了。

3. docker 能将本地环境做成镜像吗

当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。

常言道,“不要重复发明轮子!”

在使用Docker时,构建自己的镜像之前,最好在Docker Hub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自Docker Hub的官方镜像,因为可以信任它们的质量。

在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。

然而,大多数时间都在使用Docker Hub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:
image 1 --
\
---> merged_image_12
/
image 2 --

此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。

这可能吗?
那么,是否存在工具能够像这样做吗:docker merge image2 image2 merged_image?

没有!
你甚至不可以用下面的方式来构建Dockerfile:
FROM image1
FROM image2

简而言之,在一个Dockerfile里不能有多个基础镜像。

但是我需要这个功能!
唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在Docker Hub上获得一个镜像的Dockerfile吗? 幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用docker history命令,通过反向工程获取。

怎么来使用?
在你的机器上使用docker pull从Docker Hub下载镜像。
docker pull image1
docker pull image2

然后使用docker history来取得构建这两个容器时运行的命令。
docker history --no-trunc=true image > image1-dockerfile
docker history --no-trunc=true image2 > image2-dockerfile

接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。

限制
不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行:
ADD file:1ac56373f7983caf22
或 ADD dir:cf6fe659e9d21535844
这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。
-

4. docker基础镜像是什么意思

镜像是 Docker 运行容器的前提,Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
对于docker镜像,官方的定义如下: An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run.‘ 映像是一个只读模板,带有创建Docker容器的指令。通常,一个映像是基于另一个映像的,还需要进行一些额外的定制。例如,您可以构建一个基于ubuntu映像的映像,但是安装Apache web服务器和您的应用程序,以及使您的应用程序运行所需的配置细节。

5. 如何使用Dockerfile构建镜像

在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。 制作镜像的方式主要有两种: 通过docker commit 制作镜像 通过docker build 制作镜像 这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。 docker commit docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。

6. Docker镜像 问题

dockerpullhttpd

执行这个之后可以先用

dockerimages

查看一下已经下载了的镜像

7. 如何在"特殊"的网络环境下编译 Docker

由于 Docker 编译需要依赖于 Docker Daemon ,所以只能在 64 位的 linux 环境下先安装 Docker 程序,再从 Github 上克隆 Docker 的代码进行编译。
在 Docker 的目录下执行 make 命令将默认执行 Makefile 中 make binary 指令进行编译。
?

default: binary

all: build
$(DOCKER_RUN_DOCKER) hack/make.sh

binary: build
$(DOCKER_RUN_DOCKER) hack/make.sh binary

cross: build
$(DOCKER_RUN_DOCKER) hack/make.sh binary cross

从以上的 Makefile 可以看出,执行 make、make binary、make all 或 make cross 都可以得到可运行的 Docker 程序。
在 Mac OS 环境下使用 brew 的命令安装 Docker ,只能得到一个 docker client 的二进制程序,如果以 daemon 的方式运行,会得到 ‘This is a client-only binary - running the Docker daemon is not supported.’ 的错误提示信息。
方法 1.
使用 VirtualBox 或者 VMWare Workstation 安装一个 Linux 的虚拟机。宿主机使用 VPN 等方案使网络“正常”访问各种“服务”,虚拟机网卡使用 NAT 模式。在 Linux 虚拟机内使用 make 进行编译 Docker 不会有任何网络问题。只是编译速度受限于 VPN 等网络解决方案,有可能等待时间很长。
方法 2.
Docker 每次发布新版本,都会在 docker-dev 的镜像仓库发布一个新的标签,这个镜像仓库包含了编译 Docker 镜像所依赖的所有环境,只需替换 Docker 代码目录下的 Dockerfile 即可实现编译 Docker 。
?

FROM docker.cn/docker/docker-dev:v1.2.0
VOLUME /var/lib/docker
WORKDIR /go/src/github.com/docker/docker
ENV DOCKER_BUILDTAGS apparmor selinux
ENTRYPOINT [“hack/dind”]
COPY . /go/src/github.com/docker/docker

Dockerfile 中只保留必要的步骤就可以实现编译了。
方法 3.
对 Docker 代码中的 Docker 进行彻底的改造,用国内的各种镜像替换其中不能在“正常”网络条件下访问的镜像,使得代码能够快速编译通过。
?

FROM docker.cn/docker/ubuntu:14.04.1
MAINTAINER Meaglith Ma <[email protected]> (@genedna)

RUN echo "deb http://mirrors.aliyun.com/ubuntu trusty main universe" > /etc/apt/sources.list && echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted" >> /etc/apt/sources.list && echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ trusty universe" >> /etc/apt/sources.list && echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates universe" >> /etc/apt/sources.list && echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted" >> /etc/apt/sources.list && echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security universe" >> /etc/apt/sources.list && echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security universe" >> /etc/apt/sources.list

RUN apt-get update && apt-get install -y \
aufs-tools \
automake \
btrfs-tools \
build-essential \
curl \
dpkg-sig \
git \
iptables \
libapparmor-dev \
libcap-dev \
libsqlite3-dev \
lxc=1.0* \
mercurial \
parallel \
reprepro \
ruby1.9.1 \
ruby1.9.1-dev \
s3cmd=1.1.0* \
unzip \
--no-install-recommends

RUN git clone --no-checkout https://coding.net/genedna/lvm2.git /usr/local/lvm2 && cd /usr/local/lvm2 && git checkout -q v2_02_103

RUN cd /usr/local/lvm2 && ./configure --enable-static_link && make device-mapper && make install_device-mapper

RUN curl -sSL http://docker-cn.qiniudn.com/go1.3.1.src.tar.gz | tar -v -C /usr/local -xz
ENV PATH /usr/local/go/bin:$PATH
ENV GOPATH /go:/go/src/github.com/docker/docker/vendor
ENV PATH /go/bin:$PATH
RUN cd /usr/local/go/src && ./make.bash --no-clean 2>&1

ENV DOCKER_CROSSPLATFORMS \
linux/386 linux/arm \
darwin/amd64 darwin/386 \
freebsd/amd64 freebsd/386 freebsd/arm
ENV GOARM 5
RUN cd /usr/local/go/src && bash -xc 'for platform in $DOCKER_CROSSPLATFORMS; do GOOS=${platform%/*} GOARCH=${platform##*/} ./make.bash --no-clean 2>&1; done'

RUN mkdir -p /go/src/github.com/gpmgo \
&& cd /go/src/github.com/gpmgo \
&& curl -o gopm.zip http://gopm.io/api/v1/download?pkgname=github.com/gpmgo/gopm\&revision=dev --location \
&& unzip gopm.zip \
&& mv $(ls | grep "gopm-") gopm \
&& rm gopm.zip \
&& cd gopm \
&& go install

RUN gopm bin -v code.google.com/p/go.tools/cmd/cover

RUN gem sources --remove https://rubygems.org/ \
&& gem sources -a https://ruby.taobao.org/ \
&& gem install --no-rdoc --no-ri fpm --version 1.0.2

RUN gopm bin -v -d /go/bin github.com/cpuguy83/go-md2man@tag:v1

RUN git clone -b buildroot-2014.02 https://github.com/jpetazzo/docker-busybox.git /docker-busybox

RUN /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY' > /.s3cfg

RUN git config --global user.email '[email protected]'

RUN groupadd -r docker
RUN useradd --create-home --gid docker unprivilegeser

VOLUME /var/lib/docker
WORKDIR /go/src/github.com/docker/docker
ENV DOCKER_BUILDTAGS apparmor selinux

ENTRYPOINT ["hack/dind"]

COPY . /go/src/github.com/docker/docker

以上的命令把 Ubuntu 镜像中的源替换为国内速度较快的阿里源;把 lvm2 镜像到国内的 Git 托管服务 coding.net;从 七牛云存储 保存的 Golang 源码进行获取和编译;使用 gopm 下载编译所需要的 Library ;最后把其中 gem 源切换到淘宝。至此,可以在“特殊”的网络条件下快速编译 Docker 。

8. docker怎么将宿主机系统生成镜像

初次安装部署好docker后,大多数镜像可以从DockerHub 提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具 febootstrap

epel6的源提供febootstrap的RPM包

yum install docker-io febootstrap -y

service docker start

chkconfig docker --level35 on
复制代码
制作CentOS6.6镜像目录

febootstrap -i yum -i iputils -i iproute -i bash -i vim-minimal -i coreutils -i tar -i net-tools centos6 base <a href="http://centos.ustc.e.cn/centos/6.6/os/x86_64/" target="_blank">http://centos.ustc.e.cn/centos/6.6/os/x86_64/</a> -u <a href="http://centos.ustc.e.cn/centos/6.6/updates/x86_64/" target="_blank">http://centos.ustc.e.cn/centos/6.6/updates/x86_64/</a>
复制代码
-i 表示镜像里面安装的RPM包(包括一些人为有必要的软件包)
centos6 表示镜像的版本说明
base 表示生成的镜像目录
后面之后了系统安装源和更新源为USTC

安装执行后,会开始一系列的RPM包下载安装,过程与yum类似,安装完成后当前目录会多了base目录,里面就是一个镜像的系统文件

进入base目录等于进入镜像的根目录

[root@image ~]# cd base/

[root@image base]# ls

bin boot dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var
复制代码
可以像一般的系统文件一样先做一些修改配置,例如配置第三方yum源等等

把base目录把所有文件打包成二进制文件后导入docker创建为镜像

cd ~/root/base/ && tar -c . | docker import - centos6:base
复制代码
docker images 可以查看镜像的信息
一个基本centos镜像创建完毕,下面再利用Dokcerfile制作mysql镜像
cat Dockerfile

FROM centos6:base

MAINTAINER Lion "[email protected]"

VOLUME /var/lib/mysql

RUN yum install mysql-server mysql -y

RUN echo -ne "NETWORKING=yes\\nHOSTNAME=mysql" > /etc/sysconfig/network

RUN echo -ne "bind-address = 0.0.0.0\\ndefault-storage-engine=innodb\\ninnodb_file_per_table\\n\

collation-server=utf8_general_ci\\ninit-connect='SET NAMES utf8'\\ncharacter-set-server = utf8" > insert

RUN sed -i "/user=mysql/r insert" /etc/my.cnf && rm -f insert

RUN echo -ne "/usr/bin/mysql_install_db\\n/usr/bin/mysqld_safe" >> /opt/mysql_start

RUN chmod 777 /opt/mysql_start

ENV PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:

WORKDIR /opt

EXPOSE 3306

CMD /bin/sh -c mysql_start
复制代码

FROM 声明以centos:base镜像为基础
MAINTAINER 声明镜像的维护者信息
VOLUME 挂载本地目录到容器里/var/lib/mysql目录(这是mysql默认的数据保存目录)
由于我希望数据可以持久化防止因为容器误删除而丢失,所以映射到宿主本地目录
RUN 在镜像中执行安装mysql
在新镜像中写入HOSTNAME信息,因为mysql启动过程需要network文件
在my.cnf配置文件插入一些修改配置
创建启动脚本
声明环境变量
制定默认工作目录
EXPOSE 声明容器需要暴露的端口号
CMD 是指镜像生成容器后自动执行的命令,类似docker exec,这里是自动启动mysql服务

根据Dockerfile创建mysql服务镜像
docker build --rm=true -t mysql:frist .
查看镜像的树状关系可以发现,mysql:frist是以centos:base为父镜像

9. 如何编译docker源码

本文根据docker官方给出的docker代码编译环境搭建指南做更深入的分析。官方给出的指导比较简单,但是由于国内的网络问题经常会编译失败,了解了编译步骤后,也可以结合自身遇到的网络问题进行“规避”。
docker的编译环境实际上是创建一个docker容器,在容器中对代码进行编译。 如果想快速的查看编译环境搭建指导,而不关注环境搭建的机制和细节,可以直接跳到最后一章“总结”。

前提
机器上已经安装了docker,因为编译环境是个docker容器,所以要事先有docker(daemon),后面会创建个编译环境容器,在容器里面编译代码。本文中使用物理机,物理机上运行着docker (daemon)。
机器(物理机)上安装了git 。 后续使用git下载docker源码
机器(物理机)上安装了make。
下载ubuntu 14.04的docker镜像

10. 怎么把docker做成镜像文件

方法/步骤
在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。

制作镜像的方式主要有两种:

通过docker commit 制作镜像
通过docker build 制作镜像
这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。

docker commit
docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。

阅读全文

与docker反编译镜像相关的资料

热点内容
矩形密封圈压缩量 浏览:591
电脑设置ntp时间同步服务器地址 浏览:18
怎么更有效招聘对日程序员 浏览:147
命令号角 浏览:273
格力双转子压缩机 浏览:612
hp服务器上的ip地址 浏览:560
c语言编程计算100以内的所有素数 浏览:622
命令输入框 浏览:892
冰箱压缩机发烫噪音 浏览:85
单片机栈溢出符号 浏览:330
命令与征服修改器怎么用 浏览:485
什么app比较费钱 浏览:832
为什么同一个app的功能不一样 浏览:232
小型工作室用什么服务器好 浏览:995
程序员的兴趣 浏览:413
华为服务器有什么好 浏览:701
程序员和测试之间的关系 浏览:945
加密蚊帐什么意思 浏览:151
javalistclear 浏览:607
哪个app上民宿多靠谱 浏览:828