1. 程式人生 > >Docker 基礎入門+例項(5)

Docker 基礎入門+例項(5)

網路配置

大量的網際網路應用服務需要多個容器間進行網路通訊。

docker目前提空了對映容器埠到主機容器互聯機制來為容器提供網路服務

埠對映實現訪問容器
在啟動容器時,若不指定對應的引數,在容器外是不能通過網路訪問的。
可以使用-p或-p引數來指定埠對映。

-P

Docker 會隨機對映一個30000-49900的埠至容器內部開發的網路埠
docker run -d -P tomcat

這裡寫圖片描述

可見隨機映射出的埠為32768,我們即可通過www.locallhost:32768來實現對tomcat的訪問

-p

對映所有的埠地址

docker run -d -p 8080
:8080 tomcat


對映指定埠地址

docker run -d -p 127.0.0.1:8080:8080 tomcat


對映到指定地址的任意埠

docker run -d -p 127.0.0.1::8080 tomcat

檢視埠對映配置

docker port id

也可以檢視詳情資訊

docker inspect id

實現容器互聯

容器的連線(linking)系統是除了埠對映外另一種可以與容器中應用進行互動的方式。在源和接收容器間建立一個隧道、接收容器可以檢視到源容器指定的資訊。

容器互聯

–link name:alias
name:連線容器的名字
alias:這個連線的別名

案例

1.先建一個數據庫容器db

docker run -d --name db -e MYSQL_ROOT_PASSWORD=123456 mysql

2.建立一個web容器,並把它連線到db容器

docker run -d -P --name web --link db:dblink tomcat

Dokcerfile

Dockerfile是一個文字格式的配置檔案,可以快速建立自定義的映象
基本結構

  • 基礎映象資訊
  • 維護者資訊
  • 映象操作指令
  • 容器啟動時的指令
#第一行必須是基礎映象資訊
FROM centos:latest

#維護者資訊
 MINTAINER 
ifeng #映象操作指令 RUN yum update -y RUN yum install -y nginx #容器啟動時執行命令 CMD /usr/sbin/ngxin

RUN指令對映象執行跟隨的命令。沒執行一條RUN指令。映象新增新的一層,並提交
CMD指定執行容器的操作指令


指令(RUN FROM MAINTAINER CMD)
指令的一般格式:指令名 指令引數
FROM

FROM jingxiang

在同一個dockerfile中建立多個映象,可以使用多個FORM指令(每個映象一個)

MINTAINER

 MINTAINER 維護者資訊


RUN

RUN 命令

在shell終端中執行的命令,每條RUN命令將在當前映象基礎上執行指定命令。並提交給新的映象
。當命令過長時可以用\換行

CMD
CMD和INTERPOINT都是執行自行啟動的命令
區別在於CMD命令可以被RUN後引數覆蓋 而INTERPOINT不可被覆蓋
兩種方式

CMD "要執行的命令",“引數1”,“引數2...
CMD 要執行的命令 引數1 引數2

指定啟動容器時執行的命令,每個dockerfile CMD只能有一條。若多條,則只會執行最後一條。
若使用者啟動時,制定了執行命令,則會覆蓋掉CMD指定的命令

EXPOSE

EXPOSE 埠號 埠號2 ....

告訴暴露的埠號。提供給互聯絡統使用

ENV

ENV KEY VALUE

提供一個環境變數,使用者被後續指令RUN使用,並在容器執行時保持

ADD

ADD SRC dest

複製指定的到容器中的.
可以是Dockerfile所在目錄的一個相對路徑;也可是URL;也可是tar檔案

copy

COPY SRC DEST

複製主機的到容器中的。不存在會自動建立

ENTRYPOINT

ENTRYPOINT "執行的命令","引數1""引數2"...
ENTRYPOINT 執行的命令 引數1 引數2

配置容器啟動執行的命令,不可被docker run提供的引數覆蓋 (與CMD的區別)
只能有一個ENTRYPOINT

VOLUME

VOLUME /path/to/workdir

指定預設的工作目錄

