当前位置:   article > 正文

docker从入门到入土

docker从入门到入土

docker到底是什么?

  • docker是世界领先的软件容器平台,基于GO语言进行开发实现
  • docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放开发人员
  • 用户可以方便地创建和使用容器,把自己的应用放入容器,容器还可以进行版本管理,复制,分享,修改,就像管理普通的代码一样
  • docker可以对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器

为什么要使用docker

docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化

容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销低

传统的开发流程中,我们的项目通常需要使用Mysql,Redis等环境,这些环境都是需要我们手动去进行下载并配置的,安装配置流程极其复杂,而且不同操作下的操作也不一样。

docker的出现完美地解决了这一问题,我们可以在容器中安装mysql。redis等软件环境,使得应用和环境架构分开,它的优势在于:

  1. 一致的运行环境,能够更轻松地迁移
  2. 对进程进行封装隔离,容器与容器之间互不影响,更高效地利用系统资源
  3. 可以通过镜像复制多个一致的容器
  4. 更快速的启动时间
  5. 一致的运行环境
  6. 持续交付和部署

linux中安装docker centos7 为例

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
  • 1
  • 2

安装完成后直接启动服务:

systemctl start docker
  • 1

推荐设置开机自启,执行指令 :

systemtl enable docker
  • 1

Docker中的几个概念

镜像

镜像就是一个只读模版,镜像可以用来创建docker容器,一个镜像可以创建多个容器

容器

容器是用镜像创建的运行实例,Docker利用容器独立运行一个或一组应用。它可以被启动,开始,停止,删除,每个容器都是相互隔离的,保证安全的平台。可以把容器看作是一个简易的linux环境和运行在其中的应用程序,容器的定义和镜像几乎一模一样。也是一堆层的统一视角。唯一区别在于容器的最上面那一层是可读可写的

仓库

仓库是集中存放镜像文件的场所。仓库和仓库注册服务器是有去别的,仓库注册服务器上往往放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签。仓库分为公开仓库和私有仓库两种,最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载,国内的公开仓库有阿里云,网易云等

总结

一个镜像代表一个软件;而基于某个镜像运行就是生成一个程序实例,这个程序实例就是容器;而仓库是用来存储Docker中所有镜像的

其中仓库又分为远程仓库和本地仓库,第一次访问依赖时,将其下载到本地仓库,第二次,第三次使用时直接用本地仓库的依赖即可

Docker初体验

可以去访问DockerHubhttps://hub.docker.com/open in new window

搜索想要下载的镜像,找到下载的指令

例如mysql的指令:

docker pull MySQL
  • 1

该指令会下载MySQL镜像的最新版本

docker镜像指令

查看docker中当前拥有哪些镜像:

docker images
  • 1

查询指定镜像名:

docker images MySQL 
  • 1

-q表示仅显示镜像的id:

docker images -q
  • 1

下载镜像使用:

docker pull MySQL:5.7
  • 1

未指定则下载最新的

删除镜像使用指令 :

docker images rm MySQL 
  • 1

还可以通过指定镜像id进行删除。

在删除之前应该先让容器停止

也可以进行强制执行删除

docker iamges rm -f id 
  • 1

该指令会将镜像和通过该镜像执行的容器全部删除,谨慎使用

docker容器指令

容器是基于镜像的

若需要通过镜像运行一个容器,则使用:

docker run tomcat:8.0-jre8
  • 1

如果没有这个镜像

所有就先去下载一个镜像

docker pull tomcat:8.0-jre8
  • 1

下载完成之后就可以运行了,运行后查看一下当前运行的容器:docker ps

通过该方式运行的tomcat是不能直接被外部访问的,因为容器具有隔离性,若是想直接通过8080端口访问容器内部的tomcat,则需要对宿主机端口与容器内的端口进行映射:

docker run -p 8080:8080 tomcat:8.0-jre8
  • 1

解释一下这两个端口的作用(8080:8080),第一个8080为宿主机端口,第二个8080为容器内的端口,外部访问8080端口就会通过映射访问容器内的8080端口。

此时外部就可以访问Tomcat了:

若是这样进行映射:

docker run -p 8088:8080 tomcat:8.0-jre8
  • 1

