1.1 虚拟机
虚拟可以解决环境配置方面的一些麻烦,但是虚拟机也有很多的缺点:
- 资源占用多:虚拟机会单独占用一部分内存和硬盘空间,其他程序不能够使用这些资源,即使虚拟机里的应用程序使用的内存只有1MB,虚拟机依然需要几百MB内存才能运行
- 冗余步骤多
- 启动慢
1.2 Linux容器:
由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势。
- 启动快
- 资源占用少
- 体积小:容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。
总之,有点像,能够提供,但是。
1.3 Docker 是什么?
属于 的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将与,。运行这个文件,就会生成一个。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。还可以进行、、、,就像管理普通的代码一样。
1.4 Docker 的用途
Docker 的主要用途,目前有三大类。
(1)。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
2.1 docker在不同系统中的安装
- Mac
- Windows
- Ubuntu
- Debian
- CentOS
- Fedora
- 其他 Linux 发行版
2.2 验证docker是否安装成功的命令
或
2.3 把docker添加到用户组中
需要用户具有,为了避免每次使用docker命令都输入sudo,可以把用户加入 Docker 用户组(官方文档)
2.4 启动docker
Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动(官方文档)。
- service 命令的用法
- systemctl 命令的用法
1、Docker的镜像文件
把及其,里面。只有,才能。。Docker 根据 生成。同一个 image 文件,可以生成多个同时运行的容器实例。
。实际开发中,一个 image 文件往往通过,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
创建的叫,因此,可以生成,容器可以删除,并不会把镜像删除!
2、列出本机的所有镜像文件
或
3、删除 image 文件
是,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量,而不是自己制作。即使要定制,也应该,而不是从零开始制作。
为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。
4.1 查看和删除本地已经有的镜像
1、查看本机当前有哪些镜像:
由于,我们要演示镜像,我们先删除它
2、删除镜像
如下,我们删除hello-world镜像
4.2 删除镜像的时候报错:Error response from daemon: conflict: unable to remove repository reference
删除的时候报错了,我们看到说镜像,依赖容器,因此,如果要删除镜像需要先删除这个依赖的容器
1、删除镜像依赖的容器
依赖的容器可能不只一个,如果有多个,用同样的方法删除!
2、之后再删除指定名子的image镜像,即可:
也可以指定镜像的版本号:
3、具体删除过程如下
4、再次查看,此时hello-world镜像已经被删除
参考:
4.3 列出所有的容器
1、 列出所有运行或没有运行的容器 docker ps -a
2、停止所有的容器
,停止所有的容器:
3、删除所有的容器
如果想要删除所有container的话再加一个指令 ,狠心把容器都删除掉了,因为光停止还是不能删除镜像。
4、删除对应的image 镜像
相关容器关闭后,删除对应的images,通过image的id来指定删除谁
或 `docker image rm [imageName]
要删除全部image的话
4.4 把docker的镜像源换成国内镜像源
由于,下面用到的会到官网下载,但是速度比较慢,因此我们可以通过把,提高镜像下载的速度!
我在Ubuntu18.04配置docker国内镜像源如下(参考):
1、创建一个文件,我的该目录下没有文件:
sudo vim /etc/docker/daemon.json
2、添加如下内容:
3、重启docker服务
4、使用下面的命令查看是否生效
5、输出如下信息,则表示配置成功,再次docker pull速度就会很快了!
4.5 实例:hello-world镜像
下面,我们通过最简单的 image 文件"hello world",感受一下 Docker。
1、将的 image 文件。
上面代码中,是抓取 image 文件的命令。是在,其中是 ,是 。
由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,。因此,上面的命令可以写成下面这样。
2、先查看一下当前有没有运行的container容器:
或
列出当前运行的容器:
3、从hello-world镜像生成一个容器,并运行它
运行hello-world镜像文件,其实就是从这个image生成一个container容器实例:
命令会从,生成一个。
注意,命令具有的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤。
如果运行成功,输出如下信息:
输出这段提示以后,就会,。因此我们查看的哪些正在运行的容器时,hello-world生成的容器已经终止!
4、如果想要列出所有的容器,包括已经终止的容器:
有些容器不会自动终止,因为提供的是服务。比如,安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统。
对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止。
生成的,,称为。也就是说,一旦容器生成,就会同时存在两个文件:和。而且,。
1、列出本机正在运行的容器
或
2、列出本机所有容器,包括终止运行的容器
上面命令的输出结果之中,包括容器的 ID。很多地方都需要提供这个 ID,比如上一节终止容器运行的docker container kill命令。
3、删除容器文件
终止运行的容器文件,依然会占据硬盘空间,可以使用docker container rm命令删除。
学会以后,接下来的问题就是,如果你要推广自己的软件,势必要自己制作 image 文件。
这就需要用到 。它是一个,用来。Docker 根据 该文件。
下面通过一个实例,演示如何编写 Dockerfile 文件。
7.1 准备工作
7.1.1 克隆代码
下面我以 koa-demos 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。
作为准备工作,请先下载源码。
7.1.2 安装npm工具
由于下面编写的中会用到,因此我们需要先安装一下:
在build建立之前,需要先安装npm:
1、在Ubuntu18.04上安装npm参考:https://blog.csdn.net/wangtaoking1/article/details/
先修正上面的错误:
2、安装好npm之后,做好准备工作:
7.2 编写Dockerfile文件
1、首先,在项目的根目录下,新建一个文本文件,写入下面的内容。
上面代码表示,这三个路径要排除,。如果你没有路径要排除,这个文件可以不新建。
2、然后,在项目的根目录下,新建一个文本文件,写入下面的内容。
上面代码一共五行,含义如下。
- :该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
- :将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
- :指定接下来的工作路径为/app。
- :在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
- :将容器 3000 端口暴露出来, 允许外部连接这个端口。
7.3 创建 image 文件
有了 Dockerfile 文件以后,就可以使用命令了。
上面代码中,参数用来指定的,后面还可以用冒号指定标签。如果不指定,就是。最后的表示 ,上例是当前路径,所以是一个点。
如果运行成功,就可以看到新生成的 image 文件koa-demo了。
可以看出,,就是执行我们编写的文件中内容的步骤!
docker image ls
7.4 生成容器
1、命令会从 生成容器。
上面命令的各个参数含义如下:
- :的 映射到的 。
- :映射到,然后你在本机窗口输入的命令,就会传入容器。
- :image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
- :。这里是启动 Bash,保证用户可以使用 Shell。
如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。
运行结果如下:
这表示你了,返回的提示符就是,是容器的。
2、此时启动的容器,就相当于是一个微核的linux:
3、此时你再打开一个终端,就可以查看到正在运行的容器:
4、执行下面的命令。
这时,Koa 框架已经运行起来了。打开本机的浏览器,访问 http://127.0.0.1:8000,网页显示"Not Found",这是因为这个 demo 没有写路由。
你也可以运行其他的js文件,如下是运行:,在浏览器中打开的结果:
这个例子中,运行在,进程接触到的和都是,与本机的文件系统和网络接口是隔离的,因此需要定义与的。因为已经将容器的端口3000映射到本机的8000端口,因此只要容器运行,就可以通过本机的8000端口访问到容器的3000端口,从而访问容器的服务!
现在,在容器的命令行,按下 停止 Node 进程,然后按下(或者输入)。此外,也可以用终止容器运行。
在本机的另一个终端窗口,查出容器的 ID
停止指定的容器运行
容器停止运行之后,并不会消失,用下面的命令删除容器文件。
删除指定的容器文件
$ docker container rm [containerID]
也可以使用docker container run命令的–rm参数,在容器终止运行后自动删除容器文件。
$ docker container run --rm -p 8000:3000 -it koa-demo /bin/bash
7.5 CMD 命令
上一节的例子里面,容器启动以后,需要。我们可以把这个命令写在 里面,这样容器启动以后,这个命令就已经执行了,不用再手动输入了。
上面的 Dockerfile 里面,多了最后一行,它表示容器启动后自动执行node demos/01.js。
你可能会问,RUN命令与CMD命令的区别在哪里?简单说,在,执行结果都会打包进入 image 文件;则是。另外,可以包含,但是。
指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。现在,启动容器可以使用下面的命令。
7.6 发布 image 文件
容器运行成功后,就确认了 image 文件的有效性。这时,我们就可以考虑把 image 文件分享到网上,让其他人使用。
1、首先,去或 注册一个账户。然后,用下面的命令。
2、接着,为本地的 image 标注用户名和版本。
也可以不标注用户名,重新构建一下 image 文件。
3 、最后,发布 image 文件。
发布成功以后,登录 ,就可以看到。
1、
命令是,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望,就要使用命令,它用来启动已经生成、已经停止运行的容器文件。
3、
命令用于的 。
在本机上重开启一个终端,进入一个正在运行容器的bash,这种就是使用的时候没有使用参数的时候,进入正在运行容器的bash!
4、
命令用于从正在运行的 里面,将。
先查看容器中有哪些文件:
把容器中的文件或目录拷贝到本机系统中:
5、把本地拷贝到容器中(参考)
先查目录文件大小:
拷贝命令:
成功拷贝可以发现磁盘空间也变小了,此时的容器
可以在容器中查看到文件已经被从本地拷贝到容器中:
6、把本地的目录或文件映射到docker容器中(参考):
使用:参数进行映射,可以看到本地目录映射到容器目录之后,此时之前容器在该目录下的文件看不到了!
- 将本机的文件拷贝到Docker容器中
,是因为使用了,这个参数的意思,就是当运行一个容器的时候,如果容器已经存在,就删除创建一个新的容器!
9.1 docker相关
1、查看docker版本信息
或
2、docker添加到用户组,不用使用docker时每次输入
3、启动docker
或
9.2 image镜像相关命令
1、查看本机有哪些镜像文件
或
2、删除镜像文件
或
或:
3、
或
或:
9.3 container容器相关命令
1、列出所有的容器
或
2、列出所有容器,包括终止运行的容器
或
或:
或
3、先远程仓库抓取镜像到本地
或:
4、运行容器
实例:
5、停止运行容器
或 在容器中输入: 或 直接在容器中按 快捷键
使用这种方式,之前的容器就会,你在容器中安装的环境,传入的文件都没有了,当你再次启动一个容器的时候,就会从新从镜像中安装,因此最好把需要的环境一开始就写到文件中,这样就可以把需要的环境都编译到image文件中!
退出容器之后,在容器中安装的额
6、删除容器
7、重新运行终止的容器
8、进入一个正在运行容器的终端
9、把容器中的文件或目录拷贝到本机
9.4 构建自己的image镜像
1、在中,编写不打包到image中的文件路径
2、编写:
3、创建image文件
创建成功后查看自己创建的镜像:
4 、用自己创建的镜像生成容器
参考:https://ruanyifeng.com/blog/2018/02/docker-tutorial.html
创作不易,观众老爷们请留步… 动起可爱的小手,点个赞再走呗 (๑◕ܫ←๑)
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/19975.html