优秀的编程知识分享平台

网站首页 > 技术文章 正文

Docker 无门槛入门(docker入门到精通)

nanyue 2024-08-11 20:37:57 技术文章 9 ℃

Docker介绍

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Docker 支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。 运行中的这个镜像称为容器,容器启动是非常快速的。类似 windows 里面的 ghost 操 作系统,安装好后什么都有了。跟虚拟机相比,Docker容器启动快,占资源少,使用方便。

Docker 应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。

案例:

前几天,公司一批服务器就要到期了,由于服务器很早以前购买的,硬件的性能远比现在新出的云主机低,因此决定把所有服务器都换成新一代服务器,但是当准备动手迁移服务器时发现每台服务器都要做以下同样的事情:

  1. 安装 jdk、Tomcat、Redis、RabbitMq、Nginx
  2. 配置 jdk 环境变量和系统变量;
  3. 配置 Tomcat;
  4. 配置 Nginx;
  5. 配置 Redis;
  6. 配置 RabbitMq;
  7. 配置Web项目,配置自动化打包发布;

于是我们引入Docker,只需为每台服务器装好docker,然后在其中一台服务器中把 Tomcat 镜像从镜像仓库拉取下来,把这些配置都设置好,做成一个自己的镜像上传到镜像仓库中,之后在其他几台服务器都下载自己做的镜像,运行于 Docker 中,把代码上传,就万事大吉了。镜像的概念类似于我们使用的maven。

Docker 核心概念

1 docker 镜像(Images)

  • 一个只读模板,可以用来创建容器,一个镜像可以创建多个容器
  • Docker 提供了一个很简单的机制来创建和更新现有的镜像,甚至可以直接从其他人那里获取做好的镜像直接使用
  • 可以理解为 Java 中的类

