Docker及三劍客(Compose、Machine、Swarm)
最近在做持續整合交付部署的事,想系統的學一下Docker。看到這個系列教程,將自己認為重要的知識點摘抄下來,推薦大家看看原著無蹤無影。
1.如果在Docker裡下載基礎linux系統映象,底層用的是Host的核心空間kernel,Docker只需要提供rootfs。
理解:
Linux的作業系統是由核心空間kernel和使用者空間組成的;
核心空間:kernel,linux啟動的時候會載入bootfs檔案系統,之後bootfs會被解除安裝掉;
使用者空間的檔案系統是rootfs,包括/dev/,/proc,/bin等目錄(PS
:不同的linux發行版的主要區別是rootfs不同);
基礎linux系統映象只是在使用者空間與發行版一致,核心空間kernel不一定一致,容器的核心版本與底層Host保持一致,容器只能使用Host的核心版本,不能修改
2.docker commit將當前容器儲存為映象
例如:
docker run -it centos //以互動的方式執行一個映象,並進入容器
yum install -y vim //在這個容器中安裝vim程式
docker commit 容器名 centos-vi //另外一個終端連線host後,執行該命令,將該容器儲存為centos-vi這個映象名
3.利用Dockerfile構建一個映象
vi ./Dockerfile //編輯一個dockerfile檔案
FROM centos //寫入"FROM centos "內容,表示引用centos這個基礎映象
RUN yum install -y vim //寫入"RUN yum install -y vim",表示在新構建的映象中新增vim程式
//儲存並退出後
docker build -t centos-vim-dockerfile . //在當前目錄下(Dockerfile存在當前目錄,也可以用[-f 檔案路徑/Dockfile]來指定dockerfile位置)構建一個名為centos-vim-dockerfile的新映象
注意:docker會將dockerfile所在的目錄下的所有檔案傳送給docker伺服器,所以使用build context就要謹慎了,最好不要將多餘的檔案放到build context,尤其是不要把 / 或者 /usr 作為build context ,否則建立映象的過程會非常緩慢或者建立失敗。
利用docker進行映象構建時,如若系統內已經存在某些共同的基礎映象,則新構建映象將會用這些快取的基礎映象
4.Dockerfile命令解析
FROM:指定base映象
MAINTAINER:設定映象作者,可以是任意字元
COPY:將檔案從build context複製到映象。支援兩種形式:1.COPY src dest 2.COPY [“src”,“dest”]
注意:src只能指定build context中的檔案或目錄(即Dockerfile檔案所在目錄中的檔案或目錄)
ADD:與COPY類似,從build context複製檔案到映象。不同的是,如果src是歸檔檔案(tar,zip,tgz,xz等),檔案會自動解壓到dest
EXPOSE:制定容器中的程式會監聽某個埠,Docker可以將該埠暴露出來
RUN: 在容器中執行相應的指令
CMD:容器啟動時執行的相應的命令,dockerfile中可以有多個cmd指令,但只有最後一個生效。CMD可以被docker run 之後的引數代替
ENTRYPOINT:設定容器啟動的時候執行的命令。Dockerfile中可以有多個ENTRYPOINT指令,但只有最後一個生效,CMD或docker run之後的引數都會被當作引數傳遞給ENTRYPOINT
舉個微服務例子:
FROM java:8-jre //基礎映象為java8
MAINTAINER daihl <060531108@163.com> //作者資訊
ADD ./target/gateway.jar /app/ //將mvn編譯後的jar檔案,複製到映象/app目錄資料夾下
CMD ["java", "-Xmx200m", "-jar", "/app/gateway.jar"] //容器啟動時執行 java -Xmx200m -jar /app/gateway.jar
EXPOSE 4000 //容器監聽4000埠,可將該埠暴露出去
FROM mongo:3 //基礎映象為mongo3
MAINTAINER daihl <060531108@163.com> //作者資訊
ADD init.sh /init.sh //將當前build context目錄下的init.sh檔案複製到映象/中
ADD ./dump / //將當前build context目錄下的dump資料夾複製到映象/中
RUN \
chmod +x /init.sh && \
apt-get update && apt-get dist-upgrade -y && \
apt-get install psmisc -y -q && \
apt-get autoremove -y && apt-get clean && \
rm -rf /var/cache/* && rm -rf /var/lib/apt/lists/* //在容器中執行相應的指令
ENTRYPOINT ["/init.sh"] //設定容器啟動的時候執行的命令
1.使用RUN 指令安裝應用和軟體包,構建映象
2.使用ENTRYPOINT執行應用程式或服務,比如執行一個MySQL,應該優先使用EXEC格式的ENTRYPOINT指令
3.CMD可為ENTRYPOINT提供額外的預設引數,同時可以利用docker run後面的引數進行更改。
5.Docker儲存
docker 有兩種儲存方式:storage driver和data volume
stroage driver這種儲存方式主要是儲存那些無狀態的資料,是映象層和容器層組成的,而data volume是目錄或者檔案
平時執行容器的時候既有無狀態的容器也有有狀態的容器,我們的資料層(映象層和容器層)和volume都可以儲存資料,使用的時候該怎麼選擇呢?
需要考慮以下幾個場景:
1.Database軟體VS Database資料
2.Web應用VS應用產生的日誌
3.資料分析軟體VS input/output資料
4.Apache Server VS靜態Html 檔案
很顯然這幾個場景:前部分都是無狀態的,可以放在資料層(映象層和容器層),應該作為映象的一部分
而後面的都是資料需要儲存的,應該放在data volume,並且與映象分開存放
相關文章
- Docker(六):Docker 三劍客之 Docker SwarmDockerSwarm
- Docker(五):Docker 三劍客之 Docker MachineDockerMac
- Docker(四):Docker 三劍客之 Docker ComposeDocker
- 容器技術|Docker三劍客之docker-swarmDockerSwarm
- Docker基礎、Machine、Compose、Swarm入門與實踐DockerMacSwarm
- 容器技術|Docker三劍客之docker-composeDocker
- 【Docker】 SwarmDockerSwarm
- Ubuntu安裝Docker及Docker-composeUbuntuDocker
- 三劍客——AWK
- Docker Compose 實踐及梳理Docker
- Docker Swarm modeDockerSwarm
- “三劍客”之sed手中有劍
- "三劍客"之awk心中無劍
- 三劍客詳解
- Linux文字三劍客Linux
- shell 三劍客—grep
- 三劍客之SED
- Docker MachineDockerMac
- Docker學習—SwarmDockerSwarm
- Linux三劍客之sedLinux
- Shell必備三劍客
- 四劍客第三關
- 前端三劍客之HTML前端HTML
- Linux 三劍客之sedLinux
- docker composeDocker
- Docker Swarm 叢集搭建DockerSwarm
- 8、docker swarm操作使用DockerSwarm
- docker swarm部署介紹DockerSwarm
- Docker Swarm Mode簡介DockerSwarm
- Docker Swarm叢集初探DockerSwarm
- 三劍客詳解之find
- CSS陰影效果三劍客CSS
- Linux文字三劍客總結Linux
- 三劍客 Handler、Looper 和 MessageQueueOOP
- Docker 和 Docker ComposeDocker
- Docker部署系列之Docker Compose安裝Redis三主三從叢集DockerRedis
- 使用 docker-compose 搭建 Laravel 環境 (三)DockerLaravel
- Docker Machine簡介DockerMac
- Docker學習—MachineDockerMac