1.docker是基於go語言實現
主要目標是對對應組件的封裝、分發、部署、運行等生命週期的管理,使應用程序及其運行環境可以作到「一次封裝,處處運行」linux
2.docker爲了解決運行環境和配置問題的軟件容器,方便作持續集成並有助於總體發佈的容器虛擬化技術nginx
3.docker能幹些什麼?docker
新建並啓動一個docker容器,使用 docker run
命令便可apache
docker run -d -p 91:80 nginx
須要注意的是使用 docker run 命令建立容器時,會先檢查本地是否存在指定鏡像,若是本地不存在,docker 會自動從 dockerHub 上下載一個該鏡像並啓動。vim
訪問地址http://localhost:91/
windows
容器:用鏡像建立的運行實例,能夠把容器當作簡易版的Linux的容器,一個運行中的容器是一個運行在Docker主機上的進程,但它和主機,以及全部運行在主機上其餘進程都是隔離的。centos
容器是利用什麼機制實現隔離的?tomcat
docker是一個client-server結構的進程,docker守護進程運行在主機上,而後經過socket鏈接從客戶端的訪問,守護進程從客戶端接受命令並管理運行在主機上的docker容器。容器是一個運行時環境,就是鯨魚背上的一個個集裝箱。bash
1.幫助命令架構
docker version docker info docker --help
2.鏡像命令
docker images : 列出本地鏡像 docker image -qa : 顯示所有鏡像id docker images --digests : 顯示鏡像簡介信息 docker images --digests --no-trunc docker search tomcat : 搜索某個鏡像 docker pull tomcat : 下載鏡像到本地 等價於 docker pull tomcat:latest(默認下最新版本) docker rmi tomact : 刪除某個鏡像 docker rmi tomcat:6.5 刪除制定版本鏡像 docker rmi -f tomcat 強制刪除鏡像 docker rmi -f nginx tomcat 強制刪除多個鏡像 docker rmi -f ${docker images -qa} 強制刪除所有
3.容器命令
(1) docker pull centos : 下載centos鏡像 (2) docker run [options] image —name=「容器新名字」 :爲容器制定一個名字 -i : 容器的image id -t : 交互式啓動 ,好比 :docker run -it 0a8b6f21d511 -d : 後臺運行容器 -p : 制定映射端口 docker run -it -p 8080:8080 tomcat (-p 指定主機端口:docker容器暴露給宿主機的端口;-P 隨機分配端口) (3) docker ps : docker中運行的進程,docker ps -n 5 (4) exit: 容器中止退出 (5) docker restart \ docker stop \ docker kill \ docker rm (6)一次性刪除多個容器: docker rm -f $(docker ps -qa) docker ps -aq | args docker rm (7)docker run -d 容器名 : 運行容器 (8)docker logs -f -t --tail n 容器id(-f : 跟隨最新的日誌;-t :加入時間戳;--tail n : 倒數幾行): 查看容器日誌 演示命令: docker run -d centos /bin/sh -c 'while true;do echo hello zzyy;sleep 2;done' : 每隔兩秒輸出內容 (9) docker top 容器ID : 查看容器內部運行的進程 (10) docker inspect 容器ID : 查看容器內部細節,如:docker inspect f791d79a4467 (11) docker attach 容器ID : 從新進入未中止的容器 (12) docker exec -t f791d79a4467 ls -l /tmp : 從新進入某個容器並執行容器中的命令,拿到結果反給宿主機 (13) docker cp 容器ID:路徑文件 /宿主機路徑 :copy容器內容到宿主機上
3.1 docker 命令使用舉例
好比重啓nginx過程:
鏡像是一種輕量級、可執行的獨立軟件包,用來打包軟件運行環境和基於運行環境開發的軟件,它包含運行某個軟件所需的全部內容,包括代碼、運行時須要的庫、環境變量和配置。
docker如何加載?
docker的鏡像實際上由一層一層的文件系統組成,這種層級文件系統是unionFS
docker commit -m=「提交信息」 -a=「做者」 容器ID 要建立的目標鏡像名稱:[標籤名] docker commit -m=「helloword」 -a=「feifei」 0a8b6f21d511 feifei/tomcat02:1.2
docker容器產生的數據,若是不經過docker commit生成新的鏡像,使得數據做爲鏡像的一部分保存下來,那麼當容器刪除後,數據天然就沒有了,爲了保存數據咱們使用docker的數據卷。數據卷使得數據能夠持久化和共享。
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名 例如:docker run -it -v /tmp/my-volume:/tmp/my-volume centos ;宿主機目錄:/tmp/my-volume和docker容器目錄/tmp/my-volume這兩個目錄中的數據能夠隨時同步,容器重啓後,也會同步; docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 鏡像名 (帶權限的命令,同步到容器內的文件read only)
這種方式不支持多臺宿主機都可以創建數據卷
能夠在Dockerfile中使用 VOLUME
指令來給鏡像添加一個或多個數據卷
1.建立Dockerfile文件目錄/Users/ShiFeifei/Software/docker-config
,在這個目錄下
touch Dockerfile vim Dockerfile
添加以下內容
FROM centos RUN mkdir /myvol RUN echo "hello world" > /myvol/greeting VOLUME /myvol
2.新建一個 docker 容器
docker build -f /Users/ShiFeifei/Software/docker-config/Dockerfile -t sff/centos .
Dockerfile 是用來構建 Docker鏡像的構建文件,是由一系列命令和參數構成
#
表示註釋Dockerfile面向開發,Docker鏡像成爲軟件交付標準,Docker容器則涉及部署與運維,三者缺一不可,是Docker體系的基石。
1.實現一個功能,定製一個 mycentos 支持vim、ifconfig命令,而且修改登陸後的默認路徑
FROM centos ENV homePath /tmp WORKDIR $homePath #登陸時的目錄是 /tmp RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD /bin/bash
2.自定義一個centos,自帶 tomcat 、jdk
FROM lentos MAINTAINER shifeifei<shifeifei6@163.com> #把宿主機當前路徑下的文件c.txt拷貝到容器的/usr/local/路徑下 COPY c.txt /usr/local/test.txt #把Java和tomcat添加到容器中 ADD jdk-8u171-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.8.tar.gz /usr/local/ #安裝vim編輯器 RUN yum -y install vim #設置工做訪問時的WORKDIR路徑 ENV MYPATH /usr/local WORKDIR $MYPATH #配置Java、tomcat環境變量 ENV JVAV_HOME /usr/local/jdk1.8.0_171 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器運行時監聽端口 EXPOSE 8080 #啓動運行tomcat #CMD [「/usr/local/apache-tomcat-9.0.8/bin/startup.sh」,"run"] CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out