docker
- 官网 https://www.docker.com/get-started/
- Docker 从入门到实践 https://yeasy.gitbook.io/docker_practice/
docker的生命周期
- 镜像:Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含任何动态数据,其内容在构建之后也不会被改变。
- 容器:容器是镜像运行时的实体, 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。按照 Docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
- 仓库:镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
常用命令
查看docker信息
docker info
从docker镜像仓库获取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
搜索镜像
docker search [ImageName]
查看镜像列表
docker images
用Dockerfile构建镜像
docker build -t [Docker Registry 地址[:端口号]/]仓库名[:标签] Dockerfile_path
使用Dockerfile_path下的Dockerfile文件
docker build -t [Docker Registry 地址[:端口号]/]仓库名[:标签] -f Dockerfile_path/custom_Dockerfile
使用指定文件构建
docker build --help 可以看到完整的参数选项
将镜像推送至仓库
docker push [Docker Registry 地址[:端口号]/]仓库名[:标签]
停用镜像
docker stop ImageID
重启镜像
docker start imageID
重命名镜像
docker tag imageID imageREPOSITORY:imageTAG
删除镜像
docker rmi imageID
删除所有镜像
docker rmi $(docker images -q)
通过镜像运行容器
docker run -it ubuntu:18.04 bash
以ubuntu:18.04镜像运行容器,并进入容器内shell
docker run -it -d -p 50000:5000 --env-file /Users/custom.env imageID /bin/bash /tmp/run.sh
-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-i 则让容器的标准输入保持打开
-d 让 Docker 在后台运行
--env-file 将文件/Users/custom.env作为容器内的环境变量-p将容器内端口5000暴露出来映射为50000端口
容器内启用命令/bin/bash /tmp/run.sh
docker run --help 可以查看所有参数
查看容器
docker ps
docker ps -a 查看所有容器,包括启动失败的
docker container ls -a
启动、重启容器
docker container start [container ID or NAMES]
docker container restart [container ID or NAMES]
获取容器的输出信息
docker container logs [container ID or NAMES]
重命名容器
docker rename [container ID] imageREPOSITORY:imageTAG
停止容器
docker stop 容器Name
删除所有未启动容器
docker container prune
删除容器
docker container rm [container ID]
删除所有容器
docker rm $(docker ps -aq)
镜像导入导出
镜像导出-将镜像打包成文件
docker save -o 文件名.tar [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker save [镜像id] > [文件名.tar]
镜像导入-解压镜像文件到本地
docker load < 文件名.tar
从一个机器将镜像迁移到另一个机器,并且带进度条的功能
docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'