docker相关
启动容器:
docker run -it busybox /bin/sh
-it 参数告诉了 Docker 项目在启动容器后,需要给我们分配一个文本输入 / 输出环境,也就是 TTY,跟容器的标准输入相关联,这样我们就可以和这个 Docker 容器进行交互了。而 /bin/sh 就是我们要在 Docker 容器里运行的程序。
如果本地没有指定容器,会到中心仓拉取
docker run -v /test ...
docker run -v /home:/test ...
这两种声明方式的本质,实际上是相同的:都是把一个宿主机的目录挂载进了容器的 /test 目录。只不过,在第一种情况下,由于你并没有显示声明宿主机目录,那么 Docker 就会默认在宿主机上创建一个临时目录 /var/lib/docker/volumes/[VOLUME_ID]/_data,然后把它挂载到容器的 /test 目录上。而在第二种情况下,Docker 就直接把宿主机的 /home 目录挂载到容器的 /test 目录上。
DockerFile样例
# 使用官方提供的Python开发镜像作为基础镜像
FROM python:2.7-slim
# 将工作目录切换为/app
WORKDIR /app
# 将当前目录下的所有内容复制到/app下(ADD指令不是对容器内部的操作)
ADD . /app
# 使用pip命令安装这个应用所需要的依赖
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 允许外界访问容器的80端口
EXPOSE 80
# 设置环境变量
ENV NAME World
# 设置容器进程为:python app.py,即:这个Python应用的启动命令
CMD ["python", "app.py"]
制作容器:
docker build -t helloworld .
-t 的作用是给这个镜像加一个 Tag
查看容器镜像列表:
docker image ls
更改名字:
docker tag helloworld geektime/helloworld:v1
提交镜像:
docker push geektime/helloworld:v1
docker commit 4ddf4638572d geektime/helloworld:v2
docker commit 指令,把一个正在运行的容器,直接提交为一个镜像。一般来说,需要这么操作原因是:这个容器运行起来后,我又在里面做了一些操作,并且要把操作结果保存到镜像里
进入容器:
docker exec -it 4ddf4638572d /bin/sh
一个进程,可以选择加入到某个进程已有的 Namespace 当中,从而达到“进入”这个进程所在容器的目的,这正是 docker exec 的实现原理
查看容器信息:
docker inspect --format '{{ .State.Pid }}' 58f0a6510ca8
–format ‘{{ .State.Pid }}’ 过滤出PID信息