容器的概念
優(yōu)勢
- 靈活: 即使是最復(fù)雜的應(yīng)用也能被容器化
- 輕量:
- 你能即時(shí)的部署更新,升級
- 你能本地build, 部署在云端蝗岖,運(yùn)行在任何地方
- 可擴(kuò)展的: 你能增長并且自動的分布 容器副本
Images and containers
A container launched by running an image.
image 是一個可執(zhí)行的包胶背,包含運(yùn)行應(yīng)用程序所需的所有內(nèi)容 - 代碼挽荠,運(yùn)行時(shí)間啦扬,庫镀迂,環(huán)境變量和配置文件。
containers
Dockerfile
Dockerfile 定義了在你的容器內(nèi)環(huán)境中發(fā)生的事怪嫌。對網(wǎng)絡(luò)接口和磁盤驅(qū)動器等資源的訪問在此環(huán)境中進(jìn)行虛擬化义锥,該環(huán)境與系統(tǒng)的其他部分隔離,因此您需要將端口映射到外部世界岩灭,并具體說明要“復(fù)制”到哪些文件那個環(huán)境拌倍。但是,執(zhí)行此操作后噪径,您可以預(yù)期此Dockerfile中定義的應(yīng)用程序的構(gòu)建在其運(yùn)行的任何位置都會完全相同柱恤。
Docker 能夠根據(jù)從Dockerfile
文件讀取的指令來自動構(gòu)建images.
Dockerfile
是一個文本文件。它包含了用戶在命令行能夠調(diào)用的所有命令去裝配一個image找爱。
使用
docker build
命令從Dockerfile
和一個上下文來構(gòu) 是建image. 上下文指的是一系列文件膨更,PATH
或者是URL
。 PATH
是你的本地文件系統(tǒng)的目錄缴允。URL
是 git 倉庫地址荚守。
上下文可以被遞歸處理。 所以PATH
可以包含子目錄
FROM
必須在開頭位置练般,只有一個
RUN
RUN ["executable", "param1", "param2"]
CMD
格式
CMD ["executable","param1","param2"]
在Dockerfile
里只能有一個CMD
命令矗漾,如果有多個,那最后那個會起效果薄料。
docker attach
docker attach [OPTIONS] CONTAINER
attach 容器的id 或者名字
stop 容器 敞贡,使用CTRL-c
發(fā)送SIGKILL
給這個容器。如果
--sig-proxy
是 true (默認(rèn))摄职,CTRL-c
發(fā)送SIGINT
給容器誊役。可以使用CTRL-p CTRL-q
去detach 這個容器并且 讓它自己運(yùn)行谷市。
dock command line
列出鏡像
docker images
刪除鏡像
docker image rm <IMAGE NAME>
列出容器
docker ps
拉取鏡像
docker pull registry.aibee.cn/store/signals_base:0.0.1
運(yùn)行一個鏡像
docker run -it --rm signals:latest bash
volume
如果想指定volume 的驅(qū)動選項(xiàng)蛔垢,應(yīng)該使用
--mount
文檔鏈接-v
or --volume
: 包含三個字段,用 冒號:
分割迫悠。
- 對于named volume. 第一個字段是 volume的名字鹏漆。在宿主機(jī)上是惟一的。對于anonymous volume 创泄,第一個字段忽略
- 第二個字段是路徑艺玲。被加載到 容器的的路徑
- 第三個字段是可選的。例如
ro
--mount
有三種類型鞠抑,bind
volume
tmpfs
- 創(chuàng)建一個volume
docker volume create<volume name>
- 顯示一個volume 的詳細(xì)信息
docker volume inspect <volume name>
- 列出volumes
docker volume ls
- 將不使用的local volumes 刪除
docker volume prune
- 刪除某個volume
docker volume rm <volume name>
Examples
$ docker volume create hello
hello
$ docker run -d -v hello:/world busybox ls /world
docker 不支持相對路徑
多個容器可以在同一時(shí)刻使用同一個volume. 對于多個容器需要訪問共享的數(shù)據(jù)是很有用的饭聚。例如:如果一個容器負(fù)責(zé)寫數(shù)據(jù),另一個容器負(fù)責(zé)讀數(shù)據(jù)
volume name 不能重復(fù)
docker
docker run -it --rm -v hello:/root/world:ro registry.aibee.cn/store/signals_base:0.0.1 bash
python3 建立虛擬環(huán)境
python3 -m venv tutorial-env
啟動虛擬環(huán)境
source tutorial-env/bin/activate
clone 一個倉庫后搁拙,
執(zhí)行arc
arc install-certificate
提交后執(zhí)行
arc diff
Dockfile 最佳實(shí)踐
WORKDIR
使用絕對路徑秒梳,不要用 RUN cd ... && do-something
ADD or COPY
推薦使用COPY法绵, ADD 會對某些文件解壓縮,支持遠(yuǎn)程下載端幼。后來發(fā)現(xiàn)并不好礼烈。推薦更簡單的COPY 弧满。遠(yuǎn)程下載用curl 或 wget
docker build
build an image from an Dockfile
使用
docker build [OPTIONS] PATH | URL | -
參數(shù)
參數(shù) | 描述 |
---|---|
-t --tag | Name and optionally a tag in the ‘name:tag’ format |
-f --file | Name of the Dockerfile (Default is ‘PATH/Dockerfile’) |
example
docker build -t vieux/apache:2.0 .
docker build -f Dockerfile.debug .
docker push
desc
Push an image or a repository to a registry