成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Docker 實(shí)踐(二):使用教程

Neilyo / 2130人閱讀

摘要:以下為幾個(gè)常用的指令依賴鏡像所有都必須以命令開(kāi)始,表示其依賴的鏡像。的端口不使用公有端口。與命令使用數(shù)組語(yǔ)法。推薦阿里云,畢竟有錢(qián),穩(wěn)定。參數(shù)表示后臺(tái)守護(hù)進(jìn)程運(yùn)行容器。執(zhí)行,運(yùn)行應(yīng)用。

docker 即容器

一些概念 Docker Registry

Docker 遠(yuǎn)程鏡像倉(cāng)庫(kù)

DockerHub

DaoCloud / Aliyun

Docker Images

Docker Images 是用來(lái)創(chuàng)建 docker 容器的只讀模版,其中包含了容器啟動(dòng)所需要的所有配置信息和運(yùn)行程序,一次構(gòu)建之后可以多次復(fù)用。

從結(jié)構(gòu)上來(lái)講,Docker Image 是分層次的,如圖所示:

這樣就自然出現(xiàn)了父鏡像和基礎(chǔ)鏡像的概念,在圖中,每一個(gè)上層鏡像都是依賴于下一層的鏡像,所以下層鏡像可稱為上層鏡像的父鏡像,而最底層的鏡像是沒(méi)有父鏡像的,可稱其為基礎(chǔ)鏡像(Base Image)。

實(shí)際場(chǎng)景下,一般我們自己創(chuàng)建的鏡像都會(huì)依賴于某個(gè) Linux 操作系統(tǒng)的鏡像,例如 ubuntu,大多數(shù)情況下,我們可稱其為基礎(chǔ)鏡像,但是我們也可以查看 ubuntu 鏡像的 Dockerfile 會(huì)發(fā)現(xiàn),它也是依賴于一個(gè)叫 scratch 的鏡像,scratchdocker 的一個(gè)空鏡像,里面只有 docker 加入的一些元數(shù)據(jù),如果我們想要追求自己的鏡像盡可能的輕量,也可以將 scratch 鏡像作為我們的基礎(chǔ)鏡像來(lái)構(gòu)建。

Dockerfile

Dockerfile 是用來(lái)說(shuō)明如何自動(dòng)構(gòu)建 docker image 的指令集文件,在 Dockerfile 中編寫(xiě)好指令集之后,我們就可以通過(guò) docker build 命令構(gòu)建鏡像,Dockerfile 文件中命令的順序就是構(gòu)建過(guò)程中執(zhí)行的順序。

以下為幾個(gè)常用的指令:

1. FROM:依賴鏡像

所有 Dockerfile 都必須以 FROM 命令開(kāi)始,表示其依賴的鏡像。

FROM image_name
2. MAINTAINER:鏡像作者信息
MAINTAINER author 
3. RUN:在shell或者exec的環(huán)境下執(zhí)行的命令
RUN 
4. ADD:將主機(jī)文件復(fù)制到容器中
ADD /path/to/sourcefile/in/host /path/to/targetfile/in/container
5. CMD:指定容器啟動(dòng)默認(rèn)執(zhí)行的命令
CMD ["executable","param1","param2"]
6. EXPOSE:指定容器在運(yùn)行時(shí)監(jiān)聽(tīng)的端口
EXPOSE 
7. WORKDIR:指定RUN、CMDENTRYPOINT 命令的工作目錄
WORKDIR /path/to/workdir/in/container
8. VOLUME:授權(quán)訪問(wèn)從容器內(nèi)到主機(jī)上的目錄
VOLUME ["/data"]

關(guān)于 Dockerfile 編寫(xiě)有以下幾點(diǎn)需要注意:

盡量不要省略 MAINTAINER 信息。

EXPOSE 的端口不使用公有端口。

CMDENTRYPOINT 命令使用數(shù)組語(yǔ)法。

另外,在國(guó)內(nèi)使用 docker(以 ubuntu 為例), Dockerfile 第一個(gè)執(zhí)行的命令最好為(具體原因你猜):

RUN sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list 
    && apt-get update --fix-missing 
    && apt-get -y upgrade
Docker Container

Docker Container 中包含了我們的應(yīng)用代碼和代碼執(zhí)行的環(huán)境,是用來(lái)打包分發(fā)代碼的單元。

構(gòu)建鏡像

首先要編寫(xiě) Dockerfile,在文件中寫(xiě)入構(gòu)建鏡像需要的指令集,然后執(zhí)行下面命令:

docker build {image_name} {/path/to/Dockerfile}

例如,我們構(gòu)建一個(gè) mysql 的鏡像,先編寫(xiě) Dockerfile

FROM ubuntu:14.04
MAINTAINER Tairy 

# Install Base.
RUN 
  sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list && 
  apt-get update && 
  apt-get -y upgrade && 
  apt-get install -y build-essential && 
  apt-get install -y software-properties-common && 
  apt-get install -y byobu curl git htop man unzip vim wget

