導航:首頁 > 源碼編譯 > 如何編譯docker鏡像

如何編譯docker鏡像

發布時間:2022-07-22 09:37:17

❶ 如何在arm伺服器構建docker鏡像

在這個M伺服器上裝一個這個模擬器,還有這個編譯器,然後來再這個就可以搭建起來。

❷ 請教,如何在ubuntu環境下編譯Docker的安裝文件

Docker 的基本用法
在本節中,我將向您介紹 Docker 命令的常用選項。例如如何下載一個 docker image,打造一個容器,以及如何訪問容器。
要創建一個新的容器,你應該選擇一個基本 image 的操作系統,例如啟動 Ubuntu 或者 CentOS 或其他系統。您可以搜索一個基本 image 使用 Docker 搜索命令:
docker search ubuntu
該命令將顯示所有 ubuntu images,你可以自己嘗試一下搜索 centos Images。

現在我們現在 base image到我們的服務中,使用命令:
docker pull ubuntu

現在,您可以通過使用命令來查看所有已下載的images:
docker images

Ubuntu 鏡像從DockerHub/Docker Registry下載。下一步驟是創建從該鏡像的容器。
要創建容器,可以使用docker create 或 docker run
docker create ubuntu:14.04
docker create 命令會創建一個新的容器,但不會啟動它。所以現在你需要使用運行命令:
docker run -i -t ubuntu:14.04 /bin/bash
此命令將創建並運行一個基於 Ubuntu14.04 鏡像的容器,容器內並運行一個命令/bin/bash,您將在容器內自動運行命令。

當你輸入 Exit 命令退出容器時,容器也是停止運行,如果你想容器在後台運行需要在命令後面添加 -d 參數。
docker run -i -t -d ubuntu:14.04 /bin/sh -c 「while true; do echo hello world; sleep 1; done」
/bin/sh -c 「while true; do echo hello world; sleep 1; done」 this is bash script to echo 「hello word」 forever.
現在你可以看到容器在後台運行通過命令:
docker ps
如果你想從 bash 命令看日誌結果,使用命令:
docker logs NAMES/ContainerID

怎樣在後台訪問容器 shell?這個命令將會連接你的容器 shell:
docker exec -i -t NAMES/ContainerID