Dockerfile例項

首先要把包和Dockerfile放在一起

[root@localhost docker-file]# ls

Dockerfile nginx-1.9.3.tar.gz pcre-8.37.tar.gz

[root@localhost docker-file]# pwd

/opt/docker-file

建立Dockerfile

#可以使是id或者映象的名字
FROM 3dee
#MINTAINER zuozhe
MINTAINER ifeng
#add 把包新增到容器的指定目錄,tar會自動解壓
ADD pcre-8.37.tar.gz /usr/local/src
ADD nginx-1.9.3.tar.gz /usr/local/src
#RUN 在容器裡執行命令建立使用者
RUN useradd -s /sbin/nologin -M www
#workdir相當於cd到這個目錄
WORKDIR /usr/local/src/nginx-1.9.3
RUN 在容器裡執行命令進行編譯安裝
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install
RUN 在容器裡執行命令更改nginx配置檔案,前臺執行
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
env將nginx啟動命令加到環境變數裡
ENV PATH /usr/local/nginx/sbin:$PATH
#對映80埠
EXPORE 80
#執行nginx命令
CMD "nginx"

執行Dockerfile

docker build -t my-nginx-1:v1 /opt/docker-file/

-t:指定生成映象的標籤資訊
-f:指定路徑(當前路徑可省略)

docker build -t my-nginx-1:v1 .

* .(空格點相對當前目錄) *
成功

Successfully built 21273b8e163a
[root@localhost docker-file]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

my-nginx-1 v1 21273b8e163a 14 minutes ago 429.1 MB

Docker-Compose連編應用部署

Docker-Compose是Docker官方編排專案之一,快速在分散式中部署應用。
專案介紹
Compose 專案目是 Docker 官方方的開源專案目,負責實現對 Docker 容器器叢集的快速編排。從功
能上看,跟 OpenStack 中的 Heat 十十分類似。
其程式碼目目前在 https://github.com/docker/compose 上開源。
Compose 定位是 “定義和執行行行多個 Docker 容器器的應用用(Defining and running multi-
container Docker applications)”,其前身是開源專案目 Fig,目目前仍然相容 Fig 格式的模板文文
件。
通過第一一部分中的介紹,我們知道使用用一一個 Dockerfile 模板文檔案,可以讓用使用者很方方便便的定義一一
個單獨的應用用容器器。然而而,在日日常工工作中,經常會碰到需要多個容器器相互配合來完成某項任務
的情況。例例如要實現一一個 Web 專案目,除了了 Web 服務容器器本身,往往還需要再加上後端的數
據庫服務容器器,甚至至還包括負載均衡容器器等。
Compose 恰好滿足足了了這樣的需求。它允許用使用者通過一一個單獨的 docker-compose.yml 模板文文
件(YAML 格式)來定義一一組相關聯的應用用容器器為一一個專案目(project)

  • 服務(service):一個應用,一個應用容器,可以包括若干執行相同映象的容易例項
  • 專案(porject):由一組關聯的應用容器完成的一個完整的業務單元,在docker-compose.yml檔案中定義

    *Compose 專案目由 Python 編寫,實現上呼叫用了了 Docker 服務提供的 API 來對容器器進行行行管理理。因
    此,只要所操作的平臺支支援 Docker API,就可以在其上利利用用 Compose 來進行行行編排管理理*
    Docker-Compose安裝

mysqldb:
    image: mysql
    container_name: mysqldb
    ports:
    - "60002:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=123456
    volumes:
    - /yundata/soft_conf/mysql_cnf/mysql/dbdata/:/var/lib/mysql/
    - /yundata/soft_conf/mysql_cnf/mysql/conf/:/etc/mysql/conf.d/
    - /yundata/soft_conf/mysql_cnf/mysql/logs/:/var/log/mysql/
- /etc/localtime:/etc/localtime

例項