RUN apt-get -y install mysql-server

EXPOSE 3306

CMD ["mysqld"]

執(zhí)行

docker build -t mysql ./

構(gòu)建工具將先在本地查找 ubuntu:14.04 的鏡像,如果有,則直接依賴使用,如果沒(méi)有,將去遠(yuǎn)程的倉(cāng)庫(kù)中下載官方構(gòu)建的 ubuntu:14.04 的鏡像,當(dāng)然因?yàn)橐恍┎豢擅枋龅脑颍@個(gè)下載過(guò)程成功率不大,而且非常耗時(shí),所以我們可以做如下優(yōu)化:

docker pull daocloud.io/library/ubuntu:wily-20160706

然后將 DockerfileFROM 命令修改為:

# 我注冊(cè)了daocloud 賬號(hào),就使用 daocloud 的鏡像,也可以選擇使用阿里云的鏡像。
FROM daocloud.io/library/ubuntu:wily-20160706

這樣,就節(jié)省了很多的時(shí)間。

總之,在安裝環(huán)境的過(guò)程中,因?yàn)槟硞€(gè)偉大的防火墻工程,我們需要的大部分資源都沒(méi)法順利的獲取到,解決辦法就是將下載的源換成國(guó)內(nèi)某些廠商提供的鏡像源。(推薦阿里云,畢竟有錢(qián),穩(wěn)定。)

經(jīng)過(guò)一段時(shí)間的自動(dòng)構(gòu)建,便可生成一個(gè)可用的 mysql 鏡像,使用 docker images 命令查看構(gòu)建好的鏡像列表,輸出:

REPOSITORY        TAG                 IMAGE ID            CREATED             SIZE
mysql            latest              ffe5a4341fee        1 days ago          1.009 GB

刪除一個(gè)鏡像,使用下面命令:

# -f 表示強(qiáng)制刪除,慎重使用
docker rmi -f image_name
創(chuàng)建容器

有了基礎(chǔ)的鏡像模板之后,就可以創(chuàng)建容器來(lái)執(zhí)行應(yīng)用代碼,具體用到 run 命令:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

例如我們要?jiǎng)?chuàng)建一個(gè)運(yùn)行 mysql 的容器,可以執(zhí)行

docker run -d --name db1 -v `pwd`:/data:rw -p 8001:3306 mysql

這條命令將創(chuàng)建后臺(tái)執(zhí)行的 mysql 容器,里面運(yùn)行一個(gè) mysql 服務(wù)器,可以使用 docker ps 命令查看啟動(dòng)的容器。

-d 參數(shù)表示后臺(tái)守護(hù)進(jìn)程運(yùn)行容器。

--name 參數(shù)表示容器的名稱,可隨意取。

-v 表示主機(jī)和容器共享文件的映射,容器的目錄就是 Dockerfile 中用 VOLUME 命令定義的目錄。

-p 表器主機(jī)和容器端口映射,容器的端口就是 Dockerfile 中用 EXPOSE 命令綁定的端口。

關(guān)于創(chuàng)建容器的時(shí)候的坑:

一般來(lái)說(shuō),我們會(huì)在 Dockerfile 中的最后用 CMD 命令定義容器啟動(dòng)之后執(zhí)行的命令,但是如果我們定義的命令執(zhí)行報(bào)錯(cuò)或者命令沒(méi)有創(chuàng)建一個(gè)守護(hù)進(jìn)程的話,docker ps 之后是看不到容器在運(yùn)行的,此時(shí)可以使用 docker l ogs 命令查看容器啟動(dòng)的日志,進(jìn)行排錯(cuò)。

當(dāng)然,我們也可以在 run 的時(shí)候定義容器啟動(dòng)的命令,例如下面命令將啟動(dòng)一個(gè) ubuntu 的容器,并執(zhí)行 /bin/bash 程序,進(jìn)入 ubuntu 的 terminal:

docker run -it ubuntu:14.04 /bin/bash

此命令成功的標(biāo)志就是你會(huì)發(fā)現(xiàn)命令行變成了類似:

root@d71ff8587917:/# 

說(shuō)明現(xiàn)在已經(jīng)進(jìn)入了 ubuntu 的容器中,可以直接在此命令行中操作 ubuntu,或者輸入 exit 回車之后即可退出,退出之后再 docker ps 會(huì)發(fā)現(xiàn)容器也不再運(yùn)行了。

一些常用命令:

docker ps -a 命令可以列出所有的容器,包括已經(jīng)終止運(yùn)行的。

docker rm container_name/container_id 可以刪除某個(gè)容器。

docker start container_name/container_id 啟動(dòng)某個(gè)容器。

docker stop container_name/container_id 終止某個(gè)容器。

docker exec -it contaner_name /bin/bash 在容器中執(zhí)行 /bin/bash,執(zhí)行該命令之后將可以以交互命令行的方式操作容器,另外 /bin/bash 可以替換成任意可執(zhí)行命令。

