查看原文
其他

Docker基础知识

JackTian 杰哥的IT之旅 2019-05-08


Docker

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。


Docker利用Linux核心中的资源分脱机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施。


Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。

Docker安装

  1. ## 下载docker源

  2. curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo

  3. ## 安装docker服务

  4. yum install -y docker-ce

  5. ## 启动docker服务

  6. systemctl start docker

Docker镜像管理

  1. ## 下载docker镜像

  2. docker pull centos   // 从官方下载centos镜像,速度很慢


安装/升级你的Docker客户端
  • 推荐安装 1.10.0以上版本的Docker客户端,参考文档 docker-ce

如何配置镜像加速器
  •  针对Docker客户端版本大于1.10.0的用户

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

  1. sudo mkdir -p /etc/docker

  2. sudo tee /etc/docker/daemon.json <<- 'EOF'

  3. {

  4.    "registry-mirrors":["https://sqvb9629.mirror.aliyuncs.com"]

  5. }

  6. EOF

  7. sudo systemctl daemon-reload   // 重启daomon

  8. sudo systemctl restart docker  // 配置后,重启docker服务


每次重启docker服务时,都会停止当前所有正在运行中的容器

创建镜像

通过容器创建镜像

  1. ## 1. 准备一个现有镜像

  2. docker tag centos centos:liubao

  3. ## 2. 启动容器

  4. docker run -itd centos:liubao

  5. ## 3. 进入容器

  6. docker exec -it [容器ID] bash // 针对这个容器进行创建新的镜像

  7. yum install net-tools -y

  8. ## 4. 通过容器创建镜像

  9. docker commit -m "[改动信息]" -a "[指定做着相关信息]" [容器id] [新镜像名称]

  10. docker commit -m "install net-tools" -a "liubaolong" 1640295ec284 centos_with_nettools

通过容器创建镜像时,必须在针对 运行中的容器安装相应信息才能使 commit命令所创建的容器生效相应服务

通过模板创建镜像

  1. ## 1. 下载一个模板镜像

  2. wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz

  3. ## 2. 导入该模板镜像【命名为centos6】

  4. cat centos-6-x86-minimal.tar.gz |docker import - centos6

  5. ## 3. 把现有镜像,导出为一个文件

  6. docker save -o centos_with_nettool.tar centos_with_nettool

  7. ## 4. 用导出的文件恢复本地镜像

  8. [root@localhost ~]$ ll centos_with_nettool.tar

  9. -rw-------. 1 root root 307501568 Mar 19 00:42 centos_with_nettool.tar

  10. docker load < centos_with_nettool.tar // 恢复本地镜像

容器管理

  1. docker create -it [image_name] bash ## 创建容器,但该容器并没有启动

  2. docker start [容器id]     ## 启动容器,可通过 docker ps 命令查看运行状态;

  3. docker stop [容器id]      ## 停止容器

  4. docker restart [容器id]   ## 重启容器

  5. docker run -itd [image_name] bash   ## 创建并启动容器

  6. // -i 参数: 让容器标准输入打开

  7. // -t 参数: 分配一个伪终端

  8. // -d 参数: 后台启动

  9. docker run --name [容器名字] -itd [image_name]   ## 给容器自定义名称

  10. docker run --rm -it centos bash -c "sleep 30"   ## 通过--rm可让容器退出后直接删除

  11. docker logs [容器id]            ##  获取容器的运行历史信息

  12. docker attach [容器id]            ##  进入一个后台运行的容器【该命令不好用】

  13. docker exec -it [容器id] bash    ##  临时打开一个虚拟终端,并exit退出后容器依然运行

  14. docker rm [容器id]        ## 删除一个容器,-f参数表示为强制删除运行中的容器

  15. docker export [容器id] > file.tar    ##  导出容器,可以迁移到其它机器上面;

  16. cat file.tar | docker import - [new_image_name]      ## 导入容器,

  17. #### import 和 load 命令区别

  18. import命令:加载容器导出的归档文件,导入容器归档文件时并不会维护文件系统历史;

  19. load命令: 加载镜像归档文件,导入image归档文件是会维护历史记录;

  20. #### export 和 save 命令区别

  21. export命令: 导出容器的命令,导出的归档文件不包含文件系统的历史记录,只有最近一次的读写层数据;【docker不建议移植容器,但预留了export命令来导出容器】

  22. save命令: export命令只能一次导出一个容器的文件系统,而save命令可以同时导出多个镜像文件系统;且多个镜像互无关系,同一个镜像的不同tag

docker仓库管理

  1. docker pull registry    ##  下载registry镜像,该镜像为docker官方提供的可用阿里创建私有仓库

  2. docker run -d -p 5000:5000 registry ## 创建启动registry容器【私有仓库】

  3. ## -p 参数: 将容器的端口映射到宿主机上 [宿主机监听端口]:[容器监听端口]

  4. curl 127.0.0.1:5000/v2/_catalog        ##   访问私有仓库

  5. docker tag [image_name] [宿主机IP地址:端口]/[tag_name] ## 打标签【上传镜像到仓库前】

  6. $ cat /etc/docker/daemon.json

  7. {"insecure-registries":["宿主机ip:5000"]}  ## 更改配置文件,并重启docker

  8. systemctl restart docker

  9. ## 上传镜像到仓库

  10. docker push [宿主机IP]:5000/[标签名称]

  11. ## 下载私有仓库中的镜像

  12. docker pull 10.0.55.134:5000/ubuntu-1

docker小结

docker 常用命令

命令方法[示例]说明
docker imagesdocker images查看当前所有镜像
docker searchdocker search [关键字]搜索镜像,其中[]内为搜索对象
docker pulldocker pull image_name下载一个镜像
docker pushdocker push image_name上传一个镜像
docker tagdocker tag centos centos:liubao给镜像centos 打标签为一个新的镜像
docker rundocker run -itd --name lbl centos创建并允许一个单独的容器
docker psdocker ps / docker ps -a查看当前容器运行状态
docker rmidocker rmi [image_name]删除一个镜像
docker execdocker exec -it [容器id] bash进入运行中的容器
docker rm -fdocker rm -f [容器id]强制删除运行中的容器
docker savedocker save -o save-centos.tar centos把现有镜像导出为文件
docker loaddocker load < save-centos.tar用该文件恢复本地镜像
docker createdocker create -it [image_name] bash创建一个容器,但该容器并没有启动
docker startdocker start [容器id]启动容器,其它相关命令有:start、stop、restart
END


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存