[root@server ~]# vim docker-compose.yml
version: "2"  # 使用Version 2
services:  # 包含需要操作的容器
  app1: # 容器的名稱
    image: centos_nginx  # 指定基於哪個映象
    ports:  # 指定對映的埠
      - "8080:80"
    networks:  # 指定使用哪個網路模式
      - "net1"
    volumes:  # 指定掛載的的目錄
      - /data/:/data
  app2:
    image: test_centos
    networks:
      - "net2"
    volumes:
      - /data/:/data1
    entrypoint: tail -f /etc/passwd  # 這一句是為了讓這個容器不會被關閉
networks:
  net1:
    driver: bridge
  net2:
    driver: bridge

啟動

[[email protected] ~]# docker-compose up -d  # -d是丟到後臺執行
Creating network "root_net2" with driver "bridge"
Creating network "root_net1" with driver "bridge"
Creating root_app2_1 ... 
Creating root_app1_1 ... 
Creating root_app2_1
Creating root_app1_1 ... done
[[email protected] ~]#

停止

[[email protected] ~]# docker-compose stop
Stopping root_app1_1 ... done
Stopping root_app2_1 ... done
[[email protected] ~]# 

啟動已有的容器

[[email protected] ~]# docker-compose start
Starting app2 ... done
Starting app1 ... done
[[email protected] ~]# 

檢視容器狀態

[[email protected] ~]# docker-compose ps
   Name                  Command                State     Ports
---------------------------------------------------------------
root_app1_1   /bin/sh -c /usr/local/ngin ...   Exit 137        
root_app2_1   tail -f /etc/passwd              Exit 137        
[[email protected] ~]# 

刪除容器

[[email protected] ~]# docker-compose rm -f
Going to remove root_app1_1, root_app2_1
Removing root_app1_1 ... done
Removing root_app2_1 ... done
[[email protected] ~]# 

停止並刪除執行中的容器

[[email protected] ~]# docker-compose down
Stopping root_app1_1 ... done
Stopping root_app2_1 ... done
Removing root_app1_1 ... done
Removing root_app2_1 ... done
Removing network root_net2
Removing network root_net1
[[email protected] ~]# docker-compose ps
Name   Command   State   Ports
------------------------------
[[email protected] ~]# 

相關推薦

Docker 基礎入門+例項(5)

網路配置 大量的網際網路應用服務需要多個容器間進行網路通訊。 docker目前提空了對映容器埠到主機和容器互聯機制來為容器提供網路服務 埠對映實現訪問容器 在啟動容器時,若不指定對應的引數,在容器外是不能通過網路訪問的。 可以使用-p或-p引數來指定埠

Docker基礎入門及示例

操作 容器 work 我們 cor 運維 又能 不用 控制器   Docker近幾年的發展可謂一日千裏,特別從是2013年隨著一個基於LXC的高級容器引擎開源,到現在,其在linux和windows上都有了很好的支持,並且已經有很多公司將docker用於實際的生產環境部

Docker基礎入門實戰(一)

art The 開機自啟動 inf 應用程序 51cto 管理 x86 正在 Docker基礎入門實戰第1章 docker簡介1.1 what is DockerDocker是一個開源的應用容器引擎,基於Go語言並遵從Apache2.0協議開源,源代碼部

docker基礎入門安裝以及常見命令

rep ima ftw dock component 工作 echo argument sof 1、docker 常見命令以及安裝知識詳解 1、docker 安裝1、安裝版本統一 :Docker version 18.03.0-ce, build 0520e242、安

Docker基礎 ------入門實戰

簡介 Docker是一種新興的虛擬化技術,能夠一定程度上的代替傳統虛擬機器。不過,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。我也將Docker類比於Python虛擬環境,可以有效的配置各個版本的開發環境,比如深度學習與Java環境。 優勢 本人主要想用來配置開

Docker基礎入門實戰

Docker(應用容器引擎)入門教程 目錄 docker簡介 docker的特點 docker系統架構 安裝docker 如何使用docker docker容器常用操作 docker命令彙總 手工製作java映象

Docker 基礎入門