Docker compose

docker-compose 是用來(lái)創(chuàng)建和管理多容器應(yīng)用的工具,使用 docker-compose 只需三步:

編寫(xiě)應(yīng)用運(yùn)行環(huán)境的 Dockerfile,即 image。

編寫(xiě) docker-compose.yml,在 services 塊下指定容器相關(guān)參數(shù)以及與其它容器的依賴關(guān)系。

執(zhí)行 docker-compose up,運(yùn)行應(yīng)用。

一個(gè)簡(jiǎn)單的 docker-compose.yml 如下:

version: "2" # compose 版本,當(dāng)前為 2
services:
  web: # web 容器
    build: . # Dockerfile 所在路徑
    ports:
    - "5000:5000" # 端口映射
    volumes:
    - .:/code # 文件路徑映射
    - logvolume01:/var/log
    links:
    - redis # 鏈接容器
  redis:
    image: redis # 定義鏈接容器
volumes:
  logvolume01: {}

Compose file reference

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/26693.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.5 - Docker丨Build, Ship, Run,

    摘要:此刻的后手指依舊飛速地敲打鍵盤(pán),絲毫沒(méi)有要停不下來(lái)意思。閱讀本期技術(shù)周刊,你不光能弄明白什么是,使用的意義何在,還將被傳授秘籍,以達(dá)的境界。周刊篩選的每篇內(nèi)容,是作者的獨(dú)到見(jiàn)解,踩坑總結(jié)和經(jīng)驗(yàn)分享。 showImg(https://segmentfault.com/img/bVC5qJ?w=900&h=385); 啪嗒啪嗒,啪嗒啪嗒,聽(tīng)到后排動(dòng)感十足的清脆鍵盤(pán)響,我就能猜到公司程序員定...

    Panda 評(píng)論0 收藏0
  • Docker 實(shí)踐系列文章

    摘要:使用有一段時(shí)間了,打算把自己實(shí)踐過(guò)程中的一些理解和感悟記錄下來(lái)。目錄實(shí)踐一了解架構(gòu)實(shí)踐二使用教程實(shí)踐三下構(gòu)建開(kāi)發(fā)環(huán)境實(shí)踐四環(huán)境容器化實(shí)踐五生產(chǎn)環(huán)境容器化實(shí)踐六容器監(jiān)控實(shí)踐七提升幸福感實(shí)踐八構(gòu)建開(kāi)發(fā)環(huán)境實(shí)踐九生產(chǎn)環(huán)境優(yōu)化參考源碼分析系列文章 使用 docker 有一段時(shí)間了,打算把自己實(shí)踐過(guò)程中的一些理解和感悟記錄下來(lái)。 系列文章發(fā)布在 SegmentFault 上我的專欄 Tairy,...

    VincentFF 評(píng)論0 收藏0
  • Docker簡(jiǎn)介、常用命令與實(shí)踐

    摘要:上一篇簡(jiǎn)介常用命令與實(shí)踐一六鏡像操作獲取鏡像下載鏡像到本地上有大量的高質(zhì)量的鏡像可以用,這里我們就說(shuō)一下怎么獲取這些鏡像。 【上一篇:Docker簡(jiǎn)介、常用命令與實(shí)踐(一)】 六、Docker鏡像操作 6.1 獲取鏡像(下載鏡像到本地) Docker Hub?上有大量的高質(zhì)量的鏡像可以用,這里我們就說(shuō)一下怎么獲取這些鏡像。從 Docker 鏡像倉(cāng)庫(kù)獲取鏡像的命令是?docker pul...

    mykurisu 評(píng)論0 收藏0
  • Flux7 Docker 系列教程):必備的 15 條命令

    摘要:本系列教程翻譯自,系列共有九篇,本文譯自第二篇??偨Y(jié)本章知識(shí)介紹了最基本的十五個(gè)命令,接下來(lái)的教程將會(huì)陸續(xù)介紹如何在中運(yùn)行一個(gè)應(yīng)用以及其他的命令。接下來(lái)會(huì)在本系列教程結(jié)束后補(bǔ)充幾篇應(yīng)用的實(shí)例。 本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第二篇 Part 2: The 15 Commands。 該系列所有文章將參考其他學(xué)習(xí)...

    chemzqm 評(píng)論0 收藏0
  • Flux7 Docker 系列教程):必備的 15 條命令

    摘要:本系列教程翻譯自,系列共有九篇,本文譯自第二篇??偨Y(jié)本章知識(shí)介紹了最基本的十五個(gè)命令,接下來(lái)的教程將會(huì)陸續(xù)介紹如何在中運(yùn)行一個(gè)應(yīng)用以及其他的命令。接下來(lái)會(huì)在本系列教程結(jié)束后補(bǔ)充幾篇應(yīng)用的實(shí)例。 本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第二篇 Part 2: The 15 Commands。 該系列所有文章將參考其他學(xué)習(xí)...

    AprilJ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<