科学计算, 生活

开源的应用容器引擎Docker

一、基本概念

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口 [1]。

虚拟机技术(左)和容器技术(右)的关系如下图所示 [2]:

需要了解三个重要的概念:容器、镜像、仓库 [3]。

“从仓库(一般为DockerHub)下载(pull)一个镜像,Docker执行run方法得到一个容器,用户在容器里执行各种操作。Docker 执行 commit 方法将一个容器转化为镜像。Docker 利用 login、push 等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序了 [4]。”

二、Docker的安装

Docker官网:https://www.docker.com/。通过官网提示在 Linux、Windows 或苹果系统中安装 Docker。Docker 可以有桌面窗口(Desktop版本),也可以无桌面窗口(引擎版本)。在 Linux 系统下使用无桌面窗口的版本,然后通过命令行操作,这种方式可以对 Docker 有比较清晰的了解。

此外,在 Linux 系统中直接输入以下命令可以快捷完成 Docker 的安装(无桌面窗口)。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Docker 引擎的官方文档:https://docs.docker.com/engine/

Docker Hub 官网:https://hub.docker.com/

三、Docker的常用命令

  • 查看本地所有镜像:docker images
  • 查看所有容器:docker ps -a
  • 查看容器的占用空间大小:docker ps -s
  • 获取 Ubuntu 镜像:docker pull ubuntu
  • 使用 ubuntu 镜像创建一个容器:docker run -it ubuntu /bin/bash
  • 创建一个容器或者用这个命令,额外指定容器名字和端口:docker run -it --name ubuntu -p 8080:20 ubuntu /bin/bash
  • 启动某个容器:docker start 容器ID
  • 进入某个容器(推荐,通过这种方式进入容器,exit 退出不会导致容器的停止):docker exec -it 容器ID /bin/bash
  • 进入某个容器(exit退出会导致容器的停止):docker attach 容器ID
  • 退出某个容器:exit
  • 重启某个容器:docker restart 容器ID
  • 停止某个容器:docker stop 容器ID
  • 删除某个容器:docker rm -f 容器ID
  • 删除某个镜像:docker rmi 镜像名
  • 复制容器中的文件:docker cp 容器ID:/a.py /a.py 以及 sudo docker cp /a.py 容器ID:/a.py

四、容器的导出导入

export 和 import 的方式:

  • 将容器导出为压缩包:docker export 容器ID > new_ubuntu.tar
  • 将文件导入为镜像:docker import new_ubunbu.tar new_ubuntu_镜像名
  • 查看镜像:docker images

save 和 load 的方式(推荐):

  • 将容器保存为镜像:docker commit 容器ID 镜像名
  • 将镜像保存为文件:docker save -o 文件名.tar 镜像名
  • 将文件加载为镜像:docker load -i 文件名.tar
  • 查看镜像:docker images

说明:使用 docker export 和 docker import 适用于容器文件系统的迁移,但不适合完整的镜像迁移,尤其是当你需要迁移镜像的历史层时。如果你想要导出并保存一个完整的镜像(包括所有历史层和元数据),应使用 docker save 和 docker load 命令。参考:https://zhuanlan.zhihu.com/p/152219012

五、其他设置

1. 设置Docker重启后自动运行:docker update --restart=always 容器ID

2. 调整容器的内存限制(调整为1g):docker update -m 1g 容器ID

参考资料:

[1] Docker_百度百科

[2] 什么是Docker?看这一篇干货文章就够了!

[3] Docker 入门教程

[4] 只要一小时,零基础入门Docker

[5] https://www.runoob.com/docker/

348 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code