1.Docker怎么构建容器、安装容器2.Docker怎么管理镜像仓库3.两个镜像怎么合并4.Docker有哪些常用指令一、Docker 容器使用Docker 容器是一个轻量级、可移植、自给自足的软件环境用于运行应用程序。Docker 容器将应用程序及其所有依赖项包括库、配置文件、系统工具等封装在一个标准化的包中使得应用能够在任何地方一致地运行。容器是操作系统级别的虚拟化不需要运行完整的操作系统启动和运行更为高效。1.1 镜像与容器的关系镜像Image容器的静态模板包含了应用程序运行所需的所有依赖和文件。镜像是不可变的。容器Container镜像的一个运行实例具有自己的文件系统、进程、网络等且是动态的。容器从镜像启动并在运行时保持可变。1.2 Docker客户端Docker 客户端是与 Docker 守护进程Docker Daemon交互的命令行工具。docker 客户端非常简单我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。runoobrunoob:~# docker可以通过命令docker command --help更深入的了解指定的 Docker 命令使用方法。例如我们要查看docker stats指令的具体使用方法# docker stats --help1.2.1 Docker 客户端命令以下是常用的 Docker 客户端命令命令功能示例docker run启动一个新的容器并运行命令docker run -d ubuntudocker ps列出当前正在运行的容器docker psdocker ps -a列出所有容器包括已停止的容器docker ps -adocker build使用 Dockerfile 构建镜像docker build -t my-image .docker images列出本地存储的所有镜像docker imagesdocker pull从 Docker 仓库拉取镜像docker pull ubuntudocker push将镜像推送到 Docker 仓库docker push my-imagedocker exec在运行的容器中执行命令docker exec -it container_name bashdocker stop停止一个或多个容器docker stop container_namedocker start启动已停止的容器docker start container_namedocker restart重启一个容器docker restart container_namedocker rm删除一个或多个容器docker rm container_namedocker rmi删除一个或多个镜像docker rmi my-imagedocker logs查看容器的日志docker logs container_namedocker inspect获取容器或镜像的详细信息docker inspect container_namedocker exec -it进入容器的交互式终端docker exec -it container_name /bin/bashdocker network ls列出所有 Docker 网络docker network lsdocker volume ls列出所有 Docker 卷docker volume lsdocker-compose up启动多容器应用从docker-compose.yml文件docker-compose updocker-compose down停止并删除由docker-compose启动的容器、网络等docker-compose downdocker info显示 Docker 系统的详细信息docker infodocker version显示 Docker 客户端和守护进程的版本信息docker versiondocker stats显示容器的实时资源使用情况docker statsdocker login登录 Docker 仓库docker logindocker logout登出 Docker 仓库docker logout常用选项说明:-d后台运行容器例如docker run -d ubuntu。-it以交互式终端运行容器例如docker exec -it container_name bash。-t为镜像指定标签例如docker build -t my-image .。1.2.2 容器使用指令获取镜像如果我们本地没有 ubuntu 镜像我们可以使用 docker pull 命令来载入 ubuntu 镜像$ docker pull [容器名]参数说明-i: 交互式操作。-t: 终端。ubuntu: ubuntu 镜像。/bin/bash放在镜像名后的是命令这里我们希望有个交互式 Shell因此用的是 /bin/bash。要退出终端直接输入exit:查看运行中的容器$ docker ps查看全部容器包含已经停止运行的容器。$ docker ps -a停止一个容器停止容器的命令如下$ docker stop 容器 ID停止的容器可以通过 docker restart 重启$ docker restart 容器 ID启动一个已经停止的容器查看所有的容器命令如下$ docker ps -a点击图片查看大图使用 docker start 启动一个已停止的容器docker start [容器ID]$ docker start b750bbbcfd88停止的容器可以通过 docker restart 重启$ docker restart 容器 ID后台运行在大部分的场景下我们希望 docker 的服务是在后台运行的我们可以过 -d 指定容器的运行模式。$ docker run -itd --name ubuntu-test ubuntu /bin/bash点击图片查看大图注加了 -d 参数默认不会进入容器想要进入容器需要使用指令docker exec下面会介绍到。进入容器在使用-d参数时启动容器时容器会运行在后台这时如果要进入容器可以通过以下命令进入docker attach允许你与容器的标准输入stdin、输出stdout和标准错误stderr进行交互。docker exec推荐大家使用 docker exec 命令因为此命令会退出容器终端但不会导致容器的停止。attach 命令使用 docker attach 命令实例$ docker attach 1e560fca3906注意如果从这个容器退出会导致容器的停止。exec 命令使用 docker exec 命令实例$ docker exec -it 243c32535da7 /bin/bash注意如果从这个容器退出容器不会停止这就是为什么推荐大家使用docker exec。更多参数说明请使用 docker exec --help 命令查看。导出容器如果要导出本地某个容器可以使用docker export命令。$ docker export 1e560fca3906 ubuntu.tar导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。这样将导出容器快照到本地文件。导入容器快照可以使用 docker import 从容器快照文件中再导入为镜像以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1此外也可以通过指定 URL 或者某个目录来导入例如$ docker import http://example.com/exampleimage.tgz example/imagerepo删除容器删除容器使用docker rm命令$ docker rm -f 1e560fca3906清理掉所有处于终止状态的容器下面的命令可以清理掉所有处于终止状态的容器。$ docker container prune列出镜像列表使用docker images来列出本地主机上的镜像。runoobrunoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB php 5.6 f40e9e0f10c8 9 days ago 444.8 MB nginx latest 6f8d099c3adc 12 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B training/webapp latest 6fae60ef3446 11 months ago 348.8 MB各个选项说明:REPOSITORY表示镜像的仓库源TAG镜像的标签IMAGE ID镜像IDCREATED镜像创建时间SIZE镜像大小同一仓库源可以有多个 TAG代表这个仓库源的不同个版本如 ubuntu 仓库源里有 15.10、14.04 等多个不同的版本我们使用REPOSITORY:TAG 来定义不同的镜像。所以我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时命令如下runoobrunoob:~$ docker run -t -i ubuntu:15.10 /bin/bash rootd77ccb2e5cca:/# 或者 docker run -it ubuntu:15.10 bash参数说明-i: 交互式操作。-t: 终端。ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。/bin/bash放在镜像名后的是命令这里我们希望有个交互式 Shell因此用的是 /bin/bash。查找镜像我们可以从 Docker Hub 网站来搜索镜像Docker Hub 网址为https://hub.docker.com/我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。runoobrunoob:~$ docker search httpdNAME:镜像仓库源的名称DESCRIPTION:镜像的描述OFFICIAL:是否 docker 官方发布stars:类似 Github 里面的 star表示点赞、喜欢的意思。AUTOMATED:自动构建。删除镜像镜像删除使用docker rmi命令比如我们删除 hello-world 镜像$ docker rmi [镜像名]$ docker rmi hello-world构建镜像我们使用命令docker build 从零开始来创建一个新的镜像。为此我们需要创建一个 Dockerfile 文件其中包含一组指令来告诉 Docker 如何构建我们的镜像。runoobrunoob:~$ cat Dockerfile FROM centos:6.7 MAINTAINER Fisher fishersudops.com RUN /bin/echo root:123456 |chpasswd RUN useradd runoob RUN /bin/echo runoob:123456 |chpasswd RUN /bin/echo -e LANG\en_US.UTF-8\ /etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D每一个指令都会在镜像上创建一个新的层每一个指令的前缀都必须是大写的。第一条FROM指定使用哪个镜像源RUN 指令告诉docker 在镜像内执行命令安装了什么。。。然后我们使用 Dockerfile 文件通过 docker build 命令来构建一个镜像。runoobrunoob:~$ docker build -t runoob/centos:6.7 . Sending build context to Docker daemon 17.92 kB Step 1 : FROM centos:6.7 ---gt; d95b5ca17cc3 Step 2 : MAINTAINER Fisher fishersudops.com ---gt; Using cache ---gt; 0c92299c6f03 Step 3 : RUN /bin/echo root:123456 |chpasswd ---gt; Using cache ---gt; 0397ce2fbd0a Step 4 : RUN useradd runoob ......参数说明-t 指定要创建的目标镜像名. Dockerfile 文件所在目录可以指定Dockerfile 的绝对路径使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fecrunoobrunoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE runoob/centos 6.7 860c279d2fec About a minute ago 190.6 MB runoob/ubuntu v2 70bf1840fd7c 17 hours ago 158.5 MB ubuntu 14.04 90d5884b1ee0 6 days ago 188 MB php 5.6 f40e9e0f10c8 10 days ago 444.8 MB nginx latest 6f8d099c3adc 12 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 5 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B centos 6.7 d95b5ca17cc3 6 months ago 190.6 MB training/webapp latest 6fae60ef3446 12 months ago 348.8 MB设置镜像标签我们可以使用 docker tag 命令为镜像添加一个新的标签。runoobrunoob:~$ docker tag 860c279d2fec runoob/centos:devdocker tag 镜像ID这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。使用 docker images 命令可以看到ID为860c279d2fec的镜像多一个标签。runoobrunoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE runoob/centos 6.7 860c279d2fec 5 hours ago 190.6 MB runoob/centos dev 860c279d2fec 5 hours ago 190.6 MB runoob/ubuntu v2 70bf1840fd7c 22 hours ago 158.5 MB ubuntu 14.04 90d5884b1ee0 6 days ago 188 MB php 5.6 f40e9e0f10c8 10 days ago 444.8 MB nginx latest 6f8d099c3adc 13 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 5 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B centos 6.7 d95b5ca17cc3 6 months ago 190.6 MB training/webapp latest 6fae60ef3446 12 months ago 348.8 MB参考文献https://www.runoob.com/docker/docker-container-usage.html