欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何從零開始構(gòu)建docker基礎(chǔ)鏡像

今天小編給大家分享一下如何從零開始構(gòu)建docker基礎(chǔ)鏡像的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

嘉黎網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,嘉黎網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為嘉黎千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的嘉黎做網(wǎng)站的公司定做!

容器 vs 虛擬機

如何從零開始構(gòu)建docker基礎(chǔ)鏡像

如何從零開始構(gòu)建docker基礎(chǔ)鏡像

容器和虛擬機具有相似的資源隔離和分配優(yōu)勢,但功能有所不同,因為容器虛擬化的是操作系統(tǒng),而不是硬件,因此容器更容易移植,效率也更高。

關(guān)于容器:

對于docker做了簡單的了解之后,就需要實際去體驗一下安裝和構(gòu)建容器,本例使用centos6.5:

1.安裝docker相關(guān)軟件

[root@bogon ubuntu-16.04]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
retrieving http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
warning: /var/tmp/rpm-tmp.kyucbm: header v3 rsa/sha256 signature, key id 0608b895: nokey
preparing...    ########################################### [100%]
 1:epel-release   ########################################### [100%]
[root@bogon ubuntu-16.04]# yum -y install docker-io
loaded plugins: fastestmirror, refresh-packagekit, security
loading mirror speeds from cached hostfile
...

complete!
[root@bogon ubuntu-16.04]# service docker start
starting cgconfig service:         [ ok ]
starting docker:          [ ok ]
[root@bogon ubuntu-16.04]# chkconfig docker on
[root@bogon ubuntu-16.04]#

使用service docker status查看docker服務(wù)狀態(tài)的時候,發(fā)現(xiàn)沒有啟動docker dead but pid file exists,執(zhí)行docker相關(guān)命令(如docker ps)的時候會出現(xiàn)cannot connect to the docker daemon. is 'docker -d' running on this host?,需要解決這個問題,如下:

[root@bogon ubuntu-16.04]# service docker status
docker dead but pid file exists
[root@bogon ubuntu-16.04]#yum-config-manager --enable public_ol6_latest
loaded plugins: fastestmirror, refresh-packagekit
[root@bogon ubuntu-16.04]# yum install -y device-mapper-event-libs
loaded plugins: fastestmirror, refresh-packagekit, security
...

2.構(gòu)建基礎(chǔ)鏡像

在使用docker的時候后,可以通過命令docker pull <鏡像名稱>從鏡像庫中獲取,但是有時候會出現(xiàn)網(wǎng)絡(luò)問題或是其他原因,導(dǎo)致無法拉取,在docker中國官網(wǎng)介紹使用通過 docker 官方鏡像加速來解決無法拉取:

您可以使用以下命令直接從該鏡像加速地址進行拉?。?/p>

$ docker pull registry.docker-cn.com/myname/myrepo:mytag

例如:

$ docker pull registry.docker-cn.com/library/ubuntu:16.04

原文如下:

而在本文中,我使用dockerfile來構(gòu)建基礎(chǔ)鏡像ubuntu 16.04(xenial),其對應(yīng)的dockerfile的github地址為:點擊這里,搜索方式為在hub.docker.com中搜索ubuntu,即可看見對應(yīng)的鏡像信息。dockerfile內(nèi)容如下:

from scratch
add ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /

# a few minor docker-specific tweaks
# see https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap
run set -xe \
	\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#l40-l48
	&& echo '#!/bin/sh' > /usr/sbin/policy-rc.d \
	&& echo 'exit 101' >> /usr/sbin/policy-rc.d \
	&& chmod +x /usr/sbin/policy-rc.d \
	\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#l54-l56
	&& dpkg-divert --local --rename --add /sbin/initctl \
	&& cp -a /usr/sbin/policy-rc.d /sbin/initctl \
	&& sed -i 's/^exit.*/exit 0/' /sbin/initctl \
	\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#l71-l78
	&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \
	\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#l85-l105
	&& echo 'dpkg::post-invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \
	&& echo 'apt::update::post-invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \
	&& echo 'dir::cache::pkgcache ""; dir::cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \
	\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#l109-l115
	&& echo 'acquire::languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \
	\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#l118-l130
	&& echo 'acquire::gzipindexes "true"; acquire::compressiontypes::order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes \
	\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#l134-l151
	&& echo 'apt::autoremove::suggestsimportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests

