摘要:安裝還是在上,上建議別折騰。也就是說本地是空的。是否截斷顯示中間層鏡像只是顯示倉庫一系列鏡像的集合。的后臺搜索然后直接上傳鏡像,會展開說。在本地構件一個新的鏡像保存對容器修改,并再次使用。然后我們安裝上了。
1.1docker概要
一個容器就是宿主機的一個進程。對,就是個進程。原理方面不大懂,但是
看更多linux 進程 文件管理 網絡 等方面應該會加深理解。namespace+cgroup(chroot)
還是在linux上,win上建議別折騰。我這里是ubuntu,安裝完docker你可以在容器里弄出個centos。里面在裝docker,(不知道行不行的通。。)
配置需求
uname -i 64位
uname -r 內核版本大于3.10
可以直接apt-get install docker.io安裝版本會比較低,不建議
ps aux |grep docker root 705 0.0 2.2 361808 17152 ? Ssl 14:28 0:01 /usr/bin/docker -d /usr/bin/docker -d //說明安裝成功
卸載apt-get remove --purge docker.io
安裝高版本(推薦) 把私有倉庫添加apt-get
$ sudo su - root apt-get -y installapt-transport-https apt-keyadv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 bash -c "echo debhttps://get.docker.io/ubuntu docker main >/etc/apt/sources.list.d/docker.list" apt-get update apt-get -y install lxc-docker docker -v //查看docker版本 Docker version 1.7.0-dev, build 5e06332 ps -ef | grep docker root 17311 1 0 Feb13 ? 00:00:43 /usr/bin/docker -d
service docker stop start restart
1.3 簡單理解docker鏡像可以理解為一個目錄,啟動容器x的時候,chroot 到容器 x。
可以用docker info 查看。
cd var/lib/docker docker安裝所在目錄的aufs/mnt/* 每個容器目錄都在這里有root根
鏡像目錄
目錄a-》容器a
目錄b=》容器b
docker images 命令查看目前所有鏡像,初始化的時候肯定是空的了啊。也就是說本地registry是空的。
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
1.4舉個redis例子
我們可以從docker官方registry拉取鏡像用docker pull命令
docker pull redis:2.8.19
標識+tag(REPOSITORY:TAG)(redis:2.8.19)就肯定是一個唯一鏡像
下面run起來這個 redis。
eg1:sudo docker run -d redis
可以查看docker help run
-i-t 交互式容器就是直接進入,適合臨時性任務
-d后臺,守護氏容器,大多數需要守護石
-name 為容器指定一個名稱
eg2:sudo docker run -it centos:6 /bin/bash
帶入到虛擬容器中。
exit 回到宿主機,退出當前容器.交互式容器需要 docker ps -a選項看到。不加a看不到關閉的
如果沒有指定tag,就使用默認latest分支(tag),如果沒有指定命令,就使用默認命令(redis是/entrypoint.sh redis -server)。守護石容器運行在后臺,這樣我們繼續留在宿主機中
docker inspact【pid】 查看容器更詳細信息,pid可根據docker ps[-a]得到。
注意:在啟動docker的時候,只能啟動docker images里有的鏡像,如果沒有,會自動拉取。但是網速慢的話還是先停止,我們有下面的加速器。下載這個redis完全是看他還小點。。
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE redis 2.8.19 8c37ff647cf2 8 months ago 110.8 MB
啟動為
root@tb:/home/tb# docker run -d redis:2.8.19 root@tb:/home/tb# docker inspect 6b24| grep IPAddress "IPAddress": "172.17.0.1",
查看具體某一項 docker inspect imageid,返回的是json格式,可以gerp查看具體某一項啦。
利用之前的docker redis 里面就可以set get key啦。
========================================================================
2.1 docker的鏡像與倉庫一些命令和概念拾遺:
docker info 命令查看docker 的存儲驅動及對應信息。
docker images -af --no(是否截斷image id)-a顯示中間層鏡像 -q只是顯示imageid
respository 倉庫:一系列鏡像的集合。里面包含一個個的鏡像
tag 鏡像的標簽:默認為latest,同一個鏡像可以為不同標簽
registry倉庫,指的的docker鏡像的存儲倉庫
docker images redis 查看redis的倉庫
docker inspect pid視察檢查某個鏡像中的容器信息
docker rmi -f 強制刪除鏡像(imageid或者倉庫名+tag)
docker rm -link
(可在https://hub.docker.com/注冊 ,然后搜索:內有鏡像評分和下載數量)
docker search -s 3 lnmp
docker pull domainer/centos-lnmp 這樣會比較慢,推薦使用國內鏡像加速
加速可參考:
https://dashboard.daocloud.io...
我是ubuntu 可以直接:
echo "DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://88c88c7c.m.daocloud.io"" | sudo tee -a /etc/default/docker
然后重啟docker
sudo service docker restart
比如我想要個swoole的鏡像。daocloud.io的后臺搜索 swoole
然后直接 docker pull betashepherd/docker-swoole:1.7.15-stable
docker push 上傳docker鏡像,2.3會展開說。
2.3在本地構件一個新的鏡像保存對容器修改,并再次使用。
軟件形式打包,做分發。
docker commit 通過容器構件鏡像
-a author -m message -p pause
具體就靠man啦
演示我把本地的一個鏡像推送到dockerhub上:
目前鏡像
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE redis latest ff3dae0ffe3b 12 days ago 151.3 MB daocloud.io/library/nginx 1.9.9 813e3731b203 3 weeks ago 133.9 MB redis 2.8.19 8c37ff647cf2 8 months ago 110.8 MB domainer/centos-lnmp latest 754c2ab8ffc8 11 months ago 574.9 MB redis 2.8.9 e938c5d0ff85 14 months ago 110.8 MB
我們運行centos lnmp
docker run -it -p 80 --name tb_commit_test domainer/centos-lnmp /bin/bash [root@12fb650b9296 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var [root@12fb650b9296 /]# which nginx /usr/sbin/nginx
成功后就進入了這個鏡像
在這個容器裝個szrz吧,還是因為比較小。。
[root@12fb650b9296 /]# rz bash: rz: command not found [root@12fb650b9296 /]# yum install lrzsz -y
然后我們安裝上了。rz和sz這兩個兄弟
退出當前容器
[root@12fb650b9296 /]# exit exit root@tb:/home/tb#
docker ps -l 可以看到我們剛剛編輯的鏡像
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12fb650b9296 domainer/centos-lnmp "/bin/bash" 9 minutes ago Exited (0) 59 seconds ago tb docker commit -a "tb" -m "rzsz" 12fb domainer/centos-lnmp 1799960f6ccafa9488f2ab17a1f1600601eb73187295fbe2c542603c5955d2e0
返回的id為新生成的鏡像的id,可以通過
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE domainer/centos-lnmp latest 1799960f6cca 33 minutes ago 655.4 MB
因為上面的鏡像我是從dockerhub上下載的,安裝了rzsz后提交不上到daocloud,以為是**問題。下面我們重新拉取從國內的daocloud,并修改,然后上傳到自己的鏡像到daocloud中
拉取:
docker pull nickistre/ubuntu-lamp Pulling repository nickistre/ubuntu-lamp 5323e03e7da9: Pulling image (latest) from nickistre/ubuntu-lamp, mirror: http://624869e7.m.daocloud.io/v1/ 5323e03e7da9: Pulling image (latest) from nickistre/ubuntu-lamp
上傳到到daocloud:
daocloud上傳鏡像 (收費的,收費的,收費的。上傳不上去說權限限制。)
docker login daocloud.io
輸入用戶名密碼郵箱
然后...(如果你開通了這個服務的話)就上傳成功 了。
那我們還是在在hubdocker上在實驗下commit 和push吧:
先pull一個nickistre/lamp的鏡像,我們在上面安裝一個nginx,然后上傳上去。
root@tb:/home/tb# docker run -it -p 80 --name commit_test nickistre/ubuntu-lamp /bin/bash root@f4cf34e4cac6:/# cat /etc/issue Ubuntu 14.04.3 LTS l root@f4cf34e4cac6:/# which nginx root@f4cf34e4cac6:/# which apache2 /usr/sbin/apache2
這次我們安裝個nginx
apt-get install nginx Reading package lists... Done Building dependency tree
...
安裝好后
root@f4cf34e4cac6:/# which nginx /usr/sbin/nginx root@f4cf34e4cac6:/#
然后我們在容器中啟動nginx
root@f4cf34e4cac6:/# service nginx status * nginx is not running root@f4cf34e4cac6:/# service nginx start root@f4cf34e4cac6:/# service nginx status * nginx is running
好,我們切換到宿主機,運行docker ps
root@tb:/home/tb# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f4cf34e4cac6 nickistre/ubuntu-lamp "/bin/bash" 6 minutes ago Up 6 minutes 0.0.0.0:32778->22/tcp, 0.0.0.0:32777->80/tcp, 0.0.0.0:32776->443/tcp commit_test
測試下看到80端口對應是32776
root@tb:/home/tb# curl 127.0.0.1:32777Welcome to nginx! Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.Thank you for using nginx.
嗯,nginx沒問題,把修改好的容器提交為鏡像
docker commit f4cf34e4cac6 yaxiaomu/lnamp
詳細信息可以這么寫:實際操作我沒寫
-a 作者名字
-m 鏡像信息
docker commit -a "yaxiaomu" -m "nginx" commit_test /yaxiaomu/commit_test
都會返回一個新生成的鏡像id
這樣就沒問題了。下面我們將更改上傳到dockerhub中,yaxiaomu是我的dockerhub用戶名
root@tb:/home/tb# docker push yaxiaomu/lnamp The push refers to a repository [yaxiaomu/lnamp] (len: 1) Sending image list Pushing repository yaxiaomu/lnamp (1 tags) 895b070402bd: Image already pushed, skipping 02e5bca4149b: Image already pushed, skipping b2ae0a712b39: Image already pushed, skipping af88597ec24b: Image already pushed, skipping 31ef599b27ee: Image successfully pushed ee168b5cc455: Image successfully pushed d348d7a11841: Image successfully pushed c94ca54a3ff4: Image successfully pushed ca7003051cdb: Image successfully pushed c21876831405: Image successfully pushed 4ec68505f54c: Image successfully pushed 8b14247b8658: Image successfully pushed 4a5230b7de4e: Image successfully pushed 614789f7a3f4: Image successfully pushed 9d1e26045261: Image successfully pushed 62cde6caea01: Image successfully pushed 82bfdf8409e4: Image successfully pushed 8bac6635505b: Image successfully pushed 05133d17b3c0: Image successfully pushed 7f6d12e6d8c5: Image successfully pushed aff2549596d0: Image successfully pushed 5323e03e7da9: Image successfully pushed ece7b4d33c19: Image successfully pushed Pushing tag for rev [ece7b4d33c19] on {https://cdn-registry-1.docker.io/v1/repositories/yaxiaomu/lnamp/tags/latest} root@tb:/home/tb#
雖然很漫長,這樣是成功了,感覺速度好慢。。
2.4我們用docker bulid dockerfile 文件構件鏡像(簡介~)用Dockerfile安裝鏡像
DockerFile文件,直白點就是包含了一系列命令的文本文件,他里面包含一些基本鏡像(中間件鏡像),一些docker命令腳本,
通過build+參數的方式來構造鏡像,build可以加載本地file,也可以加載遠程file(如果網絡不是問題的話)
這里列出個簡單例子
先看dockerfile的一個例子
# Memcached # # VERSION 1.0 # use the ubuntu base image provided by dotCloud FROM ubuntu # make sure the package repository is up to date RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update # install memcached RUN apt-get install -y memcached
執行例子(注意自己配置Dockfle文件路徑):
docker build -t yaxiaomu/ubuntu_memcache .
.代表是當前目錄里有dockerfile 這個文件
更多Dockerfile參數
dockerfile安裝實例
稍微深入一下docker
鏡像加速201804更新
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26491.html
摘要:容器鏡像運行后,此時就實例化了一個容器。側重的是應用級別,而虛擬機是徹底隔離整個運行環境。方便交付將應用以及運行環境打包成一個鏡像,交付更簡單高效。下載地址點擊運行即可一如既往的下一步下一步完成安裝。 Docker是什么 Docker是一款由DotCloud公司(現改名為Docker)基于Go語言開發的開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發...
摘要:概述是一個用來定義和運行復雜應用的工具。使用,用戶通過來進行構建。使用,不再需要使用腳本來啟動容器。在配置文件中,所有的容器通過來定義,然后通過腳本來啟動,停止和重啟應用,和應用中的服務以及所有依賴服務的容器。 概述 Docker Compose是一個用來定義和運行復雜應用的Docker工具。使用Compose,你可以在一個文件中定義一個多容器應用,然后使用一條命令來啟動你的應用,完成...
摘要:概述是一個用來定義和運行復雜應用的工具。使用,用戶通過來進行構建。使用,不再需要使用腳本來啟動容器。在配置文件中,所有的容器通過來定義,然后通過腳本來啟動,停止和重啟應用,和應用中的服務以及所有依賴服務的容器。 概述 Docker Compose是一個用來定義和運行復雜應用的Docker工具。使用Compose,你可以在一個文件中定義一個多容器應用,然后使用一條命令來啟動你的應用,完成...
摘要:本系列教程翻譯自,系列共有九篇,本文譯自第一篇。,一種新的容器化技術,因為輕量級和便攜化而受到廣泛關注。本篇文章是系列教程的第一篇。鏡像只讀的容器模板,簡言之就是系統鏡像文件。首先,向發出請求創建一個鏡像并且指定容器內要運行的命令。 本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第一篇 Part 1: An Introduction。...
摘要:本系列教程翻譯自,系列共有九篇,本文譯自第一篇。,一種新的容器化技術,因為輕量級和便攜化而受到廣泛關注。本篇文章是系列教程的第一篇。鏡像只讀的容器模板,簡言之就是系統鏡像文件。首先,向發出請求創建一個鏡像并且指定容器內要運行的命令。 本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第一篇 Part 1: An Introduction。...
閱讀 2781·2021-11-19 11:30
閱讀 3066·2021-11-15 11:39
閱讀 1787·2021-08-03 14:03
閱讀 1996·2019-08-30 14:18
閱讀 2052·2019-08-30 11:16
閱讀 2163·2019-08-29 17:23
閱讀 2607·2019-08-28 18:06
閱讀 2540·2019-08-26 12:22