2 docker 容器(Container)

  • 容器是从镜像创建的运行实例,也就是镜像启动后的一个实例称为容器,是独立运行的一个或一组应用。
  • docker 利用容器来运行应用,他可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台。
  • 可以把容器看做是一个简易版的 Linux(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
  • 可以理解为 Java 中通过类创建的实例。

3 docker 仓库(Repository)

  • 仓库是集中存放镜像文件的场所,类似 git 代码仓库等。
  • 仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器一般存放多个仓库,每个仓库又有多个镜像,每个镜像又有不同的标签(tag)。
  • 最大的公开仓库是 Docker Hub,国内的公开仓库有阿里云等。
  • 当创建好自己的镜像后,可以通过 push 命令把它上传到公开或私有仓库。
  • 仓库的概念类似 Git,仓库注册服务器可以理解为 GitHub 这种托管服务。

4 docker 主机(Host)

  • 一个物理或虚拟的机器用来执行 Docker 守护进程和容器。

5 docker客户端(Client)

  • 客户端通过命令行或其他工具使用 Docker。

Docker安装

1 查看 centos 版本(以 centos7.4 为例)

Docker 要求 CentOS 系统的内核版本高于 3.10。

通过命令:

uname -r

查看当前 centos 版本,如版本不符,需升级系统版本。

2 升级软件包及内核(可选)

yum update

3 安装 docker

yum install docker

4 启动 docker

systemctl start docker

5 将 docker 服务设为开机启动

systemtctl enable docker

6 停止 docker

systemtctl stop docker

Docker 镜像常用操作命令

镜像运行起来后,称为容器。 可以理解为软件下载(下载 QQ)--> 安装(QQ)--> 运行(QQ)的过程。 下面以 Tomcat 为例

1 搜索镜像

docker search tomcat

2 下载镜像

docker pull tomcat

3 根据镜像新建并启动容器

最简单的根据镜像新建并启动容器的命令如下:

docker run --name container-name -d image-name

运行一个容器,使用 docker run 命令即可。 另,docker run -参数 含义:

  • -- name:为容器起一个名称;
  • -d:detached,执行完这句命令后,控制台将不会阻塞,可以继续输入命令操作,不会阻塞,也就是启动守护式容器,如果执行 docker run --name mycentos -it centos会进入启动容器的命令控制台,也就是启动交互式容器;
  • -i:以交互方式运行容器,通常与 -t 搭配使用;
  • -t:为容器重新分配一个伪输入终端,通常与 -i 搭配使用;
  • -P:随机端口映射;
  • -p:指定端口映射,后面会有端口映射详细讲解;
  • image-name:要运行的镜像名称;

4 查看容器

可通过如下命令,查看运行中的容器列表:

docker ps
  • CONTAINER ID:启动时生成的 ID;
  • IMAGE:该容器使用的镜像;
  • COMMAND:容器启动时执行的命令;
  • CREATED:容器创建时间;
  • STATUS:当前容器状态;
  • PORTS:当前容器所使用的默认端口号;
  • NAMES:启动时给容器设置的名称。

另,docker ps -参数含义:

-a:查看所有容器,包括已停止运行的; -q:静默模式,只显示容器编号; -l:显示最近创建的容器; -n 3:显示最近创建的 num(此处为 3)个容器; --no-trunc:不截断输出,显示完整信息。

5 停止容器

通过以下命令来停止运行中的容器:

docker stop container-name/container-id

强制停止容器(类似强制关机):

docker kill container-name/container-id

6 启动容器

通过以下命令启动容器:

docker start container-name/container-id

7 重启容器

通过以下命令启动容器:

docker restart container-name/container-id

8 删除容器

删除单个容器:

docker rm container-id

删除多个容器:

docker rm container-id container-id 

删除所有容器:

docker rm $(docker ps -a -q )

另,docker rm -参数含义:

-f:强制删除,如果在运行中,先停止,再删除

9 查看容器日志

查看当前容器日志,可通过如下命令:

docker logs container-id/container-name

另,docker logs -参数含义:

  • -t:加入时间戳;
  • -f:跟随最新的日志打印;
  • --tail:显示最后多少条。

10 在运行的容器中执行命令

运行中的容器其实是一个功能完备的简易版 Linux 操作系统,所以我们可以像常规系统一样进行登陆及退出操作。

命令为:

docker exec -it container-id/container-name bash

退出命令为:

exit

Docker 端口映射

1 启动做端口映射的容器

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P(大写) 或 -p (小写) 参数来指定端口映射。启动容器的时候如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。

Docker 的端口映射通过 -p 或 -P 参数实现,命令如下:

docker run --name tomcat1 -d tomcat
docker run --name tomcat2 -d -p 8888:8080 tomcat

如上,就把主机端口 8888 请求映射到 Docker 容器内部端口 8080 了。

-p 和 -P 区别为:

-P : 随机映射一个49000~49900的端口到内部容器开放的网络端口

-p : 可以指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器

2 端口映射格式

ip:hostport:containerport #指定ip、指定主机port、指定容器port
eg. docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
指定映射使用一个特定地址,比如 localhost地址 127.0.0.1
ip::containerport #指定ip、未指定主机port、指定容器port
eg. docker run -d -p 127.0.0.1::5000 training/webapp python app.py
绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口
还可以使用 udp 标记来指定 udp 端口
eg. docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
hostport:container #未指定ip port、指定主机port、指定容器port 
eg. docker run -d -p 5000:5000 training/webapp python app.py
将本地的 5000 端口映射到容器的 5000 端口,默认会绑定本地所有接口上的所有地址

3 查看端口映射

可以通过如下命令查看容器映射了哪些端口及协议:

docker port container-id

示例:

[root@docker ~]#docker port 46114af6b44e
8080/tcp -> 0.0.0.0:8888
[root@docker ~]#docker port cea668ee4db0

如果返回空,则代表没进行端口映射。

4 小结

  • 容器有自己的内部网络和 ip 地址,可以使用 docker inspect container-id 可以获取所有的变量
  • Docker 还可以有一个可变的网络配置
  • -p 标记可以多次使用来绑定多个端口 eg. docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
最近发表
标签列表