容器的概念
优势
- 灵活: 即使是最复杂的应用也能被容器化
- 轻量:
- 你能即时的部署更新,升级
- 你能本地build, 部署在云端,运行在任何地方
- 可扩展的: 你能增长并且自动的分布 容器副本
Images and containers
A container launched by running an image.
image 是一个可执行的包,包含运行应用程序所需的所有内容 - 代码,运行时间,库,环境变量和配置文件。
containers
Dockerfile
Dockerfile 定义了在你的容器内环境中发生的事。对网络接口和磁盘驱动器等资源的访问在此环境中进行虚拟化,该环境与系统的其他部分隔离,因此您需要将端口映射到外部世界,并具体说明要“复制”到哪些文件那个环境。但是,执行此操作后,您可以预期此Dockerfile中定义的应用程序的构建在其运行的任何位置都会完全相同。
Docker 能够根据从Dockerfile
文件读取的指令来自动构建images.
Dockerfile
是一个文本文件。它包含了用户在命令行能够调用的所有命令去装配一个image。
使用
docker build
命令从Dockerfile
和一个上下文来构 是建image. 上下文指的是一系列文件,PATH
或者是URL
。 PATH
是你的本地文件系统的目录。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
发送SIGKILL
给这个容器。如果
--sig-proxy
是 true (默认),CTRL-c
发送SIGINT
给容器。可以使用CTRL-p CTRL-q
去detach 这个容器并且 让它自己运行。
dock command line
列出镜像
docker images
删除镜像
docker image rm <IMAGE NAME>
列出容器
docker ps
拉取镜像
docker pull registry.aibee.cn/store/signals_base:0.0.1
运行一个镜像
docker run -it --rm signals:latest bash
volume
如果想指定volume 的驱动选项,应该使用
--mount
文档链接-v
or --volume
: 包含三个字段,用 冒号:
分割。
- 对于named volume. 第一个字段是 volume的名字。在宿主机上是惟一的。对于anonymous volume ,第一个字段忽略
- 第二个字段是路径。被加载到 容器的的路径
- 第三个字段是可选的。例如
ro
--mount
有三种类型,bind
volume
tmpfs
- 创建一个volume
docker volume create<volume name>
- 显示一个volume 的详细信息
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 不支持相对路径
多个容器可以在同一时刻使用同一个volume. 对于多个容器需要访问共享的数据是很有用的。例如:如果一个容器负责写数据,另一个容器负责读数据
volume name 不能重复
docker
docker run -it --rm -v hello:/root/world:ro registry.aibee.cn/store/signals_base:0.0.1 bash
python3 建立虚拟环境
python3 -m venv tutorial-env
启动虚拟环境
source tutorial-env/bin/activate
clone 一个仓库后,
执行arc
arc install-certificate
提交后执行
arc diff
Dockfile 最佳实践
WORKDIR
使用绝对路径,不要用 RUN cd ... && do-something
ADD or COPY
推荐使用COPY, ADD 会对某些文件解压缩,支持远程下载。后来发现并不好。推荐更简单的COPY 。远程下载用curl 或 wget
docker build
build an image from an Dockfile
使用
docker build [OPTIONS] PATH | URL | -
参数
参数 | 描述 |
---|---|
-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