Docker技术入门与实战【1.4】

张开发
2026/6/9 12:01:57 15 分钟阅读
Docker技术入门与实战【1.4】
4.4 删除容器可以使用docker rm命令删除处于终止状态的容器命令格式为docker rm[OPTIONS]CONTAINER[CONTAINERhttp://www.hzcourse.com/resource/readBook? path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...]。支持的选项包括·-f,--forcefalse强行终止并删除一个运行中的容器。·-l,--linkfalse删除容器的连接但保留容器。·-v,--volumesfalse删除容器挂载的数据卷。例如查看处于终止状态的容器并删除如下所示$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ce554267d7a4 ubuntu:latest /bin/sh -c while t 3 minutes ago Exited (-1) 13 seconds ago determined_pike d58050081fe3 ubuntu:latest /bin/bash About an hour ago Exited (0) About an hour ago berserk_brattain e812617b41f6 ubuntu:latest echo hello! I am h 2 hours ago Exited (0) 3 minutes ago $ sudo docker rm ce554267d7a4 $ ce554267d7a4如果要删除一个运行中的容器可以添加-f参数。Docker会发送SIGKILL信号给容器终止其中的应用$ sudo docker run -d ubuntu /bin/sh -c while true; do echo hello world; sleep 1; done 2aed76caf8292c7da6d24c3c7f3a81a135af942ed1707a79f85955217d4dd594$ sudo docker rm 2aeError response from daemon: You cannot remove a running container. Stop the container before attempting removal or use -f 2014/11/03 04:05:24 Error: failed to remove one or more containers$ sudo docker rm -f 2ae2ae4.5 导入和导出容器导出容器导出容器是指导出一个已经创建的容器到一个文件不管此时这个容器是否处于运行状态可以使用docker export命令该命令格式为docker export CONTAINER。查看所有的容器如下所示$ sudo docker ps -aCONTAINER ID ce554267d7a4 d58050081fe3 e812617b41f6IMAGECOMMANDubuntu:latest ubuntu:latest ubuntu:latestCREATED STATUS PORTS NAMES/bin/sh -c while t 3 minutes ago Exited (-1) 13 seconds ago determined_pike/bin/bash About an hour ago Exited (0) About an hour ago berserk_brattainecho hello! I am h 2 hours ago Exited (0) 3 minutes ago silly_leakey分别导出ce554267d7a4容器和e812617b41f6容器到test_for_run.tar文件和test_for_stop.tar文件$ sudo docker export ce5 test_for_run.tar $ lstest_for_run.tar$ sudo docker export e81 test_for_stop.tar $ lstest_for_run.tar test_for_stop.tar可将这些文件传输到其他机器上在其他机器上通过导入命令实现容器的迁移。导入容器导出的文件又可以使用docker import命令导入成为镜像例如$ cat test_for_run.tar | sudo docker import - test/ubuntu:v1.0$ sudo docker imagesREPOSITORY test/ubuntuTAG v1.0IMAGE ID 9d37a6082e97CREATED About a minute agoVIRTUAL SIZE171.3 MB读者可能会记得笔者在之前章节曾介绍过使用docker load命令来导入一个镜像文件。实际上既可以使用docker load命令来导入镜像存储文件到本地的镜像库又可以使用docker import命令来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息即仅保存容器当时的快照状态而镜像存储文件将保存完整记录体积也要大。此外从容器快照文件导入时可以重新指定标签等元数据信息。4.6 本章小结容器是直接提供应用服务的组件也是Docker实现快速的启停和高效服务性能的基础。通过本章内容的介绍和示例相信已经掌握了对容器整个生命周期进行管理的各项操作命令。在生产环境中因为容器自身的轻量级特性笔者推荐使用容器时在容器前段引入HA高可靠性机制例如使用HAProxy工具来代理容器访问这样在容器出现故障时候可以快速切换到其他容器还可以自动重启故障容器。第5章 仓库仓库Repository是集中存放镜像的地方。一个容易与之混淆的概念是注册服务器Registry。实际上注册服务器是存放仓库的具体服务器每个服务器上可以有多个仓库而每个仓库下面有多个镜像。从这方面来说仓库可以被认为是一个具体的项目或目录。例如对于仓库地址dl.dockerpool.com/ubuntu来说dl.dockerpool.com是注册服务器地址ubuntu是仓库名。仓库又分公共仓库和私有仓库在本章笔者将分别展示如何使用DockerHub官方仓库进行登录、下载等基本操作以及使用DockerPool社区提供的仓库下载镜像最后还将介绍创建和使用私有仓库的基本操作。5.1 Docker Hub目前Docker官方维护了一个公共仓库https://hub.docker.com其中已经包括15000多个的镜像。大部分需求都可以通过在Docker Hub中直接下载镜像来实现如图5-1所示。登录可以通过执行docker login命令来输入用户名、密码和邮箱来完成注册和登录。注册成功后本地用户目录的.dockercfg中将保存用户的认证信息。基本操作用户无需登录即可通过docker search命令来查找官方仓库中的镜像并利用docker pull命令来将它下载到本地。在搜寻镜像的章节已经具体介绍了如何使用docker pull命令。例如以centos为关键词进行搜索$ sudo docker search centosNAME DESCRIPTION STARS OFFICIAL AUTOMATEDcentos The official build of CentOS. 465 [OK]tianon/centos CentOS 5 and 6, created using rinse insteahttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 28blalor/centos Bare-bones base CentOS 6.5 image 6 [OK]saltstack/centos-6-minimal 6 [OK]tutum/centos-6.4 DEPRECATED. Use tutum/centos:6.4 insteadhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/..http://www.hzcourse.cohttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...根据是否为官方提供可将这些镜像资源分为两类。一种是类似centos这样的基础镜像称为基础或根镜像。这些镜像是由Docker公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。还有一种类型比如tianon/centos镜像它是由DockerHub的用户tianon创建并维护的带有用户名称为前缀表明是某用户的某仓库。可以通过用户名称前缀user_name/来指定使用某个用户提供的镜像比如tianon用户的镜像前缀为tianon/。另外在查找的时候通过-s N参数可以指定仅显示评价为N星以上的镜像。下载官方centos镜像到本地如下所示$ sudo docker pull centosPulling repository centos0b443ba03958: Download complete539c0211cd76: Download complete511136ea3c5a: Download complete7064731afe90: Download complete用户也可以在登录后通过docker push命令来将本地镜像推送到Docker Hub。自动创建自动创建Automated Builds功能对于需要经常升级镜像内程序来说十分方便。有时候用户创建了镜像安装了某个软件如果软件发布新版本则需要手动更新镜像。而自动创建功能使得用户通过Docker Hub指定跟踪一个目标网站目前支持GitHub或BitBucket上的项目一旦项目发现新的提交则自动执行创建。要配置自动创建包括如下的步骤1创建并登录Docker Hub以及目标网站*在目标网站中连接帐户到Docker Hub。2在Docker Hub中配置一个自动创建。3选取一个目标网站中的项目需要含Dockerfile和分支。4指定Dockerfile的位置并提交创建。之后可以在Docker Hub的“自动创建”页面中跟踪每次创建的状态。5.2 Docker Pool简介Docker Poolhttp://dockerpool.com是国内专业的Docker技术社区目前也提供了官方镜像的下载管理服务如图5-2所示。查看镜像访问http://www.dockerpool.com/downloads即可看到已有的仓库和存储的镜像包括CentOS、Ubuntu、Java、Mongo、MySQL、Nginx等热门仓库和镜像。以CentOS仓库为例其中包括Centos 5、CentOS 6和CentOS 7等镜像。下载镜像下载镜像也是使用docker pull命令但是要在镜像名称前添加注册服务器的具体地址dl.dockerpool.com5000。例如要下载ubuntu仓库的12.04镜像可以使用$ sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04通过docker images命令来查看下载到本地的镜像$ sudo docker imagesdl.dockerpool.com:5000/ubuntu 12.04 ae7818fad1bc 1 min ago 116.2 MB下载后可以更新镜像的标签与官方标签保持一致$ sudo docker tag dl.dockerpool.com:5000/ubuntu:12.04 ubuntu:12.04需要注意的是从Docker Pool下载的镜像文件与官方镜像文件是完全一致的。另外阿里云等服务商也已经提供了Docker镜像的下载服务。当然最便捷的方式还是搭建本地的仓库服务器将在后续章节予以介绍。5.3 创建和使用私有仓库使用registry镜像创建私有仓库安装Docker后可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境$ sudo docker run -d -p 5000:5000 registry这将自动下载并启动一个registry容器创建本地的私有仓库服务。默认情况下会将仓库创建在容器的/tmp/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径上。例如下面的例子将上传的镜像放到/opt/data/registry目录$ sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry此时在本地将启动一个私有仓库服务监听端口为5000。管理私有仓库镜像首先在本书环境的笔记本上Linux Mint搭建私有仓库查看其地址为10.0.2.25000。然后在虚拟机系统Ubuntu 14.04里测试上传和下载镜像。在Ubuntu 14.04系统查看已有的镜像$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ba5877dc9bec 6 days ago 199.3 MB使用docker tag命令将这个镜像标记为10.0.2.25000/test格式为docker tag IMAGE[TAG][REGISTRYHOST/][USERNAME/]NAME[TAG][REGISTRYHOST/][USERNAME/]NAME[:TAG] $ sudo docker tag ubuntu:14.04 10.0.2.2:5000/test$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 ba5877dc9bec 6 days ago 199.3 MB10.0.2.2:5000/test latest ba5877dc9bec 6 days ago 199.3 MB使用docker push上传标记的镜像$ sudo docker push 10.0.2.2:5000/testThe push refers to a repository [10.0.2.2:5000/test] (len: 1)Sending image listPushing repository 10.0.2.2:5000/test (1 tags)Image 511136ea3c5a already pushed, skippingImage 9bad880da3d2 already pushed, skippingImage 25f11f5fb0cb already pushed, skippingImage ebc34468f71d already pushed, skippingImage 2318d26665ef already pushed, skippingImage ba5877dc9bec already pushed, skippingPushing tag for rev [ba5877dc9bec] on {http://10.0.2.2:5000/v1/repositories/test/tags/latest}用curl查看仓库10.0.2.25000中的镜像$ curl http://10.0.2.2:5000/v1/search{num_results: 1, query: , results: [{description: , name: library/test}]}在结果中可以看到{description:, name:library/test}表明镜像已经成功上传了。现在可以到任意一台能访问到10.0.2.2地址的机器去下载这个镜像了$ sudo docker pull 10.0.2.2:5000/testPulling repository 10.0.2.2:5000/testba5877dc9bec: Download complete511136ea3c5a: Download complete9bad880da3d2: Download complete25f11f5fb0cb: Download completeebc34468f71d: Download complete2318d26665ef: Download complete$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE10.0.2.2:5000/test latest ba5877dc9bec 6 days ago 199.3 MB下载后还可以添加一个更通用的标签ubuntu14.04$ sudo docker tag 10.0.2.2:5000/test ubuntu:14.045.4 本章小结仓库概念的引入为Docker镜像文件的分发和管理提供了便捷的途径。本章介绍的DockerHub和DockerPool两个公共仓库服务可以方便个人用户进行镜像的下载和使用等操作。在企业的生产环境中则往往需要使用私有仓库来维护内部镜像。在本书第二部分的实战案例中将介绍私有仓库的更多配置选项。

更多文章