# delete all the apt list files since they're big and get stale quickly
run rm -rf /var/lib/apt/lists/*
# this forces "apt-get update" in dependent images, which is also good

# enable the universe
run sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list

# make systemd-detect-virt return "docker"
# see: https://github.com/systemd/systemd/blob/aa0c34279ee40bce2f9681b496922dedbadfca19/src/basic/virt.c#l434
run mkdir -p /run/systemd && echo 'docker' > /run/systemd/container

# overwrite this with 'cmd []' in a dependent dockerfile
cmd ["/bin/bash"]

現(xiàn)在對dockerfile中的相關(guān)命令解釋一下:

  1. from 指的是依賴的基礎(chǔ)鏡像,如scratch表示的是空白的,從零開始的。依賴的鏡像可以是本地的,也可以是遠(yuǎn)程庫的

  2. add 指的是添加本地文件到鏡像中,如果遇到linux可解壓格式文件,會自動解壓,這就是為什么整個文件中沒有對tar.gz進行顯式解壓

  3. run 運行命令,如安裝軟件的相關(guān)命令

  4. cmd 設(shè)置啟動container時默認(rèn)執(zhí)行的命令,這個可以在啟動容器時覆蓋

目前,這個dockerfile中涉及的命令就這幾個,其他等以后遇到再進行說明。解釋完畢,開始構(gòu)建:

[root@bogon ubuntu-16.04]# docker ps
container id  image    command    created    status    ports    names
[root@bogon ubuntu-16.04]# docker images
repository   tag     image id   created    virtual size
[root@bogon ubuntu-16.04]# pwd
/home/ml/ubuntu-16.04
[root@bogon ubuntu-16.04]# ll -h
total 40m
-rw-rw-r--. 1 ml ml 2.8k dec 19 12:37 dockerfile
-rw-rw-r--. 1 ml ml 40m dec 19 12:39 ubuntu-xenial-core-cloudimg-amd64-root.tar.gz
[root@bogon ubuntu-16.04]# 
[root@bogon ubuntu-16.04]# docker build -t ubuntu:16.04 .
sending build context to docker daemon 41.94 mb
sending build context to docker daemon 
step 0 : from scratch
 ---> 
step 1 : add ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
 ---> 537c2f6dd023
removing intermediate container dee7679a7ee2
step 2 : run set -xe && echo '#!/bin/sh' > /usr/sbin/policy-rc.d && \
echo 'exit 101' >> /usr/sbin/policy-rc.d && chmod +x /usr/sbin/policy-rc.d && \
dpkg-divert --local --rename --add /sbin/initctl && cp -a /usr/sbin/policy-rc.d /sbin/initctl  && sed -i 's/^exit.*/exit 0/' /sbin/initctl && \
 ...---> running in 41d719b68981
+ echo #!/bin/sh
+ echo exit 101
+ chmod +x /usr/sbin/policy-rc.d
+ dpkg-divert --local --rename --add /sbin/initctl
adding 'local diversion of /sbin/initctl to /sbin/initctl.distrib'
+ cp -a /usr/sbin/policy-rc.d /sbin/initctl
+ sed -i s/^exit.*/exit 0/ /sbin/initctl
+ echo force-unsafe-io
+ echo dpkg::post-invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
+ echo apt::update::post-invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
+ echo dir::cache::pkgcache ""; dir::cache::srcpkgcache "";
+ echo acquire::languages "none";
+ echo acquire::gzipindexes "true"; acquire::compressiontypes::order:: "gz";
+ echo apt::autoremove::suggestsimportant "false";
 ---> c49bdbf61888
