Docker教程

来源:互联网 发布:java逐个读取单词 编辑:程序博客网 时间:2024/05/21 08:37

什么是Docker

    &bsp;  Docker包括一个命令行程序、一个后台守护进程,以及一组远程服务。它通过Unix的容器技术解器的封装。这个充当容器分发角色的组件被称为镜像。Docker镜像是一个容器中运行程序的所有文件的捆绑快照。

Docker解决的问题

  1. 组织有序
  2. 提高了移植性
  3. 保护你的机器

    Docker提供了所谓的抽象,抽象允许你以简化的方式处理复杂的工作。但容器不能改善程序的安全。

何时何处使用Docker

Docker应用范围限定在Linux服务器或桌面运行的软件,如Web服务器、邮件服务器、数据库、代理服务器等。

Docker仓库

完成镜像的传输

  • hub.docker.com (速度慢)
  • c.163.com (网易蜂巢 镜像中心)
  • https://dev.aliyun.com/search.html (阿里镜像仓库)
  • 镜像也可以搭建内网的镜像中心

Docker命令

docker search <镜像名字>    搜索可用的docker镜像   docker pull <镜像名字>      下载镜像docker ps       可以查看当前在这台机器上运行的容器    docker ps -a 查看所有镜像信息    docker ps -aq 查看所有镜像的id    docker ps -q 查看所有镜像的iddocker run -d <镜像名>     在后台运行容器,并返回容器的id  -d是detach的缩写docker run --help       查看docker run的参数docker exec     进入容器内部  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]docker exec -i      保证我们的输入有效docker exec -t      分配一个伪终端docker exec -it f4      两个命令一起运行  由于当前容器运行的镜像非常的少,它就可以通过前两个id判断出是哪个镜像,从而进入这个容器docker exec 镜像的名称或ID 运行的命令docker exec -it f4<名字或id> bash  切换到容器内部docker search <镜像名字>    搜索可用的docker镜像docker exec -ti <镜像id>  /bin/bash      进入后台容器并提供bashdocker stop <镜像的id或名字>          停掉当前的镜像docker start <镜像的id或名字>         启动镜像docker restart    <镜像的id>   重启docker容器docker rmi <镜像名称> <镜像名称>..  删除一个或者多个镜像docker rmi -f <镜像名称>        -f = --force    强制删除镜像    docker ps -a    查看所有容器(包括stop的容器)docker rm <容器id>        删除指定id的容器docker stop $(docker ps -q)        停用全部运行中的容器docker rm $(docker ps -aq)     删除全部容器docker stop $(docker ps -q) & docker rm $(docker ps -aq)     一条命令实现停用并删除容器

更新镜像

1.更新镜像之前,我们需要使用镜像来创建一个容器。2.在运行的容器中使用 apt-get update 命令进行更新,在完成操作之后输入exit命令退出容器。3.通过docker commit命令来提交容器副本。

docker commit -m="has update" -a="tomato" <镜像id> tomato/ubuntu:v2

各个参数说明:    -m:提交的描述信息    -a:指定镜像作者    e218edb10161:容器ID    tomato/ubuntu:v2:指定要创建的目标镜像名

Docker的网络

Bridge 桥接<默认情况>端口映射Host 利用主机的IP和端口号None 不与外界通信

构建镜像

  • Dockerfile 用来告诉Docker,我制作镜像的每一个步骤
  • docker build 执行Dockerfile中所描述的每一件事情


    使用命令 docker build,从零开始来创建一个镜像,我们需要创建一个Dockerfile文件,其中包含一组命令来告诉Docker如何构建镜像。首先创建一个空白的文件夹,mkdir myDockerFROM    centos:6.7MAINTAINER      tomato "XXX@XXX.com"RUN     /bin/echo 'root:123456' |chpasswdRUN     useradd runoobRUN     /bin/echo 'runoob:123456' |chpasswdRUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/localEXPOSE  22EXPOSE  80CMD     /usr/sbin/sshd -D


每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。第一条指令FROM,指定使用哪个镜像源RUN指令告诉Docker在镜像内执行命令,安装了什么然后,使用Dockerfile文件,通过docker build命令构建一个镜像。$ docker build -t tomato/centos:6.7 .参数说明:-t:指定创建的目标镜像名.:Dockerfile文件所在目录,可以指定Dockerfile的绝对路径


    当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。所以命令 docker build -t tomato/centos:6.7 . 中的这个 . ,实际上是在指定上下文的目录, docker build 命令会将该目录下的内容打包交给Docker 引擎以帮助构建镜像。如果观察 docker build 输出,我们其实已经看到了这个发送上下文的过程:    $ docker build -t tomato/centos:6.7 .    Sending build context to Docker daemon 2.048 kB    ...理解构建上下文对于镜像构建是很重要的,避免犯一些不应该的错误。比如将 Dockerfile 放到了硬盘根目录去构建,结果发现 docker build 执行后,在发送一个几十 GB 的东西,极为缓慢而且很容易构建失败。那是因为这种做法是在让 docker build打包整个硬盘,这显然是使用错误。

什么是Docker

        Docker包括一个命令行程序、一个后台守护进程,以及一组远程服务。它通过Unix的容器技术解决了常见的软件问题,并简化了安装、运行、发布和删除软件。