你可以看到主機名和容器ID是相等的,這意味著你在容器shell內。當你在shell 上鍵入』exit`,會離開的shell,但容器仍在運行。
你會經常使用的另一個命令是:
docker stop NAME/ContainerID
這將停止容器而不將其刪除,這樣你就可以用命令重新啟動它:
docker start NAME/ContainerID
如果你想刪除的容器,先停止它,然後用命令將其刪除:
docker rm NAME/ContainerID

❸ 如何製作自己的docker鏡像文件

方法/步驟
在使用docker的過程中,我們除了從docker
hub上下載已經做好的鏡像,很多時候需要我們自己製作鏡像。下面想在這個文章中說明一下鏡像的製作方法。
製作鏡像的方式主要有兩種:
通過docker
commit
製作鏡像
通過docker
build
製作鏡像
這兩種方式都是通過改進已有的鏡像來達到自己的目的。製作基礎鏡像,會在另外一篇文章「從零開始製作基礎鏡像」中介紹。
docker
commit
docker
commit
是往版本控制系統里提交一次變更。使用這種方式製作鏡像,本質上是運行一個基礎鏡像,然後在基礎鏡像上進行軟體安裝和修改。最後再將改動提交到版本系統中。

❹ 如何在"特殊"的網路環境下編譯 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 。

❺ 如何製作docker鏡像

2種方式 1.利用dockerfile
2.pull一個系統鏡像在裡面裝你要的應用。
然後用docker commit 容器id 鏡像名來生成鏡像。

❻ 如何使用Dockerfile構建鏡像

你好,使用方法如下:
Dockerfile結構
dockerfile由4部分信息組成:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..

# Base image to use, this must be set as the first line
FROM ubuntu

# Maintainer: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user [email protected]

# Commands to update the image
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# Commands when creating a new container
CMD /usr/sbin/nginx

其中#表注釋,可以標注一些說明性的文字。
FROM關鍵字指定鏡像的來源,默認為DockerHub,也可以寫私有倉庫的鏡像,例如:localhost:5000/centos:6.7,如果本地已經存在指定的鏡像名稱,則會從本地緩存直接獲取。MAINTAINER 指定鏡像的作者,之後為鏡像操作執行RUN、ADD等,最後是容器啟動時發起的指令。
Dockerfile中的指令
FROM: 指定鏡像名稱,格式為FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04
MAINTAINER: 鏡像作者 ,格式為 MAINTAINER <name>
RUN:格式為 RUN <command> 或 RUN ["executable", "param1", "param2"]。
前者將在 shell 終端中運行命令,即 /bin/sh -c;後者則使用 exec 執行。指定使用其它終端可以通過第二種方式實現,例如 RUN ["/bin/bash", "-c", "echo hello"]。
每條 RUN 指令將在當前鏡像基礎上執行指定命令,並提交為新的鏡像。當命令較長時可以使用 \ 來換行。
CMD:支持三種格式
1.CMD ["executable","param1","param2"] 使用 exec 執行,推薦方式;
2.CMD command param1 param2 在 /bin/sh 中執行,提供給需要交互的應用;
3.CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認參數;
指定啟動容器時執行的命令,每個 Dockerfile 只能有一條 CMD 命令。如果指定了多條命令,只有最後一條會被執行。如果用戶啟動容器時候指定了運行的命令,則會覆蓋掉 CMD 指定的命令。
EXPOSE:格式為 EXPOSE <port> [<port>...]。
告訴 Docker 服務端容器暴露的埠號,供互聯系統使用。在啟動容器時需要通過 -P,Docker 主機會自動分配一個埠轉發到指定的埠。
ENV:格式為 ENV <key> <value>。 指定一個環境變數,會被後續 RUN 指令使用,並在容器運行時保持。這就對應程序語言中的變數定義,可在需要的時候引用。例如:

1
2
3
4

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

ADD:格式為 ADD <src> <dest>。
該命令將復制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目錄的一個相對路徑;也可以是一個 URL;還可以是一個 tar 文件(自動解壓為目錄)。
COPY:格式為 COPY <src> <dest>。
復制本地主機的 <src>(為 Dockerfile 所在目錄的相對路徑)到容器中的 <dest>。當使用本地目錄為源目錄時,推薦使用 COPY。
COPY和ADD的不同就是:ADD多了自動解壓和支持URL路徑的功能。
ENTRYPOINT:
兩種格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中執行)。
配置容器啟動後執行的命令,並且不可被 docker run 提供的參數覆蓋。
每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最後一個起效。
CMD和ENTRYPOINT比較:兩個命令都是只能使用一次,並且都是在執行docker run指令時運行,如果有多個,只執行最後一條。
兩者的不同在於參數的傳遞方式,如果在Dockerfile中定義如下指令

1

CMD echo hello



1

ENTRYPOINT ["echo","hello"]

那麼在運行命令docker run containerId echo hello時,指定了CMD的輸入結果為world,可以看出Dockerfile中指定的命令被覆蓋了,而指定了ENTRYPOINT時,輸出結果為hello echo world,可以看出指定的命令被作為ENTRYPOINT指定指令的參數了。

VOLUME:格式為 VOLUME ["/data"]。創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放資料庫和需要保持的數據等。不過此屬性在Dockerfile中指定並沒有什麼意義,因為沒有辦法指定本地主機的目錄。如果需要指定掛載點可以在執行docker run命令時指定:

1

docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bash

USER:格式為 USER daemon。指定運行容器時的用戶名或 UID,後續的 RUN 也會使用指定用戶。
當服務不需要管理員許可權時,可以通過該命令指定運行用戶。並且可以在之前創建所需要的用戶,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要臨時獲取管理員許可權可以使用 gosu,而不推薦 sudo。
WORKDIR:格式為 WORKDIR /path/to/workdir。為後續的 RUN、CMD、ENTRYPOINT 指令配置工作目錄。可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑。例如

1
2
3
4

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

則最終路徑為 /a/b/c。
ONBUILD:格式為 ONBUILD [INSTRUCTION]。
配置當所創建的鏡像作為其它新創建鏡像的基礎鏡像時,所執行的操作指令。
例如,Dockerfile 使用如下的內容創建了鏡像 image-A。

1
2
3
4

[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]

如果基於 image-A 創建新的鏡像時,新的Dockerfile中使用 FROM image-A指定基礎鏡像時,會自動執行ONBUILD 指令內容,等價於在後面添加了兩條指令。

1
2
3
4
5

FROM image-A

#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src

使用 ONBUILD 指令的鏡像,推薦在標簽中註明,例如 ruby:1.9-onbuild。
基於CentOS6.7並源碼安裝nginx
首先准備了nginx-1.9.9.tar.gz安裝包和CentOS6-Base-163.repo(163源),將這兩個文件放到同一目錄下,並在此目錄下創建名稱為Dockerfile的文件。之後在此文件中實現源替換、nginx編譯安裝、及一些依賴包的安裝,Dockerfile內容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# this is a test ubuntu 12.04 image dockerfile
# Author:fengzheng

# Base image,this must be set as the first line
#localhost:5000/centos:6.7是我的私有倉庫的鏡像,可替換為centos:6.7(DockerHub中的鏡像)
FROM localhost:5000/centos:6.7

MAINTAINER fengzheng

# Commands to update the image

RUN mkdir /usr/nginx1.9.9
ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/
#RUN yum -y install tar
#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gz
RUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bak
ADD CentOS6-Base-163.repo /etc/yum.repos.d/
RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo \
&& yum clean all && yum makecache \
&& yum -y install gcc \
&& yum -y install yum install -y pcre-devel \
&& yum -y install zlib zlib-devel \
&& yum -y install openssl openssl--devel \
&& cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install

#如果設置daemon off; nginx無法啟動
#RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# Commands when creating a new container
# 啟動nginx 需進入/usr/local/nginx/sbin 執行./configure
CMD /bin/bash

最後執行命令"docker build -t nginx-centos:6.7 ."
其中.表示在當前目錄下搜索Dockerfile文件,-t參數指定鏡像名稱和tag。

❼ 如何創建一個安全的Docker基鏡像

## 背景 ##
我最初使用Docker的時候,每個人都在說它用起來有多簡單方便,它內部的機制是有多麼好,它為我們節省了多少時間。但是當我一使用它就發現,幾乎所有鏡像都是臃腫而且不安全的(沒有使用包簽名,盲目相信上游的鏡像庫以<code>curl | sh</code>的方式安裝),而且也沒有一個鏡像能實現Docker的初衷:隔離,單進程,容易分發,簡潔。

Docker鏡像本來不是為了取代復雜的虛擬機而設計的,後者有完整的日誌、監控、警報和資源管理模塊。而Docker則傾向於利用內核的<code>cgroups</code>和<code>namespaces</code>特性進行封裝組合,這就好像:

在物理機器環境下,一旦內核完成了初始化,<code>init</code>進程就起來了。這也是為什麼當你在Dockerfile的<code>CMD</code>指令啟動的進程PID是1,這是與Unix中的進程機制類似的。

現在請查看一下你的進程列表,使用<code>top</code>或者<code>ps</code>,你會看到<code>init</code>進程佔用的也是這個PID,這是每個類Unix系統的核心進程,所有進程的父進程,一旦你理解這個概念:在類Unix系統上每個進程都是init進程的子進程,你會理解Docker容器里不應該有無關的修飾文件,它應該是剛好滿足進程運行需要。

如何開始
現在的應用多數是大型復雜的系統,通常都需要很多依賴庫,例如有調度,編譯和很多其他相關工具類應用,它們的架構通常封裝性良好,通過一層層的抽象和介面把底層細節隱藏了,從某種程度上說,這也算是一種容器,但是從系統架構視角看,我們需要一種比以往虛擬環境更簡單的方案了。

java為例

從零開始,思考你要構建一個最通用的基礎容器,想想你的應用本身,它運行需要什麼?

可能性有很多,如果你要運行Java應用,它需要Java運行時;如果運行Rails應用,它需要Ruby解釋器,對Python應用也一樣。Go和其他一些編譯型語言有些許不同,我以下會提到。

在Java例子中,下一步要想的是:JRE需要什麼依賴才能運行?因為它是讓應用能運行的最重要的組件,所以很自然的下一步就是要想清楚JRE運行依賴於什麼。

而實際上JRE並沒太多依賴,它本來就是作為操作系統的抽象層,使代碼不依賴於宿主系統運行,因此安裝好JRE就基本准備就緒了。

(實際上,對操作系統的獨立性並不是理所當然的事,有非常多的系統特有API和專有的系統擴展,但是便於舉例,我們把注意力放在簡單的情況下)

在Linux上,JVM主要是調用系統的C語言庫,Oracle的官方JRE,使用的是libc,也就是glibc,這意味著你要運行任何Java程序,都需要先裝好glibc。另外你可能需要某種shell來管理環境,還有一個與外部通訊的介面,例如網路和資源的介面。

我們總結一下Java應用示例需要的最低配置是:

JRE,在例子中我們使用Oracle JRE
glibc,JRE的依賴
一個基礎環境(包含網路、內存、文件系統等資源管理工具)

❽ 怎麼在伺服器上製作docker鏡像

步驟1:為我們的容器創建第一個鏡像
# 以 centos 鏡像作為基礎鏡像,我們啟動自己的容器並在其中執行/bin/bash命令
# 註:-t -i 參數用於創建一個虛擬的命令行。
sudo docker run -t -i centos /bin/bash
現在我們已經成功的運行了自己的第一個容器,並且進入到容器的命令行界面中。在容器中,我們執行下面的命令:

yum -y update # 更新軟體包
yum install which # 安裝which命令
yum install git # 安裝Git

安裝完成後,按 Ctrl + d 來退出容器的命令行。
# 執行sudo docker ps -a,可以看到被我們終止的容器
CONTAINER ID IMAGE COMMAND CREATED……
da9031d3568f centos:6.4 /bin/bash 5 minutes ago…..
把我們所做的改變提交到一個新的容器:
# 這里我們創建一個自己的基礎容器,容器中安裝好了文章中所需的常用工具。讀者的容器 id 可能與文章中的有所不同,以上一步 docker ps -a 的結果為准。
sudo docker commit da90 custom/base
容器成功提交後,執行 sudo docker images ,我們會看到剛才提交的容器(如下面的結果所示)。我們就以這個容器為基礎容器,再來創建一個新的容器。
REPOSITORY TAG IMAGE ID CREATED
custom/base latest 05b6cecd370b 2 minutes ago
centos 6.4 539c0211cd76 10 months ago
centos latest 539c0211cd76 10 months ago…
步驟2:創建新的容器,並安裝 apache
# 以 custom/base 容器為基礎,運行一個新的容器。

sudo docker run -t -i custom/base /bin/bash

# 安裝 httpd

yum install httpd

步驟3:再次提交新的容器
按 Ctrl + d 來退出容器的命令行,然後執行命令:
# 這個命令會把步驟2中我們安裝 httpd 帶來的改變提交到新的名為 custom/httpd 的容器鏡像中。你的容器 id 可能會和文章中有所不同,以 sudo docker ps -a 命令的結果為准。

sudo docker commit aa6e2fc0b94c custom/httpd

你應該已經發現了,我們創建了一個帶有 http 伺服器並可以復用的容器鏡像。你可以根據這種思想,為自己所需的每個組件都創建一個容器,然後把這些容器復用於開發環境或者生產環境。
步驟7:運行 http 伺服器
# -v will Mount a volume from VM to the container which was also shared from host to Vagrant VM.
# -v 參數把主機共享給虛擬機的一個卷掛載到容器中
# -p forward VM port 80 to container port 80; VM port 80 is mapped to host port 8080 in Vagrantfile
# -p 參數把虛擬機的80埠映射到容器的80埠;虛擬機的80埠在 Vagrantfile 中被綁定到主機的8080埠,也就是:主機8080->虛擬機80->容器80
sudo docker run -t -i -p 80:80 -v /vagrant/htdocs:/var/www/html custom/httpd /bin/bash
# 啟動 Apache
apachectl -k start

❾ 如何構建docker鏡像

創建一個安全的Docker基鏡像的方法 ** 構建一個Java環境基鏡像 ** 正如我剛解釋的,Alpine Linux是一個構建自有鏡像時不錯的選擇,因此,我們在此將使用它來構建簡潔高效的Docker鏡像,我們開始吧! 組合:Alpine + bash 每個Dockerfile第一個指令都是指定它的父級容器,通常是用於繼承,在我們的例子中是alpine:latest: sh FROM alpine:latest MAINTAINER cSphere RUN apk add --no-cache --update-cache bash CMD ["/bin/bash"] ``` 好了,現在我們構建容器: sh $ docker build -t my-java-base-image > ---> Running in 陸三四三三三一二d漆漆e ---> bfe9四漆一三漆9漆a Removing intermediate container 陸三四三三三一二d漆漆e ... 省略若干行 Step 四 : CMD /bin/bash ---> Running in d二二9一陸吧四b漆9漆 ---> ecc四四三d陸吧f二漆 Removing intermediate container d二二9一陸吧四b漆9漆 Successfully built ecc四四三d陸吧f二漆 並且運行它: sh $ docker run --rm -ti my-java-base-image bash-四.三# 成功了!我們有了一個運行著bash的Alpine Linux

閱讀全文

與如何編譯docker鏡像相關的資料

熱點內容
nc編程軟體下載 瀏覽:382
如何限制手機app的使用 瀏覽:307
安卓華為手機怎麼恢復桌面圖標 瀏覽:956
我的世界電腦版伺服器地址在哪找 瀏覽:533
違抗了命令 瀏覽:256
安卓如何實現拖拽放置 瀏覽:91
凈資產收益率選股指標源碼 瀏覽:599
血壓力感測器計算公式單片機 瀏覽:466
全網介面vip影視解析源碼 瀏覽:916
如何破解伺服器遠程密碼錯誤 瀏覽:377
平安深圳app如何實名認證 瀏覽:500
linux網路監控軟體 瀏覽:889
內網伺服器如何上傳文件 瀏覽:140
程序員在你心中是什麼 瀏覽:1
蘋果手機怎麼找回app賬號 瀏覽:466
房屋中介網站源碼 瀏覽:29
命運格數演算法 瀏覽:852
ets3編程 瀏覽:730
怎麼製作音樂相冊的文件夾 瀏覽:566
寧夏重加密硅灰用法 瀏覽:231