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 是往版本控制系統里提交一次變更。使用這種方式製作鏡像,本質上是運行一個基礎鏡像,然後在基礎鏡像上進行軟體安裝和修改。最後再將改動提交到版本系統中。