容器不是虚拟化,Docker容器不使用硬件虚拟化,Docker容器中的程序接口和主机的Linux内核直接打交道,容器的运行与计算机操作系统之间没有额外的中间层。

        Docker通过一种打包和分发的软件,完成传统容器的封装。这个充当容器分发角色的组件被称为镜像。Docker镜像是一个容器中运行程序的所有文件的捆绑快照。

Docker解决的问题

  1. 组织有序
  2. 提高了移植性
  3. 保护你的机器

    Docker提供了所谓的抽象,抽象允许你以简化的方式处理复杂的工作。但容器不能改善程序的安全。

何时何处使用Docker

Docker应用范围限定在Linux服务器或桌面运行的软件,如Web服务器、邮件服务器、数据库、代理服务器等。

Docker仓库

完成镜像的传输

  • hub.docker.com (速度慢)
  • c.163.com (网易蜂巢 镜像中心)
  • https://dev.aliyun.com/search.html (阿里镜像仓库)
  • 镜像也可以搭建内网的镜像中心

Docker命令

docker search <镜像名字>    搜索可用的docker镜像   docker pull <镜像名字>      下载镜像docker ps       可以查看当前在这台机器上运行的容器    docker ps -a 查看所有镜像信息    docker ps -aq 查看所有镜像的id    docker ps -q 查看所有镜像的iddocker run -d <镜像名>     在后台运行容器,并返回容器的id  -d是detach的缩写docker run --help       查看docker run的参数docker exec     进入容器内部  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]docker exec -i      保证我们的输入有效docker exec -t      分配一个伪终端docker exec -it f4      两个命令一起运行  由于当前容器运行的镜像非常的少,它就可以通过前两个id判断出是哪个镜像,从而进入这个容器docker exec 镜像的名称或ID 运行的命令docker exec -it f4<名字或id> bash  切换到容器内部docker search <镜像名字>    搜索可用的docker镜像docker exec -ti <镜像id>  /bin/bash      进入后台容器并提供bashdocker stop <镜像的id或名字>          停掉当前的镜像docker start <镜像的id或名字>         启动镜像docker restart    <镜像的id>   重启docker容器docker rmi <镜像名称> <镜像名称>..  删除一个或者多个镜像docker rmi -f <镜像名称>        -f = --force    强制删除镜像    docker ps -a    查看所有容器(包括stop的容器)docker rm <容器id>        删除指定id的容器docker stop $(docker ps -q)        停用全部运行中的容器docker rm $(docker ps -aq)     删除全部容器docker stop $(docker ps -q) & docker rm $(docker ps -aq)     一条命令实现停用并删除容器

更新镜像

1.更新镜像之前,我们需要使用镜像来创建一个容器。2.在运行的容器中使用 apt-get update 命令进行更新,在完成操作之后输入exit命令退出容器。3.通过docker commit命令来提交容器副本。

docker commit -m="has update" -a="tomato" <镜像id> tomato/ubuntu:v2

各个参数说明:    -m:提交的描述信息    -a:指定镜像作者    e218edb10161:容器ID    tomato/ubuntu:v2:指定要创建的目标镜像名

Docker的网络

Bridge 桥接<默认情况>端口映射Host 利用主机的IP和端口号None 不与外界通信

构建镜像

  • Dockerfile 用来告诉Docker,我制作镜像的每一个步骤
  • docker build 执行Dockerfile中所描述的每一件事情


    使用命令 docker build,从零开始来创建一个镜像,我们需要创建一个Dockerfile文件,其中包含一组命令来告诉Docker如何构建镜像。首先创建一个空白的文件夹,mkdir myDockerFROM    centos:6.7MAINTAINER      tomato "XXX@XXX.com"RUN     /bin/echo 'root:123456' |chpasswdRUN     useradd runoobRUN     /bin/echo 'runoob:123456' |chpasswdRUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/localEXPOSE  22EXPOSE  80CMD     /usr/sbin/sshd -D


每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。第一条指令FROM,指定使用哪个镜像源RUN指令告诉Docker在镜像内执行命令,安装了什么然后,使用Dockerfile文件,通过docker build命令构建一个镜像。$ docker build -t tomato/centos:6.7 .参数说明:-t:指定创建的目标镜像名.:Dockerfile文件所在目录,可以指定Dockerfile的绝对路径


    当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。所以命令 docker build -t tomato/centos:6.7 . 中的这个 . ,实际上是在指定上下文的目录, docker build 命令会将该目录下的内容打包交给Docker 引擎以帮助构建镜像。如果观察 docker build 输出,我们其实已经看到了这个发送上下文的过程:    $ docker build -t tomato/centos:6.7 .    Sending build context to Docker daemon 2.048 kB    ...理解构建上下文对于镜像构建是很重要的,避免犯一些不应该的错误。比如将 Dockerfile 放到了硬盘根目录去构建,结果发现 docker build 执行后,在发送一个几十 GB 的东西,极为缓慢而且很容易构建失败。那是因为这种做法是在让 docker build打包整个硬盘,这显然是使用错误。

原创粉丝点击