Docker - docker的使用

一、docker的预备

1)、docker的概念

  docker是指容器化技术,用于支持创建和使用linux容器。借助 Docker,可将容器当做轻巧、模块化的虚拟机使用。同时,还将获得高度的灵活性,从而实现对容器的高效创建、部署及复制,并能将其从一个环境顺利迁移至另一个环境,从而有助于针对云来优化应用。

  docker本身并不是容器,它是创建容器的工具,是开源的应用容器引擎。让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

 2)、docker的优势

1)、更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

2)、更快速的交付和部署

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

3)、一致的运行环境

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。

4)、持续交付和部署

对开发和运维(DevOps (opens new window))人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) (opens new window)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) (opens new window)系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

5)、更轻松的迁移和扩展

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

6)、更轻松的维护和管理(可以回滚)

Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

3)、 docker的缺点

Docker 本身非常适合用于管理单个容器。但随着您开始使用越来越多的容器和容器化应用,并把它们划分成数百个部分,很可能会导致管理和编排变得非常困难。最终,您需要后退一步,对容器实施分组,以便跨所有容器提供网络、安全、遥测等服务。于是,Kubernetes应运而生。

4)、docker的组成

docker主要由镜像和容器组成,包括了3个基本概念

镜像(Image):docker镜像好比一个模板,相当于一个文件系统

容器(Container):容器需要通过镜像来创建。镜像和容器就像是面向对象中的类和实例一样。容器可以被创建/启动/停止/删除等。

仓库(Repository):仓库就是存放镜像的地方,分为私有仓库和公有仓库,类似git。

5)、docker的运行原理

docker是一个Client-Server结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问。dockerServer接收到docker-Client的指令,就会执行这个命令。

二、docker的安装

1)、 homebrew的cask支持Docker for Mac,可直接安装brew install --cask docker,可参考《Mac 通过brew安装docker》

2)、直接到官网下载,https://download.docker.com/mac/stable/Docker.dmg

3)、docker的参考文档:https://docs.docker.com

4)、dockerhub查找镜像源地址:https://hub.docker.com

三、 docker的使用 

1)、查看版本

docker --version

docker-compose --version 

docker-machine --version

2)、查看docker系统信息(包括镜像和容器的数量等)

docker info

3)、帮助命令

docker help

4)、查看 cpu的状况

docker stats

四、docker的基本命令

A:镜像相关命令:

1)、查看镜像可用版本(nginx为例)

docker search nginx

2)、下载(拉取)一个镜像

docker pull nginx:latest(:后面是镜像版本)

3)、运行一个nginx服务器

docker run -d -p 81:80 --name webserver nginx

可选项:

--name webserver :容器名称,用来区分容器

-p 81:80 :端口进行映射,将本地的81端口映射到容器内部的80端口

-v ~/nginx/html:/usr/share/nginx/html 数据卷挂载ro/rw,将主机项目中的目录挂载到容器的目录下,默认rw只能在宿主机外改变,容器内部不能改变

-d:设置容器中在后台一直运行

-it:使用交互方式运行,进入容器查看内容

-P:随机端口

-e:环境配置设置

注意:后台启动运行,必须要有一个前台进程,docker发现没有应用,就会自动停止

重点:数据卷挂载分为具名/匿名/指定路径挂载,容器数据卷挂载可以实现数据共享,容器的持久化和同步操作,可以使用docker volume 查看卷的情况,可以使用volumes-from实现多个容器之间的数据共享。

4)、停止容器命令  docker stop container_name/container_id

停止nginx服务 :docker stop webserver(或者nginx容器ID)

5)、删除容器命令  docker rm container_name/container_id

删除nginx服务 docker rm webserver(或者nginx容器ID)

6)、启动/重启容器服务 docker start/restart container_name/container_id

启动/重启nginx服务:docker start/restart webserver(或者nginx容器ID)

7)、列出所有镜像 (列表包含仓库名、标签、镜像 ID、创建时间以及所占用的空间)

docker images ls

说明:

REPOSITORY 镜像的仓库源

TAG 镜像的标签

IMAGE ID 镜像的id

CREATED 镜像的创建时间

SIZE 镜像的大小

可选项:

-a:列出所有的镜像

-q:只显示镜像的id

注意:镜像ID是唯一标识,一个镜像可以对应多个标签

8)、查看镜像、容器、数据卷所占用的空间

docker system df

9)、删除镜像

指定镜像:docker rmi [镜像名称/镜像短ID/镜像长ID/镜像摘要]

多个镜像:docker rmi 镜像ID 镜像ID 镜像ID

全部镜像:docker rmi $(docker images -aq)

10)、删除docker images ls 命令配合 删除所有仓库名为redis的镜像

docker  rmi $(docker images ls -q redis)

11)、查看镜像运行记录

docker history 镜像id

B:容器相关命令

1)、列出容器 

docker ps 

可选项:

-a:显示所有的容器,包括未运行的

-l:显示最近创建的容器

-n:列出最近创建的n个容器

-q:只显示容器的编号

2)、进入容器

docker exec -it [容器名称] /bin/bash

docker atthch 容器id

区别:docker exec 进入容器后开启一个新的终端,可以在里面操作;docker attach 进入容器正在执行的终端,不会启动新的进程

3)、退出容器

容器停止退回主机 exit 

容器不停止推出 ctrl+p+q 

4)、删除容器

指定容器:docker rm [容器id]

多个容器:docker rm 容器id 容器id 容器id

所有容器:docker rm $(docker ps -aq)    docker ps -a -q|xargs docker rm

注意:不能删除正在运行的容器,要删除正在运行的容器需要加 -f 参数,docker rm -f 容器id

5)、启动/重启容器

docker start/restart 容器id

6)、停止/强制停止容器

docker stop/kill 容器id

7)、查看容器日志

docker logs -f -t --tail 100 容器id 

--tail后面必须加参数条数

8)、查看容器中的进程信息

docker top 容器id

9)、查看容器的元数据(重要命令)

docker inspect 容器id

10)、从容器上拷贝数据到主机上

docker cp 容器id:容器内路径 主机路径

四、Dockerfile的指令

FROM 基础镜像,一切从这里开始

MAINTAINER 镜像的作者 姓名<邮箱>

RUN 镜像构建需要运行的命令

ADD 步骤,添加内容

WORKDIR 镜像的工作目录

VOLUME 挂载的目录

EXPOST 端口配置

CMD 指定容器启动要运行的命令,只有最后一个会生效,可被替代

ENTRYPOINT 指定这个容器启动要运行的命令,可以追加命令

ONBUILD 当构建一个被继承的Dockerfile时会运行

COPY 类似ADD将我们文件拷贝到镜像中

ENV 构建的时候设置环境变量

以上部分内容参考b站up主讲解,地址放在这里大家可以自己去学习:Docker最新超详细版教程通俗易懂

附:Docker 从入门到实践 

posted @ 2022-04-02 11:36  李若盛开  阅读(264)  评论(0)    收藏  举报