则外部需访问8088端口才能访问tomcat,需要注意的是,每次运行的容器都是相互独立的,所以同时运行多个tomcat容器并不会产生端口的冲突。

容器还能够以后台的方式运行,这样就不会占用终端:

docker run -d -p 8080:8080 tomcat:8.0-jre8
  • 1

启动容器时默认会给容器一个名称,但这个名称其实是可以设置的,使用指令:

docker run -d -p 8080:8080 --name tomcat01 tomcat:8.0-jre8
  • 1

此时的容器名称即为tomcat01,容器名称必须是唯一的

该参数会将运行和非运行的容器全部列举出来:

docker ps -a
  • 1

接下来是容器的开始,停止,重启指令,因为非常简单,

docker start xxx
docker restart xxx
docker stop xxx
docker kill xxx
docker rm xxx
docker rm -f xxx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查看容器的日志

docker logs xxx
  • 1

查看实时的日志

docker logs -f xxx
  • 1

通过-t参数还能够显示日志的时间戳,通常与-f参数联合使用

docker logs -ft xxx
  • 1

查看容器内运行了哪些进程可以使用指令:

docker top xxx
  • 1

若想与容器进行交互,则使用指令:

docker exec -it xxx bash
  • 1

此时终端将会进入容器内部,执行的指令都将在容器中生效

若退出则使用exit

下面将介绍如何在容器中部署一个项目

docker cp ./test.html xxx:/usr/local/tomcat/webapps
  • 1

通过docker cp 指令能够将文件从Centos复制到容器中,./test.html为centos中的资源路径,xxx为容器id,/usr/local/tomcat/webapps 为容器的资源路径,此时test.html文件将会被复制到该路径下

docker exec -it xxx bash
cd webapps
ls
  • 1
  • 2
  • 3

若是想见容器内的文件复制到centos中,则反过来写即可

docker cp xxx:usr/local/tomcat/webapps/test.html./
  • 1

所以现在若是想要部署项目,则先将项目上传到centos,然后将项目从centos复制到容器内,此时启动容器即可

看似使用docker中启动软件环境非常简单,但是同时也面临着一个问题,我们无法知晓容器内部具体细节,比如监听的端口,绑定的ip地址等

我们可以使用

docker inspect xxx
  • 1

docker数据卷

学习了容器的相关指令之后,我们来学习一下docker中的数据卷,它能够实现宿主机与容器之间的文件共享,它的好处在于我们对宿主机的文件进行修改将直接影响容器,而无需再将宿主机的文件再复制到容器中

若是想将宿主机中/opt/apps目录与容器中webapps目录做一个数据卷,则应该这样编写指令:

docker run -d -p 8080:8080 --name tomcat01 -v /opt/apps:/usr/local/tomcat/webapps tomcat:8.0-jre8
  • 1

若此时发现无法访问,这就说明我们的设置成功了。docker会将容器内的webapps目录与/opt/apps目录进行同步,而此时/opt/apps目录是空的,导致webapps目录也会变成空目录,所以无法访问

此时我们只需要向/opt/apps目录下添加文件,就会使得webapps目录也会拥有相同的文件,达到文件共享。

这种方式设置的数据卷称为自定义数据卷,因为数据卷的目录是我们自己设置的

docker还为我们提供了另一种设置数据卷的方式 :

docker run -d -p 8080:8080 --name tomcat01 -v aa:/usr/local/tomcat/webapps tomcat:8.0-jre8
  • 1

此时的aa并不是数据卷的目录而是数据卷的别名,docker会自动为我们创建一个名为aa的数据卷,并且会将容器内webapps目录下所有的内容复制到数据卷中,该数据卷的位置在/var/lib/docker/volumes目录下:

此时我们只需要修改该目录的内用就能够影响到容器

最后再介绍几个容器和镜像相关的指令:

docker commit -m '描述信息' -a '镜像作者' tomcat01 my_tomcat:1.0
  • 1

该指令能够将容器打包成一个镜像,此时查询docker中的镜像将会看到自己的镜像

若想将镜像备份出来,则可以使用指令:

docker save my_tomcat:1.0 -0 my-tomact-1.0.tar
  • 1

拥有.tar格式的镜像,如何加载到docker中呢?

docker load -i my-tomcat-1.0.tar
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/121350
推荐阅读
相关标签
  

闽ICP备14008679号