Docker|基礎篇

xbmchina發表於2019-04-13

簡介

Docker 在容器的基礎上,進行了進一步的封裝,從檔案系統、網路互聯到程式隔離等等,極大的簡化了容器的建立和維護。使得 Docker 技術比虛擬機器技術更為輕便、快捷。

下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機器技術是虛擬出一套硬體後,在其上執行一個完整作業系統,在該系統上再執行所需應用程式;而容器內的應用程式直接執行於宿主的核心,容器內沒有自己的核心,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機器更為輕便。

傳統虛擬化

Docker

概念

Docker 包括三個基本概念
  • 映象(Image)
  • 容器(Container)
  • 倉庫(Repository) 如果按物件導向思想:映象類比如容器類比如例項 公有倉庫:hub.docker.com/
Docker 引擎

Docker 引擎是一個包含以下主要元件的客戶端伺服器應用程式。

  • 一種伺服器,它是一種稱為守護程式並且長時間執行的程式。
  • REST API用於指定程式可以用來與守護程式通訊的介面,並指示它做什麼。
  • 一個有命令列介面 (CLI) 工具的客戶端。

Docker 引擎元件的流程如下圖所示:

Docker|基礎篇

安裝

以下基於Centos7以上版本。

centos7安裝:www.osyunwei.com/archives/78…

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.io
複製程式碼

Docker基本操作指令

下載映象:

$ docker pull tomcat
複製程式碼

解析:docker pull [選項] [Docker Registry 地址[:埠號]/]倉庫名[:標籤]

啟動容器:

  • 1.互動式執行
$ docker run -it --rm tomcat bash
複製程式碼
    1. 後臺執行
$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">] <image>[: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

參考文件

Docker操作(基於Compose)

Docker Compose 將所管理的容器分為三層,

工程(project) 由一組關聯應用容器組成的一個完整的業務單元。

服務(service) 一個應用的容器,實際上若干個執行著相同映象的容器例項。

容器(container) Compose就是通過命令對專案中的一組容器的生命週期進行便捷的管理。

安裝:

官網地址:github.com/docker/comp…

$ 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:環境變數設定。

更多配置docs.docker.com/compose/com…

啟動

$ docker-compose up -d
複製程式碼

-d:指後臺執行 跟蹤日誌

$ docker-compose logs -f tomcat 
複製程式碼

**-f:**類似於tail -f

解除安裝

$ docker-compose down
複製程式碼

後續

Docker持續整合

總結

Docker與微服務更配哦。

資源:

Docker官方文件

DockerHub倉庫

DockerCompose

一些常用的映象

最後

如果對 Java、大資料感興趣請長按二維碼關注一波,我會努力帶給你們價值。覺得對你哪怕有一丁點幫助的請幫忙點個贊或者轉發哦。

Docker|基礎篇

相關文章