1、概念介紹 1.1 容器 1.1.1 介紹   容納其它物品的工具,可以部分或完全封閉,被用於容納、儲存、運輸物品。物體可以被放置在容器中,而容器則可以保護內容物。   1.1.2 要使用容器必須需要在核心級支援2中技術 namespaces 名稱空間 Control Gro

Hibernate基礎入門例項

我們總共需要做五件事   1:製造資料       1.1 在資料庫中建立一個名為test的資料庫create database test      1.2建立資料表create TABLE product( int id(10) NOT NULL AUTO_INCR

c#基礎入門5)——File、FileStream、StreamReader、StreamWriter

File File的用法如下: public void OperateFile() { //example檔案初始內容截圖如圖一 string filePath = @"e:\Study\test\example.txt"; if (F

【WEB基礎】HTML & CSS 基礎入門5)邊框與背景

前面(HTML圖片) 漂亮的網頁肯定少不了邊框與背景的修飾,本篇筆記就是說明如何為網頁上的元素設定邊框或者背景(背景顏色和背景圖片)。 之前,先了解一下HTML中的圖片元素,因為圖片標籤的使用非常簡單,所以就插在這裡說明一下。 HTML中的圖片,我們只需要掌握它的標籤寫法以及它的三個屬性就基本OK了。

Docker基礎入門

Docker概述 Docker是一個用於開發,交付和執行應用程式的開放平臺。 Docker優勢 更快速的交付和部署 對於開發人員 - Build Once, Run Anywhere 容器意味著環境隔離和可重複性。開發人員只需為應用建立一次執行環境,然後打包成容器便可在其他機器上執行。另外,容器環境與所在的

小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門

人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門 Docker 基礎 首先說一件事情,就在本文寫作前一天,Mirantis 這家公司宣佈

【原創 Hadoop&Spark 動手實踐 5】Spark 基礎入門,集群搭建以及Spark Shell

min util man 操作 because tro txt library all Spark 基礎入門,集群搭建以及Spark Shell 主要借助Spark基礎的PPT,再加上實際的動手操作來加強概念的理解和實踐。

Docker入門到飛升:基礎配置安裝

ror wdm ibm height 宿主機 開始 uav down 例如 導讀 Docker近幾年非常火,因為它是容器虛擬化,更能夠充分提高硬件資源的使用率。其實利用率高不算什麽,它最大的優勢是能給讓運維人員或者開發人員快速部署和交付資源,大大提高了工作效率。幾乎所

docker基礎使用與入門實踐

docker鏡像 docker容器 docker容器管理常用命令 Dockerfile使用 docker鏡像制作 一、何為docker docker最早基於LXC實現(LinuX Container)從0.7版本以後開始去除LXC轉而使用自行開發的libcontainer,從1.11開始,

Vue2.5開發去哪兒網App 從零基礎入門到實戰項目

eset 通過 計算 拆分 lan 修復 周末 模塊 blank 第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收獲。第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上,擴展解析 MVV

docker基礎入門

jadocker的基本概念 docker容器可以理解為在沙盒中運行的進程。這個沙盒包含了該進程運行所必須的資源,包括文件系統、系統類庫、shell 環境等等。但這個沙盒默認是不會運行任何程序的。你需要在沙盒中運行一個進程來啟動某一個容器。這個進程是該容器的唯一進程,所以當該進程結束的時候,容器也會完全的停止

Docker 基礎知識-入門

docker1. Docker簡介和KVM區別 1.1 docker的三大理念 構建 運輸 運行 ps:有點類似於java代碼,一次構建到處運行 1.2 docker結構 相關說明:image: 和虛擬機的鏡像類似container: 用鏡像創建的實例repository: 類似於yum倉庫dock

Vue2.5開發去哪兒網App 從零基礎入門到實戰項目

基礎配置 可能 lan 第2章 方式 路由 表單 加載 基礎入門 第1章 課程介紹本章主要介紹課程的知識大綱,學習前提,講授方式及預期收獲。1-1 課程簡介 第2章 Vue 起步本章將快速講解部分 Vue 基礎語法,通過 TodoList 功能的編寫,在熟悉基礎語法的基礎上