removing intermediate container 41d719b68981
step 3 : run rm -rf /var/lib/apt/lists/*
 ---> running in 6389964016a2
 ---> 4508181f7442
removing intermediate container 6389964016a2
step 4 : run sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
 ---> running in cbed2b28c988
 ---> 8eed06df8f19
removing intermediate container cbed2b28c988
step 5 : run mkdir -p /run/systemd && echo 'docker' > /run/systemd/container
 ---> running in aff40dbc6e05
 ---> 19c96e7912a4
removing intermediate container aff40dbc6e05
step 6 : cmd /bin/bash
 ---> running in 2469ee9d7251
 ---> 77e565a65647
removing intermediate container 2469ee9d7251
successfully built 77e565a65647
[root@bogon ubuntu-16.04]# docker images 
repository   tag     image id   created    virtual size
ubuntu    16.04    77e565a65647  33 seconds ago  110.5 mb
[root@bogon ubuntu-16.04]#

從構(gòu)建日志可以看出,每條命令為一個step,執(zhí)行完成之后會產(chǎn)生一個id,類似于6389964016a2,其實,這就是鏡像的分層,一層層堆積在一起。

到此,一個ubuntu16.04版的docker鏡像構(gòu)建完成,那么接下來就是運行

3.運行鏡像

使用docker run命令運行:

[root@bogon ubuntu-16.04]# docker run -it ubuntu:16.04
root@5ea0b95e8641:/# cat /etc/issue
ubuntu 16.04.3 lts \n \l

root@5ea0b95e8641:/# ps -ef
uid   pid ppid c stime tty   time cmd
root   1  0 0 22:47 ?  00:00:00 /bin/bash
root   11  1 0 22:47 ?  00:00:00 ps -ef
root@5ea0b95e8641:/#

其中5ea0b95e8641為當(dāng)前容器的id,進入容器查看所有進程,pid為1的時bash,linux不應(yīng)該時init嗎?其實,這就是容器與虛擬機的差別,容器的init進程就是主機上docker服務(wù)進程,每個容器只是一個進程而已。其中的參數(shù)-it指的是前端打開并分配一個終端,-d為在后臺運行,我們試試當(dāng)前這個可不可以使用-d:

[root@bogon ~]# docker run -d ubuntu:16.04
43ae7ded8e6920b55b8e744b52ffce37b89b25182fcacdc10a5414e6621abff3
[root@bogon ~]# docker ps
container id  image    command    created    status    ports    names
[root@bogon ~]# docker run -d ubuntu:16.04 /bin/bash
77f3ec2ebfb3f154772683eeea8ca7e2ba3b7756b1488f5f09818af424e0298e
[root@bogon ~]# docker ps
container id  image    command    created    status    ports    names

可以明顯的開出來,使用-d后,docker ps查不到任何運行的容器,如果使用-it的話,在別的shell下使用docker ps查看:

[root@bogon ml]# docker ps
container id  image    command    created    status    ports    names
8341a332c788  ubuntu:16.04  "/bin/bash"   18 seconds ago  up 18 seconds       drunk_cori

可以看到,有容器在運行,因為我們沒有退出。由此可以看出,容器其實以進程方式運行,執(zhí)行完成/bin/bash之后,進程消亡,所以容器也就不存在,如果容器里面是一個tomcat服務(wù),則是另外一種情況了。

基礎(chǔ)鏡像基本構(gòu)建完成,后面的環(huán)境搭建,都將基于這個鏡像構(gòu)建。

以上就是“如何從零開始構(gòu)建docker基礎(chǔ)鏡像”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享題目:如何從零開始構(gòu)建docker基礎(chǔ)鏡像
URL標(biāo)題:http://chinadenli.net/article14/ppijge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網(wǎng)站設(shè)計公司網(wǎng)站內(nèi)鏈、做網(wǎng)站、品牌網(wǎng)站建設(shè)服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)