摘要:以下為幾個常用的指令依賴鏡像所有都必須以命令開始,表示其依賴的鏡像。的端口不使用公有端口。與命令使用數(shù)組語法。推薦阿里云,畢竟有錢,穩(wěn)定。參數(shù)表示后臺守護(hù)進(jìn)程運行容器。執(zhí)行,運行應(yīng)用。
一些概念 Docker Registrydocker 即容器
Docker 遠(yuǎn)程鏡像倉庫
DockerHub
DaoCloud / Aliyun
Docker ImagesDocker Images 是用來創(chuàng)建 docker 容器的只讀模版,其中包含了容器啟動所需要的所有配置信息和運行程序,一次構(gòu)建之后可以多次復(fù)用。
從結(jié)構(gòu)上來講,Docker Image 是分層次的,如圖所示:
這樣就自然出現(xiàn)了父鏡像和基礎(chǔ)鏡像的概念,在圖中,每一個上層鏡像都是依賴于下一層的鏡像,所以下層鏡像可稱為上層鏡像的父鏡像,而最底層的鏡像是沒有父鏡像的,可稱其為基礎(chǔ)鏡像(Base Image)。
實際場景下,一般我們自己創(chuàng)建的鏡像都會依賴于某個 Linux 操作系統(tǒng)的鏡像,例如 ubuntu,大多數(shù)情況下,我們可稱其為基礎(chǔ)鏡像,但是我們也可以查看 ubuntu 鏡像的 Dockerfile 會發(fā)現(xiàn),它也是依賴于一個叫 scratch 的鏡像,scratch 是 docker 的一個空鏡像,里面只有 docker 加入的一些元數(shù)據(jù),如果我們想要追求自己的鏡像盡可能的輕量,也可以將 scratch 鏡像作為我們的基礎(chǔ)鏡像來構(gòu)建。
DockerfileDockerfile 是用來說明如何自動構(gòu)建 docker image 的指令集文件,在 Dockerfile 中編寫好指令集之后,我們就可以通過 docker build 命令構(gòu)建鏡像,Dockerfile 文件中命令的順序就是構(gòu)建過程中執(zhí)行的順序。
以下為幾個常用的指令:
所有 Dockerfile 都必須以 FROM 命令開始,表示其依賴的鏡像。
FROM image_name
MAINTAINER author
RUN
ADD /path/to/sourcefile/in/host /path/to/targetfile/in/container
CMD ["executable","param1","param2"]
EXPOSE
WORKDIR /path/to/workdir/in/container
VOLUME ["/data"]
關(guān)于 Dockerfile 編寫有以下幾點需要注意:
盡量不要省略 MAINTAINER 信息。
EXPOSE 的端口不使用公有端口。
CMD 與 ENTRYPOINT 命令使用數(shù)組語法。
另外,在國內(nèi)使用 docker(以 ubuntu 為例), Dockerfile 第一個執(zhí)行的命令最好為(具體原因你猜):
RUN sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list && apt-get update --fix-missing && apt-get -y upgradeDocker Container
Docker Container 中包含了我們的應(yīng)用代碼和代碼執(zhí)行的環(huán)境,是用來打包分發(fā)代碼的單元。
構(gòu)建鏡像首先要編寫 Dockerfile,在文件中寫入構(gòu)建鏡像需要的指令集,然后執(zhí)行下面命令:
docker build {image_name} {/path/to/Dockerfile}
例如,我們構(gòu)建一個 mysql 的鏡像,先編寫 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 的鏡像,如果有,則直接依賴使用,如果沒有,將去遠(yuǎn)程的倉庫中下載官方構(gòu)建的 ubuntu:14.04 的鏡像,當(dāng)然因為一些不可描述的原因,這個下載過程成功率不大,而且非常耗時,所以我們可以做如下優(yōu)化:
docker pull daocloud.io/library/ubuntu:wily-20160706
然后將 Dockerfile 中 FROM 命令修改為:
# 我注冊了daocloud 賬號,就使用 daocloud 的鏡像,也可以選擇使用阿里云的鏡像。 FROM daocloud.io/library/ubuntu:wily-20160706
這樣,就節(jié)省了很多的時間。
總之,在安裝環(huán)境的過程中,因為某個偉大的防火墻工程,我們需要的大部分資源都沒法順利的獲取到,解決辦法就是將下載的源換成國內(nèi)某些廠商提供的鏡像源。(推薦阿里云,畢竟有錢,穩(wěn)定。)
經(jīng)過一段時間的自動構(gòu)建,便可生成一個可用的 mysql 鏡像,使用 docker images 命令查看構(gòu)建好的鏡像列表,輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest ffe5a4341fee 1 days ago 1.009 GB
刪除一個鏡像,使用下面命令:
# -f 表示強(qiáng)制刪除,慎重使用 docker rmi -f image_name創(chuàng)建容器
有了基礎(chǔ)的鏡像模板之后,就可以創(chuàng)建容器來執(zhí)行應(yīng)用代碼,具體用到 run 命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例如我們要創(chuàng)建一個運行 mysql 的容器,可以執(zhí)行
docker run -d --name db1 -v `pwd`:/data:rw -p 8001:3306 mysql
這條命令將創(chuàng)建后臺執(zhí)行的 mysql 容器,里面運行一個 mysql 服務(wù)器,可以使用 docker ps 命令查看啟動的容器。
-d 參數(shù)表示后臺守護(hù)進(jìn)程運行容器。
--name 參數(shù)表示容器的名稱,可隨意取。
-v 表示主機(jī)和容器共享文件的映射,容器的目錄就是 Dockerfile 中用 VOLUME 命令定義的目錄。
-p 表器主機(jī)和容器端口映射,容器的端口就是 Dockerfile 中用 EXPOSE 命令綁定的端口。
關(guān)于創(chuàng)建容器的時候的坑:
一般來說,我們會在 Dockerfile 中的最后用 CMD 命令定義容器啟動之后執(zhí)行的命令,但是如果我們定義的命令執(zhí)行報錯或者命令沒有創(chuàng)建一個守護(hù)進(jìn)程的話,docker ps 之后是看不到容器在運行的,此時可以使用 docker l ogs 命令查看容器啟動的日志,進(jìn)行排錯。
當(dāng)然,我們也可以在 run 的時候定義容器啟動的命令,例如下面命令將啟動一個 ubuntu 的容器,并執(zhí)行 /bin/bash 程序,進(jìn)入 ubuntu 的 terminal:
docker run -it ubuntu:14.04 /bin/bash
此命令成功的標(biāo)志就是你會發(fā)現(xiàn)命令行變成了類似:
root@d71ff8587917:/#
說明現(xiàn)在已經(jīng)進(jìn)入了 ubuntu 的容器中,可以直接在此命令行中操作 ubuntu,或者輸入 exit 回車之后即可退出,退出之后再 docker ps 會發(fā)現(xiàn)容器也不再運行了。
一些常用命令:
docker ps -a 命令可以列出所有的容器,包括已經(jīng)終止運行的。
docker rm container_name/container_id 可以刪除某個容器。
docker start container_name/container_id 啟動某個容器。
docker stop container_name/container_id 終止某個容器。
docker exec -it contaner_name /bin/bash 在容器中執(zhí)行 /bin/bash,執(zhí)行該命令之后將可以以交互命令行的方式操作容器,另外 /bin/bash 可以替換成任意可執(zhí)行命令。
Docker composedocker-compose 是用來創(chuàng)建和管理多容器應(yīng)用的工具,使用 docker-compose 只需三步:
編寫應(yīng)用運行環(huán)境的 Dockerfile,即 image。
編寫 docker-compose.yml,在 services 塊下指定容器相關(guān)參數(shù)以及與其它容器的依賴關(guān)系。
執(zhí)行 docker-compose up,運行應(yīng)用。
一個簡單的 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26693.html
摘要:此刻的后手指依舊飛速地敲打鍵盤,絲毫沒有要停不下來意思。閱讀本期技術(shù)周刊,你不光能弄明白什么是,使用的意義何在,還將被傳授秘籍,以達(dá)的境界。周刊篩選的每篇內(nèi)容,是作者的獨到見解,踩坑總結(jié)和經(jīng)驗分享。 showImg(https://segmentfault.com/img/bVC5qJ?w=900&h=385); 啪嗒啪嗒,啪嗒啪嗒,聽到后排動感十足的清脆鍵盤響,我就能猜到公司程序員定...
摘要:使用有一段時間了,打算把自己實踐過程中的一些理解和感悟記錄下來。目錄實踐一了解架構(gòu)實踐二使用教程實踐三下構(gòu)建開發(fā)環(huán)境實踐四環(huán)境容器化實踐五生產(chǎn)環(huán)境容器化實踐六容器監(jiān)控實踐七提升幸福感實踐八構(gòu)建開發(fā)環(huán)境實踐九生產(chǎn)環(huán)境優(yōu)化參考源碼分析系列文章 使用 docker 有一段時間了,打算把自己實踐過程中的一些理解和感悟記錄下來。 系列文章發(fā)布在 SegmentFault 上我的專欄 Tairy,...
摘要:上一篇簡介常用命令與實踐一六鏡像操作獲取鏡像下載鏡像到本地上有大量的高質(zhì)量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像。 【上一篇:Docker簡介、常用命令與實踐(一)】 六、Docker鏡像操作 6.1 獲取鏡像(下載鏡像到本地) Docker Hub?上有大量的高質(zhì)量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像。從 Docker 鏡像倉庫獲取鏡像的命令是?docker pul...
摘要:本系列教程翻譯自,系列共有九篇,本文譯自第二篇??偨Y(jié)本章知識介紹了最基本的十五個命令,接下來的教程將會陸續(xù)介紹如何在中運行一個應(yīng)用以及其他的命令。接下來會在本系列教程結(jié)束后補(bǔ)充幾篇應(yīng)用的實例。 本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第二篇 Part 2: The 15 Commands。 該系列所有文章將參考其他學(xué)習(xí)...
摘要:本系列教程翻譯自,系列共有九篇,本文譯自第二篇??偨Y(jié)本章知識介紹了最基本的十五個命令,接下來的教程將會陸續(xù)介紹如何在中運行一個應(yīng)用以及其他的命令。接下來會在本系列教程結(jié)束后補(bǔ)充幾篇應(yīng)用的實例。 本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第二篇 Part 2: The 15 Commands。 該系列所有文章將參考其他學(xué)習(xí)...
閱讀 3486·2021-10-13 09:39
閱讀 1468·2021-10-08 10:05
閱讀 2273·2021-09-26 09:56
閱讀 2289·2021-09-03 10:28
閱讀 2688·2019-08-29 18:37
閱讀 2047·2019-08-29 17:07
閱讀 609·2019-08-29 16:23
閱讀 2200·2019-08-29 11:24