摘要:簡介在容器的基礎上,進行了進一步的封裝,從文件系統網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護。一種服務器,它是一種稱為守護進程并且長時間運行的程序。容器就是通過命令對項目中的一組容器的生命周期進行便捷的管理。
簡介
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。
概念鏡像(Image)
容器(Container)
倉庫(Repository)
如果按面向對象思想:鏡像類比如類,容器類比如實例
公有倉庫:https://hub.docker.com/
Docker 引擎是一個包含以下主要組件的客戶端服務器應用程序。
一種服務器,它是一種稱為守護進程并且長時間運行的程序。
REST API用于指定程序可以用來與守護進程通信的接口,并指示它做什么。
一個有命令行界面 (CLI) 工具的客戶端。
Docker 引擎組件的流程如下圖所示:
安裝以下基于Centos7以上版本。
centos7安裝:https://www.osyunwei.com/arch...
docker安裝:
下載安裝
$ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun
啟動
$ sudo systemctl enable docker $ sudo systemctl start docker
配置Docker 國內加速器
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.ioDocker基本操作指令
下載鏡像:
$ docker pull tomcat
解析:docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標簽]
啟動容器:
1.交互式運行
$ docker run -it --rm tomcat bash
后臺運行
$docker run --name webserver -d -p 8080:8080 tomcat
解析: -it 指:i為交互式操作,t為終端;--rm指容器退出后隨之將其刪除;tomcat指你要啟動的鏡像;bash指tomcat中的shell控制臺;--name 指定名稱;-d 后臺運行; -p 8080:8080 指定端口號(第一個為宿主機端口,第二個為docker的端口。
交互式進入容器:
docker exec -it <容器id> bash
查看運行中的容器:
docker ps -a
刪除容器:
docker rm <容器id>
查看容器運行日志:
docker logs -f -t <容器id或容器名稱>
解析:
-f:跟蹤容器日志的最近更新;
-t:顯示容器日志的時間戳;
清除虛懸鏡像:
docker image prune -a -f
標記本地鏡像,將其歸入某一倉庫
docker tag [options "o">][:tag "o">] [repository/ "o">][username/]name "o">[:tag]
解析:-f 覆蓋已有標記。
將鏡像推送至遠程倉庫,默認為 Docker Hub
docker push name[:tag "o">]
更多命令可以參考【這里】
Docker操作(基于Dockerfile)在一個/usr/local/docker文件中寫一個名為Dockerfile的文件
#pull down centos image FROM centos MAINTAINER test@test.com #copy jdk and tomcat into image ADD ./apache-tomcat-7.0.70.tar.gz /root ADD ./jdk-7u80-linux-x64.tar.gz /root #set environment variable ENV JAVA_HOME /root/jdk1.7.0_80 ENV PATH $JAVA_HOME/bin:$PATH #define entry point which will be run first when the container starts up ENTRYPOINT /root/apache-tomcat-7.0.70/bin/startup.sh && tail -F /root/apache-tomcat-7.0.70/logs/catalina.out
解析:總體看來就是按照Dockerfile的命令規則進行運行shell指令
關鍵命令:
FROM: 指定基礎鏡像
RUN: 執行命令
COPY: <源路徑>... <目標路徑>
ADD:跟COPY相似,如果源文件是tar包時,會自動解壓。(一般用copy指令)
CMD: 容器啟動命令
ENTRYPOINT: 入口點
VOLUME: 定義匿名卷
EXPOSE: 暴露端口
WORKDIR: 指定工作目錄
USER : 指定當前用戶
ENV: 設置環境變量
編譯構建:
docker build [選項] <上下文路徑/URL/->
### 最后有一個點的,它表示上下文。 docker build -t app .
看到 docker build 命令最后有一個 .。. 表示當前目錄,而 Dockerfile 就在當前目錄。
-t app :指定了最終鏡像的名稱為app
參考文檔
Dockerfie 官方文檔
Dockerfile 最佳實踐文檔
Docker 官方鏡像 Dockerfile
Docker操作(基于Compose)Docker Compose 將所管理的容器分為三層,
工程(project) 由一組關聯應用容器組成的一個完整的業務單元。
服務(service) 一個應用的容器,實際上若干個運行著相同鏡像的容器實例。
容器(container)
Compose就是通過命令對項目中的一組容器的生命周期進行便捷的管理。
安裝:官網地址:https://github.com/docker/com...
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose $ docker-compose --version
部署項目
在/usr/local/docker目錄下新建一個docker-compose.yml文件
version: "3" services: web: restart: always image: tomcat container_name: web ports: - 8080:8080 volumes: - /usr/local/docker/nblog/webapps:/usr/local/tomcat/webapps mysql: restart: always image: mysql:5.7.25 container_name: mysql ports: - 3306:3306 environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: root command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=128M volumes: - db_data:/var/lib/mysql volumes: db_data:
docker-compose.yml常用參數解析:
restart:啟動容器自自啟動。
image:鏡像
container_name:自定義容器名
ports:端口,第一個是宿主機,第二個是docker中的端口
volumes: 數據卷,就是宿主機的目錄被docker共享。這里就是你將你的應用放到指定目錄,它就會自動引用進docker容器中。
environment:環境變量設置。
更多配置:https://docs.docker.com/compo...
啟動
$ docker-compose up -d
-d:指后臺運行
跟蹤日志
$ docker-compose logs -f tomcat
-f:類似于tail -f
卸載
$ docker-compose down后續
Docker持續集成
總結Docker與微服務更配哦。
資源:
Docker官方文檔
DockerHub倉庫
DockerCompose
一些常用的鏡像
如果對 Java、大數據感興趣請長按二維碼關注一波,我會努力帶給你們價值。覺得對你哪怕有一丁點幫助的請幫忙點個贊或者轉發哦。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27779.html
摘要:簡單來說是鏡像的源碼。例如,的鏡像鏡像,在中是一個基礎鏡像的鏡像也是鏡像那么鏡像和共享同一個基礎鏡像層,提高了存儲效率。 前言 只有光頭才能變強。 文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y showImg(https://segmentfault.com/img/remote/14600000180560...
摘要:獲取鏡像從中獲取鏡像命令為選項地址端口號倉庫名標簽比如鏡像是由多層存儲所構成。并且下載結束后,給出該鏡像完整的的摘要,以確保下載一致性。運行擁有鏡像后,可以以此鏡像為基礎啟動一個容器。 使用鏡像 從倉庫獲取鏡像; 管理本地主機上的鏡像; 鏡像實現的基本原理。 獲取鏡像 從DockerHub中獲取鏡像 命令為docker pull docker pull [選項] [Docker R...
摘要:獲取鏡像從中獲取鏡像命令為選項地址端口號倉庫名標簽比如鏡像是由多層存儲所構成。并且下載結束后,給出該鏡像完整的的摘要,以確保下載一致性。運行擁有鏡像后,可以以此鏡像為基礎啟動一個容器。 使用鏡像 從倉庫獲取鏡像; 管理本地主機上的鏡像; 鏡像實現的基本原理。 獲取鏡像 從DockerHub中獲取鏡像 命令為docker pull docker pull [選項] [Docker R...
摘要:獲取鏡像選項地址端口號倉庫名標簽例具體選項可通過命名看到默認為,地址格式為域名例運行容器倉庫名以上面的為例,如果我們打算啟動里面的并進行交互式操作這是兩個參數,一個是交互式操作,一個是終端。 獲取鏡像 docker pull [選項] [Docker Registry 地址[:端口號]/] 倉庫名[:標簽] 例:docker pull ubuntu:16.04 具體選項可通過 dock...
摘要:問能否談一下迅雷云使用的過程其實最初的時候,迅雷團隊對是懷有謹慎的態度的。三調度算法是迅雷云定制優化的。迅雷在使用這方面一直沒有把數據層面交給迅雷云之外的系統。 非商業轉載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/201256 曾金龍就職于迅雷網絡,是國內覆蓋面最廣的迅雷P2P引擎核心研發成員。他畢業于中山大...
閱讀 2628·2021-11-19 09:56
閱讀 874·2021-09-24 10:25
閱讀 1632·2021-09-09 09:34
閱讀 2195·2021-09-09 09:33
閱讀 1052·2019-08-30 15:54
閱讀 542·2019-08-29 18:33
閱讀 1264·2019-08-29 17:19
閱讀 505·2019-08-29 14:19