#### 安装 官网下载地址 >https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 此处采用阿里云镜像 ```bash # 配置阿里云镜像源 cd /etc/yum.repos.d wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装 yum install docker-ce # 启动docker systemctl start docker # 检查docker状态 systemctl status docker ``` #### 注册阿里云账号,获取专用加速器地址  ```bash sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["xxxxxxxxx"] # 对应上图中操作文档进行 } EOF sudo systemctl daemon-reload sudo systemctl restart docker ``` #### 原理 一篇写的很好的docker入门文章 > 海牛部落-青牛,http://hainiubl.com/topics/13 #### docker常用命令 - 搜索镜像 ```bash docker search ``` - 从仓库中获取需要的镜像 ```bash docker image pull registry:tag docker pull registry:tag ``` 使用示例 ```bash docker pull centos:centos6相当于 docker pull registry.hub.docker.com/centos:centos6 ``` 即从注册服务器registry.hub.docker.com的centos仓库下载标记为centos6的镜像. 但是有时候官方仓库注册服务器下载较慢,可以使用其他仓库,使用其他仓库是需要指定完整的仓库注册服务器地址 - 查看镜像列表,列出了所有顶层(top-level)镜像 ```bash docker image ls docker images docker image ls --no-trunc ``` 我们没有办法区分一个镜像和一个只读层,所以我们提出了top-level镜像。只有创建容器时使用的镜像或者是直接pull下来的镜像能被称为顶层(top-level)镜像,并且每一个顶层镜像下面都隐藏了多个镜像层。 - 列出所有镜像,也可以说是列出了所有的可读层。如果你想要查看某一个image-id下的所有层,可以使用docker history来查看 ```bash docker images -a ``` - 利用 Dockerfile 来创建镜像 ```bash docker build ``` docker build它会反复的执行多个命令,build命令根据Dockerfile文件中的FROM指令获取到镜像,然后重复地1)run(create和start)、2)修改、3)commit。在循环中的每一步都会生成一个。新的层,因此许多新的层会被创建。 Dockerfile中的每条指令都是独立运行的,上一条指令如`cd /tmp`不会对下一条制定有任何影响 新建一个目录和Dockerfile ```bash mkdir erha cd erha touch Dockerfile ``` Dockerfile中每一条命令都会创建镜像的一层,最多不超过127层 ```bash FROM python:3.6-alpine MAINTAINER erica ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "app.py"] ``` Docker基本语法,详细语法说明参考 [[Dockerfile]](http://erica.kkwen.cn/index.php/archives/158/ "[Dockerfile]") 使用docker build生成镜像 ```bash [root@ _16_ ~/erha]# docker build -t erha/python:3.6-alpine . -t: 添加标记,指定新的镜像用户信息 . :表示当前目录下的Dockerfile, 也可以使用-f 参数指定Dockerfile的路径 docker build -f /path/to/a/Dockerfile . ``` - 上传镜像 ```bash docker push ``` 将镜像推到自己的仓库中,如在docker hub中注册之后 使用示例: ```bash docker push erha/python:3.6-alpine ``` - 创建容器 ```bash docker create ``` 为指定的镜像(image)添加了一个可读写层,构成了一个新的容器。注意,这个容器并没有运行 docker create 命令提供了许多参数选项可以指定名字,硬件资源,网络配置等等。 使用示例 ```bash #查看本地images列表 $ docker images #用仓库+标签 $ docker create -it --name centos6_container centos:centos6 #使用image-id $ docker create -it --name centos6_container 6a77ab6655b9 bash #可以使用 docker ps查看一件存在的容器列表,不加参数默认只显示当前运行的容器 $ docker ps -a ``` 这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,如果目录不存在 Docker 会自动为你创建它 - 启动容器,为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间 ```bash docker start ``` 使用示例 ```bash #通过容器名启动 $ docker start -i centos6_container #通过容器ID启动 $ docker start -i b3cd0b47fe3d ``` - 运行容器,包括创建、运行容器,即docker run包括 docker create 和 docker start ```bash docker run ``` - 进入容器,会在运行中的容器执行一个新进程 ```bash docker exec # 在当前容器中执行新命令,如果增加 -it参数运行bash 就和登录到容器效果一样的。 docker exec -it centos6_container bash ``` - 停止容器,向向所有运行在容器中的进程发送一个SIGTERM的信号,然后停止所有的进程 ```bash docker stop ``` - 杀掉容器,向运行中的容器发送不友好SIGKILL的信号 ```bash docker kill ``` - 暂停容器,利用了cgroups的特性将运行中的进程空间暂停,不足之处在于发送一个SIGTSTP信号对于进程来说不够简单易懂,以至于不能够让所有进程暂停。 ```bash docker pause ``` - 删除容器,移除构成容器的可读写层,只能对非运行态容器执行 ```bash docker rm ``` - 列出所有运行中的容器, 隐藏了非运行态容器的存在 ```bash docker ps ``` - 列出所有的容器,不管是运行的,还是停止的 ```bash docker ps -a ``` - 删除镜像, 移除构成镜像的一个只读层,只删除顶层,使用 -f 参数强制删除中间的只读层 ```bash docker rmi ``` - commit容器,将容器的可读写层转换为一个只读层,把一个容器转换成了不可变的镜像 ```bash docker commit ``` - inspect ```bash docker inspect or ``` docker inspect命令会提取出容器或者镜像最顶层的元数据 - 镜像保存 ```bash docker save ``` docker save命令会创建一个镜像的压缩文件,这个文件能够在另外一个主机的Docker上使用。和export命令不同,这个命令为每一个层都保存了它们的元数据。这个命令只能对镜像生效。 示例 ```bash #保存centos镜像到centos_images.tar 文件 $ docker save -o centos_images.tar centos:centos6 #或者直接重定向 $ docker save -o centos_images.tar centos:centos6 > centos_images.tar ``` - 容器导出 ```bash docker export ``` docker export命令创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容(译者注:export后的容器再import到Docker中,通过docker images –tree命令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的历史镜像) - 查看历史镜像,递归地输出指定镜像的历史镜像 ```bash docker history ``` #### 很清楚的图解Docker容器和镜像 > http://dockone.io/article/783 最后修改:2019 年 08 月 21 日 11 : 13 AM © 著作权归作者所有